Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

소스에서 빌드

소스에서 TensorFlow pip 패키지를 빌드하고 Ubuntu Linux 및 macOS에 설치합니다. 명령어는 다른 시스템에도 적용될 수 있지만, Ubuntu 및 macOS용으로만 테스트되었으며 지원됩니다.

Linux 및 macOS용 설정

다음 빌드 도구를 설치하여 개발 환경을 구성합니다.

Python 및 TensorFlow 패키지 종속성 설치

Ubuntu

sudo apt install python-dev python-pip  # or python3-dev python3-pip

macOS

Xcode 9.2 이상이 필요합니다.

Homebrew 패키지 관리자를 사용하여 설치합니다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
brew install python@2  # or python (Python 3)

TensorFlow pip 패키지 종속성을 설치합니다. 가상 환경을 사용하는 경우 --user 인수를 생략합니다.

pip install -U --user pip six numpy wheel setuptools mock 'future>=0.17.1'
pip install -U --user keras_applications --no-deps
pip install -U --user keras_preprocessing --no-deps

Bazel 설치

TensorFlow를 빌드하려면 Bazel을 설치해야 합니다. Bazelisk는 Bazel을 설치하는 쉬운 방법이며 TensorFlow에 올바른 Bazel 버전을 자동으로 다운로드합니다. 사용 편의성을 위해 PATHbazel 실행 파일로 Bazelisk를 추가합니다.

Bazelisk를 사용할 수 없는 경우 수동으로 Bazel을 설치할 수 있습니다. 지원되는 Bazel 버전을 설치해야 합니다. tensorflow/configure.py에서 지정된 _TF_MIN_BAZEL_VERSION_TF_MAX_BAZEL_VERSION 사이의 버전이면 됩니다.

GPU 지원 설치(선택사항, Linux만 해당)

macOS에는 GPU가 지원되지 않습니다.

GPU 지원 가이드에 따라 GPU에서 TensorFlow를 실행하는 데 필요한 드라이버 및 추가 소프트웨어를 설치합니다.

TensorFlow 소스 코드 다운로드

Git를 사용하여 TensorFlow 저장소를 클론합니다.

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

저장소는 기본적으로 master 개발 브랜치로 설정됩니다. 빌드할 출시 브랜치를 체크아웃할 수도 있습니다.

git checkout branch_name  # r1.9, r1.10, etc.

빌드 구성

TensorFlow 소스 트리의 루트에서 ./configure를 실행하여 시스템 빌드를 구성합니다. 이 스크립트는 TensorFlow 종속성 위치를 묻는 메시지를 표시하고 추가 빌드 구성 옵션(예: 컴파일러 플래그)을 요청합니다.

./configure

샘플 세션

./configure 스크립트는 ./configure의 샘플 실행을 보여줍니다(세션은 다를 수 있음).

구성 옵션

GPU 지원

GPU 지원의 경우 구성 중에 cuda=Y를 설정하고 CUDA 및 cuDNN의 버전을 지정합니다. 시스템에 여러 버전의 CUDA 또는 cuDNN이 설치되어 있는 경우 기본값을 사용하지 않고 명시적으로 버전을 설정합니다. ./configure는 시스템의 CUDA 라이브러리로 연결되는 심볼릭 링크를 만들기 때문에 CUDA 라이브러리 경로를 업데이트한다면 빌드하기 전에 이 구성 단계를 다시 실행해야 합니다.

최적화

컴파일 최적화 플래그의 경우 기본값(-march=native)을 사용하면 생성되는 코드가 시스템의 CPU 유형에 최적화됩니다. 그러나 다른 CPU 유형으로 TensorFlow를 빌드하는 경우 보다 구체적인 최적화 플래그를 사용하는 것이 좋습니다. 예는 GCC 매뉴얼을 참조하세요.

사전 구성된 구성

bazel build 명령어에 추가할 수 있는 사전 구성된 빌드 구성이 있습니다. 예를 들면 다음과 같습니다.

  • --config=mkl - Intel® MKL-DNN 지원
  • --config=monolithic - 대부분 정적인 모놀리식 빌드 구성
  • --config=v1 - TensorFlow 2.x 대신 TensorFlow 1.x 빌드

pip 패키지 빌드

TensorFlow 2.x

tensorflow:master 저장소가 기본적으로 2.x 빌드로 업데이트되었습니다. Bazel을 설치하고 bazel build를 사용하여 TensorFlow 패키지를 만듭니다.

bazel build //tensorflow/tools/pip_package:build_pip_package

TensorFlow 1.x

마스터에서 TensorFlow 1.x 버전을 빌드하려면 bazel build --config=v1을 사용하여 TensorFlow 1.x 패키지를 만듭니다.

bazel build --config=v1 //tensorflow/tools/pip_package:build_pip_package

CPU만

bazel을 사용하여 CPU만 지원하는 TensorFlow 패키지 빌더를 만듭니다.

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

GPU 지원

GPU를 지원하는 TensorFlow 패키지 빌더를 만들려면 다음을 실행합니다.

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

Bazel 빌드 옵션

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

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

공식 TensorFlow 패키지는 manylinux2010 패키지 표준을 준수하는 GCC 7.3 도구 모음으로 빌드되었습니다.

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

패키지 빌드

bazel build 명령어는 pip 패키지를 빌드하는 프로그램인 build_pip_package 실행 파일을 만듭니다. 다음과 같이 실행 파일을 실행하여 /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을 실행하는 것이 좋습니다.

패키지 설치

TensorFlow 버전 및 플랫폼에 따라 생성되는 .whl 파일의 파일 이름이 달라집니다. pip install을 사용하여 패키지를 설치합니다. 예를 들면 다음과 같습니다.

pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

Docker Linux 빌드

TensorFlow의 Docker 개발 이미지를 사용하면 소스에서 Linux 패키지를 빌드하는 환경을 간편하게 설정할 수 있습니다. 이 이미지에는 TensorFlow를 빌드하는 데 필요한 소스 코드 및 종속성이 이미 포함되어 있습니다. 설치 및 사용 가능한 이미지 태그 목록은 TensorFlow Docker 가이드를 참조하세요.

CPU만

다음 예에서는 :devel 이미지를 사용하여 최신 TensorFlow 소스 코드에서 CPU 전용 Python 2 패키지를 빌드합니다. 사용 가능한 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  # answer prompts or use defaults

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을 설치할 필요가 없기 때문입니다. nvidia-docker(Linux만)를 설정하려면 GPU 지원 가이드 및 TensorFlow Docker 가이드를 참조하세요.

다음 예에서는 TensorFlow :devel-gpu-py3 이미지를 다운로드하고 nvidia-docker를 사용하여 GPU 지원 컨테이너를 실행합니다. 이 개발 이미지는 GPU를 지원하는 Python 3 pip 패키지를 빌드하도록 구성되었습니다.

docker pull tensorflow/tensorflow:devel-gpu-py3
docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:devel-gpu-py3 bash
git pull  # within the container, download the latest source code

컨테이너의 가상 환경 내에서 GPU를 지원하는 TensorFlow 패키지를 빌드합니다.

./configure  # answer prompts or use defaults

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(tf.contrib.eager.num_gpus())"

테스트된 빌드 구성

Linux

CPU

버전Python 버전컴파일러빌드 도구
tensorflow-2.1.02.7, 3.5-3.7GCC 7.3.1Bazel 0.27.1
tensorflow-2.0.02.7, 3.3-3.7GCC 7.3.1Bazel 0.26.1
tensorflow-1.14.02.7, 3.3-3.7GCC 4.8Bazel 0.24.1
tensorflow-1.13.12.7, 3.3-3.7GCC 4.8Bazel 0.19.2
tensorflow-1.12.02.7, 3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.11.02.7, 3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.10.02.7, 3.3-3.6GCC 4.8Bazel 0.15.0
tensorflow-1.9.02.7, 3.3-3.6GCC 4.8Bazel 0.11.0
tensorflow-1.8.02.7, 3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.7.02.7, 3.3-3.6GCC 4.8Bazel 0.10.0
tensorflow-1.6.02.7, 3.3-3.6GCC 4.8Bazel 0.9.0
tensorflow-1.5.02.7, 3.3-3.6GCC 4.8Bazel 0.8.0
tensorflow-1.4.02.7, 3.3-3.6GCC 4.8Bazel 0.5.4
tensorflow-1.3.02.7, 3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.2.02.7, 3.3-3.6GCC 4.8Bazel 0.4.5
tensorflow-1.1.02.7, 3.3-3.6GCC 4.8Bazel 0.4.2
tensorflow-1.0.02.7, 3.3-3.6GCC 4.8Bazel 0.4.2

GPU

버전Python 버전컴파일러빌드 도구cuDNNCUDA
tensorflow-2.1.02.7, 3.5-3.7GCC 7.3.1Bazel 0.27.17.610.1
tensorflow-2.0.02.7, 3.3-3.7GCC 7.3.1Bazel 0.26.17.410.0
tensorflow_gpu-1.14.02.7, 3.3-3.7GCC 4.8Bazel 0.24.17.410.0
tensorflow_gpu-1.13.12.7, 3.3-3.7GCC 4.8Bazel 0.19.27.410.0
tensorflow_gpu-1.12.02.7, 3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.11.02.7, 3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.10.02.7, 3.3-3.6GCC 4.8Bazel 0.15.079
tensorflow_gpu-1.9.02.7, 3.3-3.6GCC 4.8Bazel 0.11.079
tensorflow_gpu-1.8.02.7, 3.3-3.6GCC 4.8Bazel 0.10.079
tensorflow_gpu-1.7.02.7, 3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.6.02.7, 3.3-3.6GCC 4.8Bazel 0.9.079
tensorflow_gpu-1.5.02.7, 3.3-3.6GCC 4.8Bazel 0.8.079
tensorflow_gpu-1.4.02.7, 3.3-3.6GCC 4.8Bazel 0.5.468
tensorflow_gpu-1.3.02.7, 3.3-3.6GCC 4.8Bazel 0.4.568
tensorflow_gpu-1.2.02.7, 3.3-3.6GCC 4.8Bazel 0.4.55.18
tensorflow_gpu-1.1.02.7, 3.3-3.6GCC 4.8Bazel 0.4.25.18
tensorflow_gpu-1.0.02.7, 3.3-3.6GCC 4.8Bazel 0.4.25.18

macOS

CPU

버전Python 버전컴파일러빌드 도구
tensorflow-2.0.02.7, 3.5-3.7xcode 10.1의 ClangBazel 0.27.1
tensorflow-2.0.02.7, 3.3-3.7xcode 10.1의 ClangBazel 0.26.1
tensorflow-1.14.02.7, 3.3-3.7xcode의 ClangBazel 0.24.1
tensorflow-1.13.12.7, 3.3-3.7xcode의 ClangBazel 0.19.2
tensorflow-1.12.02.7, 3.3-3.6xcode의 ClangBazel 0.15.0
tensorflow-1.11.02.7, 3.3-3.6xcode의 ClangBazel 0.15.0
tensorflow-1.10.02.7, 3.3-3.6xcode의 ClangBazel 0.15.0
tensorflow-1.9.02.7, 3.3-3.6xcode의 ClangBazel 0.11.0
tensorflow-1.8.02.7, 3.3-3.6xcode의 ClangBazel 0.10.1
tensorflow-1.7.02.7, 3.3-3.6xcode의 ClangBazel 0.10.1
tensorflow-1.6.02.7, 3.3-3.6xcode의 ClangBazel 0.8.1
tensorflow-1.5.02.7, 3.3-3.6xcode의 ClangBazel 0.8.1
tensorflow-1.4.02.7, 3.3-3.6xcode의 ClangBazel 0.5.4
tensorflow-1.3.02.7, 3.3-3.6xcode의 ClangBazel 0.4.5
tensorflow-1.2.02.7, 3.3-3.6xcode의 ClangBazel 0.4.5
tensorflow-1.1.02.7, 3.3-3.6xcode의 ClangBazel 0.4.2
tensorflow-1.0.02.7, 3.3-3.6xcode의 ClangBazel 0.4.2

GPU

버전Python 버전컴파일러빌드 도구cuDNNCUDA
tensorflow_gpu-1.1.02.7, 3.3-3.6xcode의 ClangBazel 0.4.25.18
tensorflow_gpu-1.0.02.7, 3.3-3.6xcode의 ClangBazel 0.4.25.18