Google I/O를 시청해 주셔서 감사합니다. 모든 세션을 주문형으로 시청하세요.주문형 동영상 보기

소스에서 빌드

소스에서 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 버전을 자동으로 다운로드합니다. 사용 편의성을 위해 PATHbazel 실행 파일로 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 빌드 옵션

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

  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.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