O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

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 python-dev python-pip  # or 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/bin:/usr/local/sbin:$PATH"
brew install python@2  # or python (Python 3)

Instale o pacote de dependências PIP do TensorFlow (se estiver usando um ambiente virtual, omita o argumento --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

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  # r1.9, r1.10, 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 solicita opções de configuração da compilação adicionais (sinalizações do compilador, por exemplo).

./configure

Sessão de exemplo

O script ./configure a seguir mostra um exemplo de execução de ./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 do CUDA e do cuDNN. Se o sistema tiver várias versões do CUDA ou do 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 pré-configuradas

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

  • --config=mkl: suporte para o Intel® MXL-DNN.
  • --config=monolithic: 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

O repositório tensorflow:master foi atualizado para criar 2.x por padrão. Instale o Bazel e use bazel build para criar o pacote do TensorFlow.

bazel build //tensorflow/tools/pip_package:build_pip_package

TensorFlow 1.x

Para criar a versão 1.x do TensorFlow a partir do mestre, use bazel build --config=v1 para criar um pacote do TensorFlow 1.x.

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

Somente CPU

Use bazel para criar o construtor de pacotes TensorFlow com suporte apenas para CPU:

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

Suporte a GPUs

Para criar o construtor de pacotes TensorFlow com suporte a GPUs:

bazel build --config=opt --config=cuda //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 Python 2 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 meio de 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 a versão. Isso solicita que o usuário responda à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-py3 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 do Python 3 com suporte a GPUs:

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

Em seguida, no ambiente virtual do contêiner, crie o pacote 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(tf.contrib.eager.num_gpus())"

Configurações da compilação testadas

Linux

CPU

VersãoVersão do PythonCompiladorFerramentas de criação
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

VersãoVersão do PythonCompiladorFerramentas de criaçãocuDNNCUDA
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

VersãoVersão do PythonCompiladorFerramentas de criação
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.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