Crie um pacote pip do TensorFlow a partir do código-fonte e instale-o no Ubuntu Linux e macOS. Embora as instruções possam funcionar para outros sistemas, elas são testadas e suportadas apenas para Ubuntu e macOS.
Configuração para Linux e macOS
Instale as seguintes ferramentas de construção para configurar seu ambiente de desenvolvimento.
Instale o Python e as dependências do pacote TensorFlow
ubuntu
sudo apt install python3-dev python3-pip
Mac OS
Requer Xcode 9.2 ou posterior.
Instale usando o gerenciador de pacotes Homebrew :
brew install python
Instale as dependências do pacote pip do TensorFlow (se estiver usando um ambiente virtual, omita o argumento --user
):
pip install -U --user pip numpy wheel packaging requests opt_einsum
pip install -U --user keras_preprocessing --no-deps
Instalar o Bazel
Para construir o TensorFlow, você precisará instalar o Bazel. O Bazelisk é uma maneira fácil de instalar o Bazel e baixar automaticamente a versão correta do Bazel para o TensorFlow. Para facilitar o uso, adicione o Bazelisk como executável do bazel
em seu PATH
.
Se o Bazelisk não estiver disponível, você pode instalar o Bazel manualmente. Certifique-se de instalar a versão Bazel correta do arquivo .bazelversion do TensorFlow.
Instale o Clang (recomendado, somente Linux)
Clang é um compilador C/C++/Objective-C que é compilado em C++ baseado em LLVM. É o compilador padrão para criar o TensorFlow a partir do TensorFlow 2.13. A versão atual suportada é LLVM/Clang 16.
Os pacotes noturnos LLVM Debian/Ubuntu fornecem um script de instalação automática e pacotes para instalação manual no Linux. Certifique-se de executar o seguinte comando se adicionar manualmente o repositório llvm apt às fontes do pacote:
sudo apt-get update && sudo apt-get install -y llvm-16 clang-16
Alternativamente, você pode baixar e descompactar os binários Clang+LLVM-16 pré-construídos.
Instalar suporte a GPU (opcional, somente Linux)
Não há suporte de GPU para macOS.
Leia o guia de suporte da GPU para instalar os drivers e o software adicional necessário para executar o TensorFlow em uma GPU.
Baixe o código-fonte do TensorFlow
Use o Git para clonar o repositório do TensorFlow :
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
O repositório é padronizado para a ramificação de desenvolvimento master
. Você também pode verificar uma ramificação de lançamento para construir:
git checkout branch_name # r2.2, r2.3, etc.
Opcional: configurar a compilação
As compilações do TensorFlow são configuradas pelo arquivo .bazelrc
no diretório raiz do repositório. Os scripts ./configure
ou ./configure.py
podem ser usados para ajustar configurações comuns.
Se precisar alterar a configuração, execute o script ./configure
no diretório raiz do repositório. Este script solicitará a localização das dependências do TensorFlow e solicitará opções adicionais de configuração de compilação (sinalizadores do compilador, por exemplo). Consulte a seção Sessão de amostra para obter detalhes.
./configure
Há também uma versão python deste script, ./configure.py
. Se estiver usando um ambiente virtual, python configure.py
prioriza caminhos dentro do ambiente, enquanto ./configure
prioriza caminhos fora do ambiente. Em ambos os casos, você pode alterar o padrão.
Sessão de amostra
Veja a seguir uma amostra de execução do script ./configure
(sua sessão pode ser diferente):
Opções de configuração
suporte GPU
Para suporte a GPU , defina cuda=Y
durante a configuração e especifique as versões de CUDA e cuDNN. Se o seu sistema tiver várias versões de CUDA ou cuDNN instaladas, defina explicitamente a versão em vez de confiar no padrão. ./configure
cria links simbólicos para as bibliotecas CUDA do seu sistema - portanto, se você atualizar os caminhos da biblioteca CUDA, esta etapa de configuração deverá ser executada novamente antes da compilação.
Otimizações
Para sinalizadores 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 um sinalizador de otimização mais específico. Verifique o manual do GCC para exemplos.
Configurações pré-configuradas
Existem algumas configurações de compilação pré-configuradas disponíveis que podem ser adicionadas ao comando bazel build
, por exemplo:
-
--config=dbg
—Compilação com informações de depuração. Consulte CONTRIBUTING.md para obter detalhes. -
--config=mkl
—Suporte para Intel® MKL-DNN . -
--config=monolithic
—Configuração para uma compilação monolítica principalmente estática.
Crie e instale o pacote pip
O pacote pip é construído em duas etapas. Um comando bazel build
cria um programa de "construtor de pacotes". Em seguida, execute o construtor de pacotes para criar o pacote.
Crie o construtor de pacotes
Use bazel build
para criar o construtor de pacotes TensorFlow 2.x com suporte somente para CPU :
bazel build [--config=option] //tensorflow/tools/pip_package:build_pip_package
suporte GPU
Para criar um construtor de pacotes do TensorFlow com suporte a GPU:
bazel build --config=cuda [--config=option] //tensorflow/tools/pip_package:build_pip_package
Opções de compilação do Bazel
Consulte a referência de linha de comando Bazel para opções de compilação .
Construir o TensorFlow a partir da fonte pode usar muita RAM. Se o seu sistema tiver restrição de memória, limite o uso de RAM do Bazel com: --local_ram_resources=2048
.
Os pacotes oficiais do TensorFlow são construídos com uma cadeia de ferramentas Clang que está em conformidade com o padrão de pacote manylinux2014.
Crie o pacote
O comando bazel build
cria um executável chamado build_pip_package
— este é o programa que cria o pacote pip
. Execute o executável conforme mostrado abaixo para criar um pacote .whl
no diretório /tmp/tensorflow_pkg
.
Para compilar a partir de um branch de lançamento:
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
Para construir a partir do mestre, use --nightly_flag
para obter 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 alternar entre essas duas configurações na mesma árvore de origem.
Instale 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
Compilações do Docker Linux
As imagens de desenvolvimento do Docker do TensorFlow são uma maneira fácil de configurar um ambiente para criar pacotes Linux a partir do código-fonte. Essas imagens já contêm o código-fonte e as dependências necessárias para criar o TensorFlow. Acesse o guia TensorFlow Docker para obter instruções de 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 TensorFlow mais recente. Verifique o guia do Docker para obter as tags TensorFlow -devel
disponíveis.
Baixe a imagem de desenvolvimento mais recente e inicie um contêiner do Docker que você usará 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. Ele monta o diretório atual do host no diretório /mnt
do contêiner e passa 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 de 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 TensorFlow no ambiente virtual do contêiner:
- Opcional: Configure a compilação — isso solicita que o usuário responda às perguntas de configuração da compilação.
- Crie a ferramenta usada para criar o pacote pip .
- Execute a ferramenta para criar o pacote pip .
- Ajuste as permissões de propriedade do arquivo para fora do contêiner.
./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
Instale e verifique o pacote dentro do 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 GPU
O Docker é a maneira mais fácil de criar suporte a GPU para o TensorFlow, pois a máquina host requer apenas o driver NVIDIA® (o NVIDIA® CUDA® Toolkit não precisa ser instalado). Consulte o guia de suporte da GPU e o guia TensorFlow Docker para configurar o nvidia-docker (somente Linux).
O exemplo a seguir baixa a imagem TensorFlow :devel-gpu
e usa nvidia-docker
para executar o contêiner habilitado para GPU. Esta imagem de desenvolvimento está configurada para criar um pacote pip com suporte a GPU:
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 TensorFlow com suporte a GPU:
./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
Instale e verifique o pacote dentro do 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 de compilação testadas
Linux
CPU
Versão | versão Python | Compilador | ferramentas de construção |
---|---|---|---|
tensorflow-2.13.0 | 3.8-3.11 | Clang 16.0.0 | Bazel 5.3.0 |
tensorflow-2.12.0 | 3.8-3.11 | GCC 9.3.1 | Bazel 5.3.0 |
tensorflow-2.11.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.3.0 |
tensorflow-2.10.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.1.1 |
tensorflow-2.9.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.0.0 |
tensorflow-2.8.0 | 3.7-3.10 | GCC 7.3.1 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3.7-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3,6-3,8 | GCC 7.3.1 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3,5-3,8 | GCC 7.3.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3,5-3,8 | GCC 7.3.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 |
tensorflow-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.8.0 |
tensorflow-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |
GPU
Versão | versão Python | Compilador | ferramentas de construção | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow-2.13.0 | 3.8-3.11 | Clang 16.0.0 | Bazel 5.3.0 | 8.6 | 11.8 |
tensorflow-2.12.0 | 3.8-3.11 | GCC 9.3.1 | Bazel 5.3.0 | 8.6 | 11.8 |
tensorflow-2.11.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.3.0 | 8.1 | 11.2 |
tensorflow-2.10.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.1.1 | 8.1 | 11.2 |
tensorflow-2.9.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.0.0 | 8.1 | 11.2 |
tensorflow-2.8.0 | 3.7-3.10 | GCC 7.3.1 | Bazel 4.2.1 | 8.1 | 11.2 |
tensorflow-2.7.0 | 3.7-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.6.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.5.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow-2.4.0 | 3,6-3,8 | GCC 7.3.1 | Bazel 3.1.0 | 8,0 | 11,0 |
tensorflow-2.3.0 | 3,5-3,8 | GCC 7.3.1 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow-2.2.0 | 3,5-3,8 | GCC 7.3.1 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | Bazel 0.27.1 | 7.6 | 10.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10,0 |
tensorflow_gpu-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10,0 |
tensorflow_gpu-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.24.1 | 7.4 | 10,0 |
tensorflow_gpu-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.19.2 | 7.4 | 10,0 |
tensorflow_gpu-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
Mac OS
CPU
Versão | versão Python | Compilador | ferramentas de construção |
---|---|---|---|
tensorflow-2.13.0 | 3.8-3.11 | Clang do xcode 10.15 | Bazel 5.3.0 |
tensorflow-2.12.0 | 3.8-3.11 | Clang do xcode 10.15 | Bazel 5.3.0 |
tensorflow-2.11.0 | 3.7-3.10 | Clang do xcode 10.14 | Bazel 5.3.0 |
tensorflow-2.10.0 | 3.7-3.10 | Clang do xcode 10.14 | Bazel 5.1.1 |
tensorflow-2.9.0 | 3.7-3.10 | Clang do xcode 10.14 | Bazel 5.0.0 |
tensorflow-2.8.0 | 3.7-3.10 | Clang do xcode 10.14 | Bazel 4.2.1 |
tensorflow-2.7.0 | 3.7-3.9 | Clang do xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.6.0 | 3.6-3.9 | Clang do xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | Clang do xcode 10.11 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3,6-3,8 | Clang do xcode 10.3 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3,5-3,8 | Clang do xcode 10.1 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3,5-3,8 | Clang do xcode 10.1 | Bazel 2.0.0 |
tensorflow-2.1.0 | 2.7, 3.5-3.7 | Clang do xcode 10.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.5-3.7 | Clang do xcode 10.1 | Bazel 0.27.1 |
tensorflow-2.0.0 | 2.7, 3.3-3.7 | Clang do xcode 10.1 | Bazel 0.26.1 |
tensorflow-1.15.0 | 2.7, 3.3-3.7 | Clang do xcode 10.1 | Bazel 0.26.1 |
tensorflow-1.14.0 | 2.7, 3.3-3.7 | Clang do xcode | Bazel 0.24.1 |
tensorflow-1.13.1 | 2.7, 3.3-3.7 | Clang do xcode | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.10.1 |
tensorflow-1.7.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.10.1 |
tensorflow-1.6.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.8.1 |
tensorflow-1.5.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.8.1 |
tensorflow-1.4.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.2 |
GPU
Versão | versão Python | Compilador | ferramentas de construção | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | Clang do xcode | Bazel 0.4.2 | 5.1 | 8 |