원문: https://github.com/tensorflow/tensorflow/blob/master/CONTRIBUTING.md
번역자: tucan9389
PR을 날리기 전에 아래 리스트를 확인해보세요.
- 기여 가이드라인(contributing guidelines) 읽어보기.
- 행동강령(Code of Conduct) 읽어보기.
- Contributor License Agreement (CLA)에 서명을 했는지 확인하기.
- 나의 변경사항이 이 가이드라인과 일관성이 있는지 확인하기.
- 변경사항이 코딩 스타일에 적합한지.
- 유닛 테스트 돌려보기.
우리는 여러분의 조각을 받아드리고 싶습니다! 받아드리기 전에, 몇가지 법적 부분을 인지해야합니다.
개인 또는 법인 컨트리뷰터 라이센스 계약(CLA)를 작성해주세요.
- 만약 당신이 개인적으로 기존의 소스코드를 짜고 있고 당신의 지적 재산권을 가지고 있다고 확인할 경우, 개인 CLA에 서명해야합니다.
- 만약 당신이 회사에서 기여하기를 원하는 경우, 법인 CLA에 서명해야합니다.
위의 두 링크 중 적절한 CLA에 들어가서 서명을 하고 되돌아오는 지시사항을 따르십시오. 우리가 서명을 받으면 당신의 PR을 수용할 수 있게 됩니다.
주의: CLA에 서명한 사람만 기존 코드를 주 저장소에 받아드릴 수 있습니다.
Tensorflow를 개선하고 싶으면 우리에게 PR을 날려주십시오! 처음인 사람을 위해 Github에 howto 페이지가 있습니다.
여러분의 PR을 리뷰하기위해 Tensorflow 팀 맴버들이 지정될 것 입니다. PR이 승인되고 CI를 통과하면 우리가 PR을 머지(merge)시킬것입니다. 어떤 PR에대해서는 그 패치를 먼저 우리의 내부적인 버전 관리 시스템에 적용시킬 것입니다. 그리고 나중에 기존의 PR이 클로즈되는 시점에서 그 변경사항을 새로운 커밋으로 내보냅니다. 그 PR에 있는 커밋들은 작성자로써 PR 창작자와함께 한 커밋으로 만들어질 것 입니다. 이 PR은 내부적으로 보류중인 병합으로 표시될 것 입니다.
기여를 하고 싶지만, 어디서부터 시작해야할지 모르겠다면 "contributions welcome" 라벨이 붙어있는 이슈들을 한번 보십시오. 이 이슈들은 특별히 외부 컨트리뷰터들에게 적합하다고 생각하는 것이며, 우리가 지금 바로 처리할 것은 아닐 것 입니다. 한 이슈에서 시작하기로 결정했으면 코멘트를 달아서 당신이 작업한다는 것을 다른 사람들이 알 수 있도록 해주십시오. 도움이 필요하면 이슈 코멘트 스레드를 사용하여 요청하십시오.
리뷰를 위해 PR를 날리기 전에, 변경사항들이 가이드라인을 지키는지 아래 Tensorflow 코딩 스타일을 따르는지 확인해 주십시오.
- 새로운 기능을 기여할때는 a) 올바르게 코드를 제안했는지, b) 유지보수 비용을 줄이기위해 미래에 코드가 망가지는 것을 방지하는 것에 도움이 되도록 유닛 테스트를 포함시키세요.
- 버그가 있다는 것은 보통 테스크 커버리지가 불충분하다는것을 의미하기 때문에, 버그 수정은 일반적으로 유닛 테스트를 필요로 합니다.
- (tensorflow/core 혹은 tensorflow/python 같은) Tensorflow의 코어한 부분의 코드를 건드릴 때는 API 호환성을 염두하세요. Tensorflow는 버전 1까지 왔습니다. 그러므로 메이저 릴리즈 없이는 이전 버전과 호환되지 않는 API 변경을 만들어서는 안 됩니다. 당신 PR의 리뷰어는 어떤 API 호환성 이슈에대해 댓글을 달 것 입니다.
- Tensorflow에 새로운 기능을 기여할때는 유지보수 부담이 기본적으로 Tensorflow 팀에게 가게됩니다. 이것은 기여 부분의 이점과 그 기능의 유지보수 비용에대해 비교해야 합니다.
- 완전히 새로운 기능(예를들면 커팅-엣지 알고리즘을 구현한 새로운 op)은 핵심 코드에 이전할지 고려되기 전까지는 tensorflow/contrib에서 대기시간을 가질 것입니다.
새로운 파일의 상단에 라이센스를 넣어주십시오.
- C/C++ license example
- Python license example
- Java license example
- Go license example
- Bash license example
- HTML license example
- JavaScript/TypeScript license example
Bazel BUILD 파일은 라이센스 섹션을 포함시켜야합니다. 예를들면 BUILD example.
구글 C++ 스타일 가이드에 따라 Tensorflow C++ 코드를 변경하십시오.
clang-tidy
를 사용해서 여러분의 C/C++ 변경사항들을 체크하십시오. clang-tidy를 설치하려면 우분투 16.04에서 아래 명령을 실행하십시오.
apt-get install -y clang-tidy
아래 명령을 통해 C/C++ 파일을 체크할 수 있습니다.
clang-format <my_cc_file> --style=google > /tmp/my_cc_file.cc
diff <my_cc_file> /tmp/my_cc_file.cc
구글 Python 스타일 가이드에 따라 Tensorflow 파이썬 코드를 변경하십시오.
pylint
를 사용해서 여러분의 Python 변경사항을 체크하십시오. pylint
를 설치하고 Tensorflow의 커스텀 스타일 정의를 불러오십시오.
pip install pylint
wget -O /tmp/pylintrc https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/tools/ci_build/pylintrc
여러분의 시스템에 Docker가 설치되어있다면 아래 명령으로 변경사항에 sanity check를 실행해볼 수 있습니다.
tensorflow/tools/ci_build/ci_build.sh CPU tensorflow/tools/ci_build/ci_sanity.sh
변경사항에 존재하는 대부분의 라이센스나 Python 코딩 스타일, BUILD 파일 이슈를 잡아낼 것 입니다.
Tensorflow 유닛 테스트를 실행하려면 두가지 방법이 있습니다.
-
시스템에 바로 설치한 툴과 라이브러리를 사용하기
필요한 패키지는 CPU-only developer Dockerfile와 GPU developer Dockerfile를 참고하십시오. 혹은 Docker images라 불리는 것을 사용하십시오(예를들면 개발시 여러분의 시스템에 바로 패키지를 설치하지 않도록 도와주는
tensorflow/tensorflow::nightly-devel
와tensorflow/tensorflow:nightly-devel-gpu
).이 패키지들을 설치하고나면 아래처럼 하여 bazel에서 특정 유닛 테스트를 실행할 수 있습니다.
그 테스트들이 GPU에서 돌아가면 CUDA를 LD_LIBRARY_PATH 경로로 맞추고
cuda
옵션 플래그를 추가합니다.export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH" export flags="--config=opt --config=cuda -k"
예를들어 tensorflow/python 아래에 있는 모든 테스트를 실행시키려면 이렇게 하십시오.
bazel test${flags} // tensorflow/python/...
-
Docker와 Tensorflow의 CI 스크립트 사용하기
# Install Docker first, then this will build and run cpu tests tensorflow/tools/ci_build/ci_build.sh CPU bazel test //tensorflow/...
세부적인 내용은 Tensorflow Builds(영문)을 보십시오.