소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 지침은 다른 시스템에서 작동할 수 있지만 Ubuntu 및 macOS에서만 테스트되고 지원됩니다.
Linux 및 macOS용 설정
다음 빌드 도구를 설치하여 개발 환경을 구성하십시오.
Python 및 TensorFlow 패키지 종속성 설치
우분투
sudo apt install python3-dev python3-pip
맥 OS
Xcode 9.2 이상이 필요합니다.
Homebrew 패키지 관리자를 사용하여 설치:
brew install python
TensorFlow pip 패키지 종속성을 설치합니다(가상 환경을 사용하는 경우 --user
인수 생략).
pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps
바젤 설치
TensorFlow를 빌드하려면 Bazel을 설치해야 합니다. Bazelisk 는 Bazel을 설치하는 손쉬운 방법이며 TensorFlow용 올바른 Bazel 버전을 자동으로 다운로드합니다. 사용 편의성을 위해 PATH
에 bazel
실행 파일로 Bazelisk를 추가합니다.
Bazelisk를 사용할 수 없는 경우 Bazel을 수동으로 설치할 수 있습니다. TensorFlow의 .bazelversion 파일에서 올바른 Bazel 버전을 설치해야 합니다.
GPU 지원 설치(선택 사항, Linux만 해당)
macOS에 대한 GPU 지원은 없습니다 .
GPU에서 TensorFlow를 실행하는 데 필요한 드라이버 및 추가 소프트웨어를 설치하려면 GPU 지원 가이드를 읽어보세요.
TensorFlow 소스 코드 다운로드
Git을 사용하여 TensorFlow 저장소 복제:
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
리포지토리는 기본적으로 master
개발 분기로 설정됩니다. 빌드할 릴리스 분기를 확인할 수도 있습니다.
git checkout branch_name # r2.2, r2.3, etc.
선택 사항: 빌드 구성
TensorFlow 빌드는 저장소의 루트 디렉터리에 있는 .bazelrc
파일에 의해 구성됩니다. ./configure
또는 ./configure.py
스크립트를 사용하여 공통 설정을 조정할 수 있습니다.
구성을 변경해야 하는 경우 리포지토리의 루트 디렉터리에서 ./configure
스크립트를 실행합니다. 이 스크립트는 TensorFlow 종속성의 위치를 묻는 메시지를 표시하고 추가 빌드 구성 옵션(예: 컴파일러 플래그)을 요청합니다. 자세한 내용은 샘플 세션 섹션을 참조하십시오.
./configure
이 스크립트의 파이썬 버전인 ./configure.py
도 있습니다. 가상 환경을 사용하는 경우 python configure.py
환경 내의 경로에 우선 순위를 지정하는 반면 ./configure
환경 외부의 경로에 우선 순위를 지정합니다. 두 경우 모두 기본값을 변경할 수 있습니다.
샘플 세션
다음은 ./configure
스크립트의 샘플 실행을 보여줍니다(세션은 다를 수 있음).
구성 옵션
GPU 지원
GPU 지원을 위해 구성 중에 cuda=Y
설정하고 CUDA 및 cuDNN의 버전을 지정하십시오. 시스템에 여러 버전의 CUDA 또는 cuDNN이 설치되어 있는 경우 기본값에 의존하지 말고 버전을 명시적으로 설정하십시오. ./configure
시스템의 CUDA 라이브러리에 대한 심볼릭 링크를 생성하므로 CUDA 라이브러리 경로를 업데이트하는 경우 빌드하기 전에 이 구성 단계를 다시 실행해야 합니다.
최적화
컴파일 최적화 플래그의 경우 기본값( -march=native
)은 머신의 CPU 유형에 대해 생성된 코드를 최적화합니다. 그러나 다른 CPU 유형에 대해 TensorFlow를 빌드하는 경우 보다 구체적인 최적화 플래그를 고려하십시오. 예제는 GCC 설명서를 확인하십시오.
사전 구성된 구성
bazel build
명령에 추가할 수 있는 몇 가지 미리 구성된 빌드 구성이 있습니다. 예를 들면 다음과 같습니다.
-
--config=dbg
- 디버그 정보로 빌드합니다. 자세한 내용은 CONTRIBUTING.md를 참조하십시오. -
--config=mkl
인텔® MKL-DNN 지원. -
--config=monolithic
—대부분 정적이고 모놀리식 빌드를 위한 구성입니다.
pip 패키지 빌드 및 설치
pip 패키지는 두 단계로 빌드됩니다. bazel build
명령은 "package-builder" 프로그램을 만듭니다. 그런 다음 package-builder를 실행하여 패키지를 생성합니다.
패키지 빌더 빌드
bazel build
사용하여 CPU만 지원하는 TensorFlow 2.x 패키지 빌더를 만듭니다.
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package
GPU 지원
GPU를 지원하는 TensorFlow 패키지 빌더를 빌드하려면:
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package
Bazel 빌드 옵션
소스에서 TensorFlow를 빌드하면 많은 RAM을 사용할 수 있습니다. 시스템의 메모리가 제한된 경우 --local_ram_resources=2048
사용하여 Bazel의 RAM 사용량을 제한합니다.
공식 TensorFlow 패키지는 manylinux2014 패키지 표준을 준수하는 GCC 도구 체인으로 빌드됩니다.
패키지 빌드
bazel build
명령은 build_pip_package
라는 실행 파일을 생성합니다. 이 실행 파일은 pip
패키지를 빌드하는 프로그램입니다. 아래와 같이 실행 파일을 실행하여 /tmp/tensorflow_pkg
디렉토리에 .whl
패키지를 빌드합니다.
릴리스 브랜치에서 빌드하려면:
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
마스터에서 빌드하려면 --nightly_flag
사용하여 올바른 종속성을 가져옵니다.
./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg
동일한 소스 트리에서 CUDA 및 비 CUDA 구성을 모두 빌드할 수 있지만 동일한 소스 트리에서 이 두 구성 사이를 전환할 때 bazel clean
실행하는 것이 좋습니다.
패키지 설치
생성된 .whl
파일의 파일 이름은 TensorFlow 버전과 플랫폼에 따라 다릅니다. 예를 들어 pip install
사용하여 패키지를 설치합니다.
pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl
도커 리눅스 빌드
TensorFlow의 Docker 개발 이미지는 소스에서 Linux 패키지를 빌드하기 위한 환경을 설정하는 쉬운 방법입니다. 이러한 이미지에는 TensorFlow를 빌드하는 데 필요한 소스 코드와 종속 항목이 이미 포함되어 있습니다. 설치 지침 및 사용 가능한 이미지 태그 목록을 보려면 TensorFlow Docker 가이드 로 이동하세요.
CPU 전용
다음 예제에서는 :devel
이미지를 사용하여 최신 TensorFlow 소스 코드에서 CPU 전용 패키지를 빌드합니다. 사용 가능한 TensorFlow -devel
태그는 Docker 가이드를 확인하세요.
최신 개발 이미지를 다운로드하고 pip 패키지를 빌드하는 데 사용할 Docker 컨테이너를 시작합니다.
docker pull tensorflow/tensorflow:devel
docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:devel bash
git pull # within the container, download the latest source code
위의 docker run
명령은 소스 트리의 루트인 /tensorflow_src
디렉토리에서 셸을 시작합니다. 호스트의 현재 디렉터리를 컨테이너의 /mnt
디렉터리에 마운트하고 호스트 사용자의 정보를 환경 변수를 통해 컨테이너에 전달합니다(권한 설정에 사용됨 - Docker가 이를 까다롭게 만들 수 있음).
또는 컨테이너 내에서 TensorFlow의 호스트 복사본을 빌드하려면 컨테이너의 /tensorflow
디렉터리에 호스트 소스 트리를 마운트합니다.
docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \ -e HOST_PERMS="\\((id -u):\\)(id -g)" tensorflow/tensorflow:devel bash
소스 트리가 설정되면 컨테이너의 가상 환경 내에서 TensorFlow 패키지를 빌드합니다.
- 선택 사항: 빌드 구성 - 사용자에게 빌드 구성 질문에 답하라는 메시지가 표시됩니다.
- pip 패키지를 만드는 데 사용되는 도구를 빌드합니다.
- 도구를 실행하여 pip 패키지를 만듭니다.
- 컨테이너 외부에 대한 파일의 소유권 권한을 조정합니다.
./configure # if necessary
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt # create package
chown $HOST_PERMS /mnt/tensorflow-version-tags.whl
컨테이너 내에서 패키지를 설치하고 확인합니다.
pip uninstall tensorflow # remove current version
pip install /mnt/tensorflow-version-tags.whl
cd /tmp # don't import from source directory
python -c "import tensorflow as tf; print(tf.__version__)"
호스트 컴퓨터에서 TensorFlow pip 패키지는 현재 디렉터리(호스트 사용자 권한 포함)에 있습니다. ./tensorflow- version - tags .whl
GPU 지원
Docker는 TensorFlow에 대한 GPU 지원을 구축하는 가장 쉬운 방법입니다. 호스트 시스템에는 NVIDIA® 드라이버 만 필요하기 때문입니다( NVIDIA® CUDA® Toolkit을 설치할 필요가 없음). GPU 지원 가이드 및 TensorFlow Docker 가이드를 참조하여 nvidia-docker (Linux 전용)를 설정하세요.
다음 예제에서는 TensorFlow :devel-gpu
이미지를 다운로드하고 nvidia-docker
사용하여 GPU 지원 컨테이너를 실행합니다. 이 개발 이미지는 GPU를 지원하는 pip 패키지를 빌드하도록 구성됩니다.
docker pull tensorflow/tensorflow:devel-gpu
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \ tensorflow/tensorflow:devel-gpu bash
git pull # within the container, download the latest source code
그런 다음 컨테이너의 가상 환경 내에서 GPU 지원으로 TensorFlow 패키지를 빌드합니다.
./configure # if necessary
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt # create package
chown $HOST_PERMS /mnt/tensorflow-version-tags.whl
컨테이너 내에서 패키지를 설치 및 확인하고 GPU를 확인합니다.
pip uninstall tensorflow # remove current version
pip install /mnt/tensorflow-version-tags.whl
cd /tmp # don't import from source directory
python -c "import tensorflow as tf; print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"
테스트된 빌드 구성
리눅스
CPU
버전 | 파이썬 버전 | 컴파일러 | 빌드 도구 |
---|---|---|---|
텐서플로우-2.12.0 | 3.8-3.11 | GCC 9.3.1 | 바젤 5.3.0 |
텐서플로우-2.11.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.3.0 |
텐서플로우-2.10.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.1.1 |
텐서플로우-2.9.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.0.0 |
텐서플로우-2.8.0 | 3.7-3.10 | GCC 7.3.1 | 바젤 4.2.1 |
텐서플로우-2.7.0 | 3.7-3.9 | GCC 7.3.1 | 바젤 3.7.2 |
텐서플로우-2.6.0 | 3.6-3.9 | GCC 7.3.1 | 바젤 3.7.2 |
텐서플로우-2.5.0 | 3.6-3.9 | GCC 7.3.1 | 바젤 3.7.2 |
텐서플로우-2.4.0 | 3.6-3.8 | GCC 7.3.1 | 바젤 3.1.0 |
텐서플로우-2.3.0 | 3.5-3.8 | GCC 7.3.1 | 바젤 3.1.0 |
텐서플로우-2.2.0 | 3.5-3.8 | GCC 7.3.1 | 바젤 2.0.0 |
텐서플로우-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | 바젤 0.27.1 |
텐서플로우-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | 바젤 0.26.1 |
텐서플로우-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | 바젤 0.26.1 |
텐서플로우-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | 바젤 0.24.1 |
텐서플로우-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | 바젤 0.19.2 |
텐서플로우-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 |
텐서플로우-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 |
텐서플로우-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 |
텐서플로우-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.11.0 |
텐서플로우-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.10.0 |
텐서플로우-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.10.0 |
텐서플로우-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.9.0 |
텐서플로우-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.8.0 |
텐서플로우-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.5.4 |
텐서플로우-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.5 |
텐서플로우-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.5 |
텐서플로우-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.2 |
텐서플로우-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.2 |
GPU
버전 | 파이썬 버전 | 컴파일러 | 빌드 도구 | cuDNN | 쿠다 |
---|---|---|---|---|---|
텐서플로우-2.12.0 | 3.8-3.11 | GCC 9.3.1 | 바젤 5.3.0 | 8.6 | 11.8 |
텐서플로우-2.11.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.3.0 | 8.1 | 11.2 |
텐서플로우-2.10.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.1.1 | 8.1 | 11.2 |
텐서플로우-2.9.0 | 3.7-3.10 | GCC 9.3.1 | 바젤 5.0.0 | 8.1 | 11.2 |
텐서플로우-2.8.0 | 3.7-3.10 | GCC 7.3.1 | 바젤 4.2.1 | 8.1 | 11.2 |
텐서플로우-2.7.0 | 3.7-3.9 | GCC 7.3.1 | 바젤 3.7.2 | 8.1 | 11.2 |
텐서플로우-2.6.0 | 3.6-3.9 | GCC 7.3.1 | 바젤 3.7.2 | 8.1 | 11.2 |
텐서플로우-2.5.0 | 3.6-3.9 | GCC 7.3.1 | 바젤 3.7.2 | 8.1 | 11.2 |
텐서플로우-2.4.0 | 3.6-3.8 | GCC 7.3.1 | 바젤 3.1.0 | 8.0 | 11.0 |
텐서플로우-2.3.0 | 3.5-3.8 | GCC 7.3.1 | 바젤 3.1.0 | 7.6 | 10.1 |
텐서플로우-2.2.0 | 3.5-3.8 | GCC 7.3.1 | 바젤 2.0.0 | 7.6 | 10.1 |
텐서플로우-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | 바젤 0.27.1 | 7.6 | 10.1 |
텐서플로우-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | 바젤 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | 바젤 0.26.1 | 7.4 | 10.0 |
tensorflow_gpu-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | 바젤 0.24.1 | 7.4 | 10.0 |
tensorflow_gpu-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | 바젤 0.19.2 | 7.4 | 10.0 |
tensorflow_gpu-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | 바젤 0.4.2 | 5.1 | 8 |
맥 OS
CPU
버전 | 파이썬 버전 | 컴파일러 | 빌드 도구 |
---|---|---|---|
텐서플로우-2.12.0 | 3.8-3.11 | xcode 10.15의 Clang | 바젤 5.3.0 |
텐서플로우-2.11.0 | 3.7-3.10 | xcode 10.14의 Clang | 바젤 5.3.0 |
텐서플로우-2.10.0 | 3.7-3.10 | xcode 10.14의 Clang | 바젤 5.1.1 |
텐서플로우-2.9.0 | 3.7-3.10 | xcode 10.14의 Clang | 바젤 5.0.0 |
텐서플로우-2.8.0 | 3.7-3.10 | xcode 10.14의 Clang | 바젤 4.2.1 |
텐서플로우-2.7.0 | 3.7-3.9 | xcode 10.11의 Clang | 바젤 3.7.2 |
텐서플로우-2.6.0 | 3.6-3.9 | xcode 10.11의 Clang | 바젤 3.7.2 |
텐서플로우-2.5.0 | 3.6-3.9 | xcode 10.11의 Clang | 바젤 3.7.2 |
텐서플로우-2.4.0 | 3.6-3.8 | xcode 10.3의 Clang | 바젤 3.1.0 |
텐서플로우-2.3.0 | 3.5-3.8 | xcode 10.1의 Clang | 바젤 3.1.0 |
텐서플로우-2.2.0 | 3.5-3.8 | xcode 10.1의 Clang | 바젤 2.0.0 |
텐서플로우-2.1.0 | 2.7, 3.5-3.7 | xcode 10.1의 Clang | 바젤 0.27.1 |
텐서플로우-2.0.0 | 2.7, 3.5-3.7 | xcode 10.1의 Clang | 바젤 0.27.1 |
텐서플로우-2.0.0 | 2.7, 3.3-3.7 | xcode 10.1의 Clang | 바젤 0.26.1 |
텐서플로우-1.15.0 | 2.7, 3.3-3.7 | xcode 10.1의 Clang | 바젤 0.26.1 |
텐서플로우-1.14.0 | 2.7, 3.3-3.7 | xcode의 Clang | 바젤 0.24.1 |
텐서플로우-1.13.1 | 2.7, 3.3-3.7 | xcode의 Clang | 바젤 0.19.2 |
텐서플로우-1.12.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.15.0 |
텐서플로우-1.11.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.15.0 |
텐서플로우-1.10.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.15.0 |
텐서플로우-1.9.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.11.0 |
텐서플로우-1.8.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.10.1 |
텐서플로우-1.7.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.10.1 |
텐서플로우-1.6.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.8.1 |
텐서플로우-1.5.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.8.1 |
텐서플로우-1.4.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.5.4 |
텐서플로우-1.3.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.5 |
텐서플로우-1.2.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.5 |
텐서플로우-1.1.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.2 |
텐서플로우-1.0.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.2 |
GPU
버전 | 파이썬 버전 | 컴파일러 | 빌드 도구 | cuDNN | 쿠다 |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | xcode의 Clang | 바젤 0.4.2 | 5.1 | 8 |