Criar da origem

Crie um pacote PIP do TensorFlow a partir da origem e instale-o no Ubuntu Linux e macOS. Embora as instruções funcionem para outros sistemas, ele só é testado e compatível com o Ubuntu e o macOS.

Configuração para Linux e macOS

Instale as ferramentas de compilação a seguir para configurar o ambiente para desenvolvedores.

Instalar o Python e as dependências de pacote do TensorFlow

Ubuntu

sudo apt install python3-dev python3-pip

macOS

Requer Xcode 9.2 ou mais recente.

Instale usando o gerenciador de pacotes 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

Instale o pacote de dependências PIP do TensorFlow (se estiver usando um ambiente virtual, omita o argumento --user):

pip install -U --user pip numpy wheel
pip install -U --user keras_preprocessing --no-deps

Instalar o Bazel

Para criar o TensorFlow, você precisará instalar o Bazel. O Bazelisk é uma maneira fácil de instalar o Bazel e fazer o download automático da versão correta do TensorFlow. Para facilitar o uso, adicione o Bazelisk como o executável bazel no seu PATH.

Se o Bazelisk não estiver disponível, você poderá instalar o Bazel manualmente. Certifique-se de instalar uma versão do Bazel compatível: qualquer versão entre _TF_MIN_BAZEL_VERSION e _TF_MAX_BAZEL_VERSION, conforme especificado em tensorflow/configure.py.

Instalar o suporte a GPUs (opcional, somente Linux)

Não há suporte a GPUs no macOS.

Leia o guia de suporte a GPUs para instalar os drivers e o software adicional necessário para executar o TensorFlow em uma GPU.

Fazer o download do código-fonte do TensorFlow

Use Git para clonar o repositório do TensorFlow:

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

O repositório tem como padrão a ramificação de desenvolvimento master. Você também pode conferir uma ramificação de lançamento para criar:

git checkout branch_name  # r2.2, r2.3, etc.

Configurar o build

Configure o build do sistema executando o ./configure na raiz da árvore de origem do TensorFlow. Esse script solicita o local das dependências do TensorFlow e também pede opções de configuração da compilação adicionais (sinalizações do compilador, por exemplo).

./configure

Se estiver usando um ambiente virtual, python configure.py prioriza caminhos dentro desse ambiente, enquanto ./configure prioriza caminhos fora dele. Nos dois casos, é possível modificar o padrão.

Sessão de exemplo

Veja a seguir um exemplo do script ./configure (sua sessão pode ser diferente):

Opções de configuração

Suporte a GPUs

Para suporte a GPUs, defina cuda=Y durante a configuração e especifique as versões da CUDA e da cuDNN. Se o sistema tiver várias versões da CUDA ou da cuDNN instaladas, defina explicitamente a versão em vez de confiar no padrão. ./configure cria links simbólicos para as bibliotecas CUDA do sistema. Portanto, se você atualizar os caminhos da biblioteca CUDA, essa etapa de configuração precisará ser executada novamente antes da criação.

Otimizações

Para sinalizações de otimização de compilação, o padrão (-march=native) otimiza o código gerado para o tipo de CPU da sua máquina. No entanto, se estiver criando o TensorFlow para um tipo de CPU diferente, considere uma sinalização de otimização mais específica. Veja exemplos no manual do GCC.

Configurações predefinidas

Há algumas configurações de compilação predefinidas disponíveis que podem ser adicionadas ao comando bazel build, por exemplo:

  • --config=dbg: crie com informações de depuração. Veja CONTRIBUTING.md para saber mais detalhes.
  • --config=mkl: é compatível com Intel® MKL-DNN.
  • --config=monolithic: é uma configuração para um build predominantemente estático e monolítico.
  • --config=v1: crie o TensorFlow 1.x em vez do 2.x.

Criar o pacote PIP

TensorFlow 2.x

Instale o Bazel e use bazel build para criar o pacote do TensorFlow 2.x compatível somente com CPU:

bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package

Suporte a GPUs

Para criar um builder de pacote do TensorFlow com suporte para GPU:

bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package

TensorFlow 1.x

Para criar um pacote do TensorFlow 1.x mais antigo, use a opção --config=v1:

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

Opções de criação do Bazel

Veja a referência de linha de comando do Bazel para opções de build.

Criar o TensorFlow a partir da fonte pode usar muita memória RAM. Se o sistema tem restrições de memória, limite o uso de RAM do Bazel com: --local_ram_resources=2048.

Os pacotes oficiais do TensorFlow são criados com um conjunto de ferramentas GCC 7.3 que está em conformidade com o pacote padrão manylinux2010.

Para o GCC 5 e versões mais recentes, a compatibilidade com a ABI mais antiga pode ser criada usando: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0". A compatibilidade com ABI garante que operações personalizadas criadas com o pacote oficial do TensorFlow continuem funcionando com o pacote de criação do GCC 5.

Criar o pacote

O comando bazel build cria um executável chamado build_pip_package. Esse é o programa que cria o pacote pip. Execute-o, conforme mostrado abaixo, para criar um pacote .whl no diretório /tmp/tensorflow_pkg.

Para criar a partir de uma ramificação de lançamento:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Para criar a partir do mestre, use --nightly_flag para receber as dependências corretas:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package --nightly_flag /tmp/tensorflow_pkg

Embora seja possível criar configurações CUDA e não CUDA na mesma árvore de origem, é recomendável executar bazel clean ao fazer isso.

Instalar o pacote

O nome do arquivo .whl gerado depende da versão do TensorFlow e da sua plataforma. Use pip install para instalar o pacote, por exemplo:

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

Versões do Docker para Linux

As imagens de desenvolvimento do Docker do TensorFlow são uma maneira fácil de configurar um ambiente para criar pacotes do Linux a partir da fonte. Essas imagens já contêm o código-fonte e as dependências necessárias para criar o TensorFlow. Consulte o guia do Docker do TensorFlow para ver a instalação e a lista de tags de imagem disponíveis.

Somente CPU

O exemplo a seguir usa a imagem :devel para criar um pacote somente para CPU a partir do código-fonte mais recente do TensorFlow. Consulte o guia do Docker para ver as tags -devel do TensorFlow disponíveis.

Faça o download da imagem de desenvolvimento mais recente e inicie um contêiner do Docker que usaremos para criar o pacote PIP:

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

O comando docker run acima inicia um shell no diretório /tensorflow_src: a raiz da árvore de origem. Esse comando monta o diretório atual do host no diretório /mnt do contêiner e transmite as informações do usuário do host para o contêiner por uma variável de ambiente usada para definir permissões (o Docker pode tornar isso complicado).

Como alternativa, para criar uma cópia do host do TensorFlow em um contêiner, monte a árvore de origem do host no diretório /tensorflow do contêiner:

docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:devel bash

Com a árvore de origem configurada, crie o pacote do TensorFlow no ambiente virtual do contêiner:

  1. Configure o build. Para isso o usuário precisa responder às perguntas de configuração da compilação.
  2. Crie a ferramenta usada para criar o pacote PIP.
  3. Execute a ferramenta para criar o pacote PIP.
  4. Ajuste as permissões de propriedade do arquivo para fora do contêiner.
./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

Instale e verifique o pacote no contêiner:

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__)"

Na máquina host, o pacote PIP do TensorFlow está no diretório atual (com permissões de usuário do host): ./tensorflow-version-tags.whl

Suporte a GPUs

O Docker é a maneira mais fácil de criar suporte a GPUs para o TensorFlow, já que a máquina host requer apenas o driver NVIDIA®. O NVIDIA® CUDA® Toolkit não precisa ser instalado. Consulte o guia de suporte a GPUs e o guia do Docker do TensorFlow para configurar o nvidia-docker (somente Linux).

O exemplo a seguir faz o download da imagem :devel-gpu do TensorFlow e usa nvidia-docker para executar o contêiner ativado para GPU. Esta imagem de desenvolvimento está configurada para criar um pacote PIP com suporte a GPUs:

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

Em seguida, no ambiente virtual do contêiner, crie o pacote do TensorFlow com suporte a GPUs:

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

Instale e verifique o pacote no contêiner e verifique se há uma 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')))"

Configurações do build testadas

Linux

CPU

VersãoVersão do PythonCompiladorFerramentas de criação
tensorflow-2.6.03.6-3.9GCC 7.3.1Bazel 3.7.2
tensorflow-2.5.03.6-3.9GCC 7.3.1Bazel 3.7.2
tensorflow-2.4.03.6-3.8GCC 7.3.1Bazel 3.1.0
tensorflow-2.3.03.5-3.8GCC 7.3.1Bazel 3.1.0
tensorflow-2.2.03.5-3.8GCC 7.3.1Bazel 2.0.0
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.15.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

VersãoVersão do PythonCompiladorFerramentas de criaçãocuDNNCUDA
tensorflow-2.6.03.6-3.9GCC 7.3.1Bazel 3.7.28.111.2
tensorflow-2.5.03.6-3.9GCC 7.3.1Bazel 3.7.28.111.2
tensorflow-2.4.03.6-3.8GCC 7.3.1Bazel 3.1.08.011.0
tensorflow-2.3.03.5-3.8GCC 7.3.1Bazel 3.1.07.610.1
tensorflow-2.2.03.5-3.8GCC 7.3.1Bazel 2.0.07.610.1
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.15.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

VersãoVersão do PythonCompiladorFerramentas de criação
tensorflow-2.6.03.6-3.9Clang do xcode 10.11Bazel 3.7.2
tensorflow-2.5.03.6-3.9Clang do xcode 10.11Bazel 3.7.2
tensorflow-2.4.03.6-3.8Clang do xcode 10.3Bazel 3.1.0
tensorflow-2.3.03.5-3.8Clang do xcode 10.1Bazel 3.1.0
tensorflow-2.2.03.5-3.8Clang do xcode 10.1Bazel 2.0.0
tensorflow-2.1.02.7, 3.5-3.7Clang do xcode 10.1Bazel 0.27.1
tensorflow-2.0.02.7, 3.5-3.7Clang do xcode 10.1Bazel 0.27.1
tensorflow-2.0.02.7, 3.3-3.7Clang do xcode 10.1Bazel 0.26.1
tensorflow-1.15.02.7, 3.3-3.7Clang do xcode 10.1Bazel 0.26.1
tensorflow-1.14.02.7, 3.3-3.7Clang do xcodeBazel 0.24.1
tensorflow-1.13.12.7, 3.3-3.7Clang do xcodeBazel 0.19.2
tensorflow-1.12.02.7, 3.3-3.6Clang do xcodeBazel 0.15.0
tensorflow-1.11.02.7, 3.3-3.6Clang do xcodeBazel 0.15.0
tensorflow-1.10.02.7, 3.3-3.6Clang do xcodeBazel 0.15.0
tensorflow-1.9.02.7, 3.3-3.6Clang do xcodeBazel 0.11.0
tensorflow-1.8.02.7, 3.3-3.6Clang do xcodeBazel 0.10.1
tensorflow-1.7.02.7, 3.3-3.6Clang do xcodeBazel 0.10.1
tensorflow-1.6.02.7, 3.3-3.6Clang do xcodeBazel 0.8.1
tensorflow-1.5.02.7, 3.3-3.6Clang do xcodeBazel 0.8.1
tensorflow-1.4.02.7, 3.3-3.6Clang do xcodeBazel 0.5.4
tensorflow-1.3.02.7, 3.3-3.6Clang do xcodeBazel 0.4.5
tensorflow-1.2.02.7, 3.3-3.6Clang do xcodeBazel 0.4.5
tensorflow-1.1.02.7, 3.3-3.6Clang do xcodeBazel 0.4.2
tensorflow-1.0.02.7, 3.3-3.6Clang do xcodeBazel 0.4.2

GPU

VersãoVersão do PythonCompiladorFerramentas de criaçãocuDNNCUDA
tensorflow_gpu-1.1.02.7, 3.3-3.6Clang do xcodeBazel 0.4.25.18
tensorflow_gpu-1.0.02.7, 3.3-3.6Clang do xcodeBazel 0.4.25.18