Google I/O is a wrap! Catch up on TensorFlow sessions View sessions

Costruisci dalla fonte

Crea un pacchetto pip TensorFlow dal sorgente e installalo su Ubuntu Linux e macOS. Sebbene le istruzioni possano funzionare per altri sistemi, sono testate e supportate solo per Ubuntu e macOS.

Configurazione per Linux e macOS

Installa i seguenti strumenti di compilazione per configurare il tuo ambiente di sviluppo.

Installa Python e le dipendenze del pacchetto TensorFlow

Ubuntu

sudo apt install python3-dev python3-pip

Mac OS

Richiede Xcode 9.2 o successivo.

Installa usando il gestore di pacchetti 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

Installa le dipendenze del pacchetto pip TensorFlow (se si utilizza un ambiente virtuale, omettere l'argomento --user ):

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

Installa Bazel

Per creare TensorFlow, dovrai installare Bazel. Bazelisk è un modo semplice per installare Bazel e scarica automaticamente la versione Bazel corretta per TensorFlow. Per facilità d'uso, aggiungi Bazelisk come eseguibile bazel nel tuo PATH .

Se Bazelisk non è disponibile, puoi installare manualmente Bazel . Assicurati di installare una versione Bazel supportata: qualsiasi versione compresa tra _TF_MIN_BAZEL_VERSION e _TF_MAX_BAZEL_VERSION come specificato in tensorflow/configure.py .

Installa il supporto GPU (opzionale, solo Linux)

Non c'è supporto GPU per macOS.

Leggi la guida al supporto GPU per installare i driver e il software aggiuntivo necessari per eseguire TensorFlow su una GPU.

Scarica il codice sorgente di TensorFlow

Usa Git per clonare il repository TensorFlow :

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

Per impostazione predefinita, il repository è il ramo di sviluppo master . Puoi anche controllare un ramo di rilascio per creare:

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

Configura la build

Configura la build del tuo sistema eseguendo ./configure nella radice dell'albero dei sorgenti di TensorFlow. Questo script richiede la posizione delle dipendenze TensorFlow e richiede ulteriori opzioni di configurazione della build (flag del compilatore, ad esempio).

./configure

Se si utilizza un ambiente virtuale, python configure.py assegna la priorità ai percorsi all'interno dell'ambiente, mentre ./configure assegna la priorità ai percorsi all'esterno dell'ambiente. In entrambi i casi è possibile modificare l'impostazione predefinita.

Sessione di esempio

Di seguito viene mostrata un'esecuzione di esempio dello script ./configure (la sessione potrebbe differire):

Opzioni di configurazione

Supporto GPU

Per il supporto GPU , imposta cuda=Y durante la configurazione e specifica le versioni di CUDA e cuDNN. Se sul tuo sistema sono installate più versioni di CUDA o cuDNN, imposta esplicitamente la versione invece di fare affidamento sull'impostazione predefinita. ./configure crea collegamenti simbolici alle librerie CUDA del tuo sistema, quindi se aggiorni i percorsi delle librerie CUDA, questo passaggio di configurazione deve essere eseguito nuovamente prima della creazione.

Ottimizzazioni

Per i flag di ottimizzazione della compilazione, il valore predefinito ( -march=native ) ottimizza il codice generato per il tipo di CPU della tua macchina. Tuttavia, se si compila TensorFlow per un tipo di CPU diverso, considerare un flag di ottimizzazione più specifico. Consulta il manuale GCC per esempi.

Configurazioni preconfigurate

Sono disponibili alcune configurazioni di build preconfigurate che possono essere aggiunte al comando bazel build , ad esempio:

  • --config=dbg Compila con informazioni di debug. Vedere CONTRIBUTING.md per i dettagli.
  • --config=mkl —Supporto per Intel® MKL-DNN .
  • --config=monolithic Configurazione per una build prevalentemente statica e monolitica.
  • --config=v1 —Crea TensorFlow 1.x invece di 2.x.

Costruisci il pacchetto pip

TensorFlow 2.x

Installa Bazel e usa bazel build per creare il pacchetto TensorFlow 2.x con supporto solo per CPU :

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

Supporto GPU

Per creare un generatore di pacchetti TensorFlow con supporto GPU:

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

TensorFlow 1.x

Per creare un pacchetto TensorFlow 1.x precedente, utilizzare l'opzione --config=v1 :

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

Opzioni di costruzione di Bazel

Fare riferimento al riferimento della riga di comando di Bazel per le opzioni di compilazione .

La creazione di TensorFlow dall'origine può utilizzare molta RAM. Se il tuo sistema è limitato dalla memoria, limita l'utilizzo della RAM di Bazel con: --local_ram_resources=2048 .

I pacchetti ufficiali di TensorFlow sono costruiti con una toolchain GCC 7.3 conforme allo standard dei pacchetti manylinux2010.

Per GCC 5 e versioni successive, è possibile creare la compatibilità con l'ABI precedente utilizzando: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . La compatibilità ABI garantisce che le operazioni personalizzate costruite sul pacchetto TensorFlow ufficiale continuino a funzionare con il pacchetto GCC 5.

Costruisci il pacchetto

Il comando bazel build crea un eseguibile chiamato build_pip_package è il programma che compila il pacchetto pip . Esegui l'eseguibile come mostrato di seguito per creare un pacchetto .whl nella /tmp/tensorflow_pkg .

Per creare da un ramo di rilascio:

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

Per compilare da master, usa --nightly_flag per ottenere le giuste dipendenze:

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

Sebbene sia possibile creare configurazioni CUDA e non CUDA sotto lo stesso albero di origine, si consiglia di eseguire bazel clean quando si passa da una configurazione all'altra nello stesso albero di origine.

Installa il pacchetto

Il nome del file .whl generato dipende dalla versione di TensorFlow e dalla piattaforma. Usa pip install per installare il pacchetto, ad esempio:

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

Build di Docker Linux

Le immagini di sviluppo Docker di TensorFlow sono un modo semplice per configurare un ambiente per creare pacchetti Linux dal sorgente. Queste immagini contengono già il codice sorgente e le dipendenze necessarie per creare TensorFlow. Vai alla guida di TensorFlow Docker per le istruzioni di installazione e l' elenco dei tag immagine disponibili .

Solo CPU

L'esempio seguente usa l'immagine :devel per creare un pacchetto solo CPU dal codice sorgente TensorFlow più recente. Consulta la guida Docker per i tag TensorFlow -devel disponibili.

Scarica l'ultima immagine di sviluppo e avvia un contenitore Docker che utilizzerai per creare il pacchetto 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

Il precedente comando docker run avvia una shell nella directory /tensorflow_src , la radice dell'albero dei sorgenti. Monta la directory corrente dell'host nella directory /mnt del contenitore e passa le informazioni dell'utente host al contenitore tramite una variabile ambientale (usata per impostare le autorizzazioni: Docker può rendere la cosa complicata).

In alternativa, per creare una copia host di TensorFlow all'interno di un container, montare l'albero di origine host nella directory /tensorflow del container:

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

Con l'albero dei sorgenti impostato, crea il pacchetto TensorFlow all'interno dell'ambiente virtuale del contenitore:

  1. Configura la build: questo richiede all'utente di rispondere alle domande sulla configurazione della build.
  2. Costruisci lo strumento utilizzato per creare il pacchetto pip .
  3. Esegui lo strumento per creare il pacchetto pip .
  4. Regola le autorizzazioni di proprietà del file per l'esterno del contenitore.
./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

Installa e verifica il pacchetto all'interno del contenitore:

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

Sulla macchina host, il pacchetto pip TensorFlow si trova nella directory corrente (con i permessi dell'utente host): ./tensorflow- version - tags .whl

Supporto GPU

Docker è il modo più semplice per creare il supporto GPU per TensorFlow poiché la macchina host richiede solo il driver NVIDIA® (non è necessario installare NVIDIA® CUDA® Toolkit ). Fare riferimento alla guida al supporto della GPU e alla guida di TensorFlow Docker per configurare nvidia-docker (solo Linux).

L'esempio seguente scarica l'immagine TensorFlow :devel-gpu e usa nvidia-docker per eseguire il contenitore abilitato per GPU. Questa immagine di sviluppo è configurata per creare un pacchetto pip con supporto 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

Quindi, all'interno dell'ambiente virtuale del container, crea il pacchetto TensorFlow con supporto GPU:

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

Installa e verifica il pacchetto all'interno del contenitore e verifica la presenza di una 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')))"

Configurazioni di build testate

Linux

processore

Versione Versione Python compilatore Costruisci strumenti
tensorflow-2.9.0 3.7-3.10 CCG 9.3.1 Bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 CCG 7.3.1 Bazel 4.2.1
tensorflow-2.7.0 3.7-3.9 CCG 7.3.1 Bazel 3.7.2
tensorflow-2.6.0 3.6-3.9 CCG 7.3.1 Bazel 3.7.2
tensorflow-2.5.0 3.6-3.9 CCG 7.3.1 Bazel 3.7.2
tensorflow-2.4.0 3.6-3.8 CCG 7.3.1 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 CCG 7.3.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 CCG 7.3.1 Bazel 2.0.0
tensorflow-2.1.0 2.7, 3.5-3.7 CCG 7.3.1 Bazel 0.27.1
tensorflow-2.0.0 2.7, 3.3-3.7 CCG 7.3.1 Bazel 0.26.1
tensorflow-1.15.0 2.7, 3.3-3.7 CCG 7.3.1 Bazel 0.26.1
tensorflow-1.14.0 2.7, 3.3-3.7 CCG 4.8 Bazel 0.24.1
tensorflow-1.13.1 2.7, 3.3-3.7 CCG 4.8 Bazel 0.19.2
tensorflow-1.12.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.11.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.10.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0
tensorflow-1.9.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.11.0
tensorflow-1.8.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0
tensorflow-1.7.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0
tensorflow-1.6.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0
tensorflow-1.5.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.8.0
tensorflow-1.4.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.5.4
tensorflow-1.3.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.5
tensorflow-1.2.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.5
tensorflow-1.1.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.2
tensorflow-1.0.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.2

GPU

Versione Versione Python compilatore Costruisci strumenti cuDNN CUDA
tensorflow-2.9.0 3.7-3.10 CCG 9.3.1 Bazel 5.0.0 8.1 11.2
tensorflow-2.8.0 3.7-3.10 CCG 7.3.1 Bazel 4.2.1 8.1 11.2
tensorflow-2.7.0 3.7-3.9 CCG 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.6.0 3.6-3.9 CCG 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.5.0 3.6-3.9 CCG 7.3.1 Bazel 3.7.2 8.1 11.2
tensorflow-2.4.0 3.6-3.8 CCG 7.3.1 Bazel 3.1.0 8.0 11.0
tensorflow-2.3.0 3.5-3.8 CCG 7.3.1 Bazel 3.1.0 7.6 10.1
tensorflow-2.2.0 3.5-3.8 CCG 7.3.1 Bazel 2.0.0 7.6 10.1
tensorflow-2.1.0 2.7, 3.5-3.7 CCG 7.3.1 Bazel 0.27.1 7.6 10.1
tensorflow-2.0.0 2.7, 3.3-3.7 CCG 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.15.0 2.7, 3.3-3.7 CCG 7.3.1 Bazel 0.26.1 7.4 10.0
tensorflow_gpu-1.14.0 2.7, 3.3-3.7 CCG 4.8 Bazel 0.24.1 7.4 10.0
tensorflow_gpu-1.13.1 2.7, 3.3-3.7 CCG 4.8 Bazel 0.19.2 7.4 10.0
tensorflow_gpu-1.12.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.11.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.10.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.15.0 7 9
tensorflow_gpu-1.9.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.11.0 7 9
tensorflow_gpu-1.8.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.10.0 7 9
tensorflow_gpu-1.7.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.6.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.9.0 7 9
tensorflow_gpu-1.5.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.8.0 7 9
tensorflow_gpu-1.4.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.5.4 6 8
tensorflow_gpu-1.3.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.5 6 8
tensorflow_gpu-1.2.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7, 3.3-3.6 CCG 4.8 Bazel 0.4.2 5.1 8

Mac OS

processore

Versione Versione Python compilatore Costruisci strumenti
tensorflow-2.9.0 3.7-3.10 Clang da xcode 10.14 Bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 Clang da xcode 10.14 Bazel 4.2.1
tensorflow-2.7.0 3.7-3.9 Clang da xcode 10.11 Bazel 3.7.2
tensorflow-2.6.0 3.6-3.9 Clang da xcode 10.11 Bazel 3.7.2
tensorflow-2.5.0 3.6-3.9 Clang da xcode 10.11 Bazel 3.7.2
tensorflow-2.4.0 3.6-3.8 Clang da xcode 10.3 Bazel 3.1.0
tensorflow-2.3.0 3.5-3.8 Clang da xcode 10.1 Bazel 3.1.0
tensorflow-2.2.0 3.5-3.8 Clang da xcode 10.1 Bazel 2.0.0
tensorflow-2.1.0 2.7, 3.5-3.7 Clang da xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2.7, 3.5-3.7 Clang da xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2.7, 3.3-3.7 Clang da xcode 10.1 Bazel 0.26.1
tensorflow-1.15.0 2.7, 3.3-3.7 Clang da xcode 10.1 Bazel 0.26.1
tensorflow-1.14.0 2.7, 3.3-3.7 Clang da xcode Bazel 0.24.1
tensorflow-1.13.1 2.7, 3.3-3.7 Clang da xcode Bazel 0.19.2
tensorflow-1.12.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.15.0
tensorflow-1.11.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.15.0
tensorflow-1.10.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.15.0
tensorflow-1.9.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.11.0
tensorflow-1.8.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.10.1
tensorflow-1.7.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.10.1
tensorflow-1.6.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.8.1
tensorflow-1.5.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.8.1
tensorflow-1.4.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.5.4
tensorflow-1.3.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.5
tensorflow-1.2.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.5
tensorflow-1.1.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.2
tensorflow-1.0.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.2

GPU

Versione Versione Python compilatore Costruisci strumenti cuDNN CUDA
tensorflow_gpu-1.1.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2.7, 3.3-3.6 Clang da xcode Bazel 0.4.2 5.1 8