Watch keynotes, product sessions, workshops, and more from Google I/O See playlist

Aus der Quelle erstellen

Erstellen Sie ein TensorFlow- Pip- Paket aus dem Quellcode und installieren Sie es unter Ubuntu Linux und macOS. Während die Anweisungen möglicherweise für andere Systeme funktionieren, werden sie nur für Ubuntu und macOS getestet und unterstützt.

Setup für Linux und MacOS

Installieren Sie die folgenden Build-Tools, um Ihre Entwicklungsumgebung zu konfigurieren.

Installieren Sie Python und die TensorFlow-Paketabhängigkeiten

Ubuntu

sudo apt install python3-dev python3-pip

Mac OS

Benötigt Xcode 9.2 oder höher.

Installation mit dem Homebrew- Paketmanager:

/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

Installieren Sie die Abhängigkeiten des TensorFlow- Pip- Pakets (wenn Sie eine virtuelle Umgebung verwenden, lassen Sie das Argument --user ):

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

Installieren Sie Bazel

Um TensorFlow zu erstellen, müssen Sie Bazel installieren. Bazelisk ist eine einfache Möglichkeit, Bazel zu installieren, und lädt automatisch die richtige Bazel-Version für TensorFlow herunter. Fügen Sie zur Vereinfachung der Verwendung Bazelisk als ausführbare bazel Datei in Ihren PATH .

Wenn Bazelisk nicht verfügbar ist, können Sie Bazel manuell installieren . _TF_MIN_BAZEL_VERSION Sie sicher, dass Sie eine unterstützte Bazel-Version installieren: eine beliebige Version zwischen _TF_MIN_BAZEL_VERSION und _TF_MAX_BAZEL_VERSION wie in tensorflow/configure.py .

Installieren Sie die GPU-Unterstützung (optional, nur Linux)

Es gibt keine GPU-Unterstützung für macOS.

Lesen Sie das GPU-Support- Handbuch, um die Treiber und die zusätzliche Software zu installieren, die zum Ausführen von TensorFlow auf einer GPU erforderlich sind.

Laden Sie den TensorFlow-Quellcode herunter

Verwenden Sie Git , um das TensorFlow-Repository zu klonen:

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

Das Repo ist standardmäßig der master Entwicklungszweig. Sie können auch einen zu erstellenden Release-Zweig auschecken:

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

Konfigurieren Sie den Build

Konfigurieren Sie Ihren Systembuild, indem Sie ./configure im Stammverzeichnis Ihres TensorFlow- ./configure . Dieses Skript fordert Sie auf, den Speicherort der TensorFlow-Abhängigkeiten anzugeben, und fragt nach zusätzlichen Build-Konfigurationsoptionen (z. B. Compiler-Flags).

./configure

Wenn Sie eine virtuelle Umgebung verwenden, priorisiert python configure.py Pfade innerhalb der Umgebung, während ./configure Pfade außerhalb der Umgebung priorisiert. In beiden Fällen können Sie die Standardeinstellung ändern.

Beispielsitzung

Das Folgende zeigt einen Beispiellauf des Skripts ./configure (Ihre Sitzung kann abweichen):

Einstellmöglichkeiten

GPU-Unterstützung

Setzen cuda=Y für die GPU-Unterstützung während der Konfiguration cuda=Y und geben Sie die Versionen von CUDA und cuDNN an. Wenn auf Ihrem System mehrere Versionen von CUDA oder cuDNN installiert sind, legen Sie die Version explizit fest, anstatt sich auf die Standardeinstellung zu verlassen. ./configure erstellt symbolische Links zu den CUDA-Bibliotheken Ihres Systems. Wenn Sie also Ihre CUDA-Bibliothekspfade aktualisieren, muss dieser Konfigurationsschritt vor dem ./configure erneut ausgeführt werden.

Optimierungen

Für Kompilierungsoptimierungsflags optimiert der Standardwert ( -march=native ) den generierten Code für den CPU-Typ Ihres Computers. Wenn Sie jedoch TensorFlow für einen anderen CPU-Typ erstellen, sollten Sie ein spezifischeres Optimierungsflag berücksichtigen. Beispiele finden Sie im GCC-Handbuch .

Vorkonfigurierte Konfigurationen

Es sind einige vorkonfigurierte Build-Konfigurationen verfügbar, die dem Befehl bazel build hinzugefügt werden können, zum Beispiel:

  • --config=mkl Unterstützung für Intel® MKL-DNN .
  • --config=monolithic Konfiguration für einen meist statischen, monolithischen Build.
  • --config=v1 Erstellen Sie TensorFlow 1.x anstelle von 2.x.

Erstellen Sie das Pip-Paket

TensorFlow 2.x.

Installieren Sie Bazel und verwenden Sie bazel build , um das TensorFlow 2.x-Paket mit bazel build CPU- Unterstützung zu erstellen:

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

GPU-Unterstützung

So erstellen Sie einen TensorFlow-Paketersteller mit GPU-Unterstützung:

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

TensorFlow 1.x.

Verwenden Sie die Option --config=v1 um ein älteres TensorFlow 1.x-Paket zu --config=v1 :

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

Bazel Build-Optionen

Informationen zur Erstellung finden Sie in der Bazel- Befehlszeilenreferenz .

Das Erstellen von TensorFlow aus dem Quellcode kann viel RAM verbrauchen. Wenn Ihr System über wenig Speicher verfügt, begrenzen Sie die RAM-Nutzung von Bazel mit: --local_ram_resources=2048 .

Die offiziellen TensorFlow-Pakete basieren auf einer GCC 7.3-Toolchain, die dem Manylinux2010-Paketstandard entspricht.

Für GCC 5 und höher kann die Kompatibilität mit dem älteren ABI erstellt werden mit: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . Die ABI-Kompatibilität stellt sicher, dass benutzerdefinierte Operationen, die für das offizielle TensorFlow-Paket erstellt wurden, weiterhin mit dem von GCC 5 erstellten Paket funktionieren.

Erstellen Sie das Paket

Der Befehl bazel build erstellt eine ausführbare Datei mit dem Namen build_pip_package ist das Programm, mit dem das pip Paket erstellt wird. Führen Sie die ausführbare Datei wie unten gezeigt aus, um ein .whl Paket im Verzeichnis /tmp/tensorflow_pkg .

So erstellen Sie aus einem Release-Zweig:

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

Verwenden --nightly_flag zum Erstellen aus dem Master --nightly_flag , um die richtigen Abhängigkeiten zu erhalten:

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

Obwohl es möglich ist, sowohl CUDA- als auch Nicht-CUDA-Konfigurationen unter demselben bazel clean zu bazel clean , wird empfohlen, bazel clean wenn Sie zwischen diesen beiden Konfigurationen im selben bazel clean wechseln.

Installieren Sie das Paket

Der Dateiname der generierten .whl Datei hängt von der TensorFlow-Version und Ihrer Plattform ab. Verwenden Sie pip install , um das Paket zu installieren, zum Beispiel:

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

Docker Linux baut

Die Docker-Entwicklungsimages von TensorFlow sind eine einfache Möglichkeit, eine Umgebung zum Erstellen von Linux-Paketen aus dem Quellcode einzurichten. Diese Bilder enthalten bereits den Quellcode und die Abhängigkeiten, die zum Erstellen von TensorFlow erforderlich sind. Informationen zur Installation und zur Liste der verfügbaren Image-Tags finden Sie im TensorFlow Docker-Handbuch .

Nur CPU

Im folgenden Beispiel wird das :devel Image verwendet, um ein Nur-CPU-Paket aus dem neuesten TensorFlow-Quellcode zu erstellen. -devel zu verfügbaren TensorFlow-Tags finden Sie im Docker-Handbuch .

Laden Sie das neueste Entwicklungsimage herunter und starten Sie einen Docker-Container, mit dem wir das Pip- Paket erstellen:

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

Der obige docker run Befehl docker run startet eine Shell im Verzeichnis /tensorflow_src - dem Stammverzeichnis des /tensorflow_src . Es stellt das aktuelle Verzeichnis des Hosts im Verzeichnis /mnt des Containers bereit und übergibt die Informationen des Hostbenutzers über eine Umgebungsvariable an den Container (zum Festlegen von Berechtigungen - Docker kann dies schwierig machen).

Um alternativ eine /tensorflow von TensorFlow in einem Container zu /tensorflow den Host- /tensorflow Verzeichnis /tensorflow des Containers ein:

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

Erstellen Sie mit dem eingerichteten Quellbaum das TensorFlow-Paket in der virtuellen Umgebung des Containers:

  1. Build konfigurieren - Dies fordert den Benutzer auf, Fragen zur Build-Konfiguration zu beantworten.
  2. Erstellen Sie das Tool zum Erstellen des Pip- Pakets.
  3. Führen Sie das Tool aus, um das Pip- Paket zu erstellen.
  4. Passen Sie die Eigentumsrechte der Datei außerhalb des Containers an.
./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

Installieren und überprüfen Sie das Paket im Container:

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

Auf Ihrem Host-Computer befindet sich das TensorFlow- Pip- Paket im aktuellen Verzeichnis (mit ./tensorflow- version - tags .whl ): ./tensorflow- version - tags .whl

GPU-Unterstützung

Docker ist der einfachste Weg für TensorFlow zu bauen GPU - Unterstützung , da die Host - Maschine erfordert nur den NVIDIA® Treiber (der NVIDIA® CUDA® Toolkit muss nicht installiert werden). Informationen zum Einrichten von nvidia-docker (nur Linux) finden Sie im GPU-Support-Handbuch und im TensorFlow Docker-Handbuch .

Im folgenden Beispiel wird das TensorFlow :devel-gpu Image heruntergeladen und der GPU-fähige Container mit nvidia-docker :devel-gpu . Dieses Entwicklungsimage ist so konfiguriert, dass ein Pip- Paket mit GPU-Unterstützung erstellt wird:

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

Erstellen Sie dann in der virtuellen Umgebung des Containers das TensorFlow-Paket mit GPU-Unterstützung:

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

Installieren und überprüfen Sie das Paket im Container und suchen Sie nach einer 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')))"

Getestete Build-Konfigurationen

Linux

Zentralprozessor

Ausführung Python-Version Compiler Tools erstellen
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

Ausführung Python-Version Compiler Tools erstellen cuDNN CUDA
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

Zentralprozessor

Ausführung Python-Version Compiler Tools erstellen
Tensorflow-2.5.0 3.6-3.9 Clang von xcode 10.11 Bazel 3.7.2
Tensorflow-2.4.0 3.6-3.8 Clang von xcode 10.3 Bazel 3.1.0
Tensorflow-2.3.0 3.5-3.8 Clang von xcode 10.1 Bazel 3.1.0
Tensorflow-2.2.0 3.5-3.8 Clang von xcode 10.1 Bazel 2.0.0
Tensorflow-2.1.0 2,7, 3,5-3,7 Klirren von xcode 10.1 Bazel 0.27.1
Tensorflow-2.0.0 2,7, 3,5-3,7 Clang von xcode 10.1 Bazel 0.27.1
Tensorflow-2.0.0 2,7, 3,3-3,7 Clang von xcode 10.1 Bazel 0.26.1
Tensorflow-1.15.0 2,7, 3,3-3,7 Clang von xcode 10.1 Bazel 0.26.1
Tensorflow-1.14.0 2,7, 3,3-3,7 Klingeln von xcode Bazel 0.24.1
Tensorflow-1.13.1 2,7, 3,3-3,7 Klingeln von xcode Bazel 0.19.2
Tensorflow-1.12.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.15.0
Tensorflow-1.11.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.15.0
Tensorflow-1.10.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.15.0
Tensorflow-1.9.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.11.0
Tensorflow-1.8.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.10.1
Tensorflow-1.7.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.10.1
Tensorflow-1.6.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.8.1
Tensorflow-1.5.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.8.1
Tensorflow-1.4.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.5.4
Tensorflow-1.3.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.5
Tensorflow-1.2.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.5
Tensorflow-1.1.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.2
Tensorflow-1.0.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.2

GPU

Ausführung Python-Version Compiler Tools erstellen cuDNN CUDA
tensorflow_gpu-1.1.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2,7, 3,3-3,6 Klingeln von xcode Bazel 0.4.2 5.1 8