소스에서 빌드

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 지침은 다른 시스템에서 작동할 수 있지만 Ubuntu 및 macOS에서만 테스트되고 지원됩니다.

Linux 및 macOS용 설정

다음 빌드 도구를 설치하여 개발 환경을 구성하십시오.

Python 및 TensorFlow 패키지 종속성 설치

우분투

sudo apt install python3-dev python3-pip

맥 OS

Xcode 9.2 이상이 필요합니다.

Homebrew 패키지 관리자를 사용하여 설치:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/opt/python/libexec/bin:$PATH"
# if you are on macOS 10.12 (Sierra) use export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
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 실행 파일로 bazel 를 추가합니다.

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 빌드 옵션

빌드 옵션 은 Bazel 명령줄 참조 를 참조하세요.

소스에서 TensorFlow를 빌드하면 많은 RAM을 사용할 수 있습니다. 시스템의 메모리가 제한된 경우 --local_ram_resources=2048 을 사용하여 Bazel의 RAM 사용량을 제한합니다.

공식 TensorFlow 패키지 는 manylinux2010 패키지 표준을 준수하는 GCC 도구 체인으로 빌드됩니다.

GCC 5 이상의 경우 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" 을 사용하여 이전 ABI와의 호환성을 빌드할 수 있습니다. ABI 호환성은 공식 TensorFlow 패키지에 대해 빌드된 사용자 지정 작업이 GCC 5 빌드 패키지에서 계속 작동하도록 합니다.

패키지 빌드

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 패키지를 빌드합니다.

  1. 선택 사항: 빌드 구성 - 사용자에게 빌드 구성 질문에 답하라는 메시지가 표시됩니다.
  2. pip 패키지를 만드는 데 사용되는 도구를 빌드합니다.
  3. 도구를 실행하여 pip 패키지를 만듭니다.
  4. 컨테이너 외부에 대한 파일의 소유권 권한을 조정합니다.
./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.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.0.0
텐서플로우-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.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.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