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

Zbuduj ze źródła

Zbuduj pakiet pip TensorFlow ze źródła i zainstaluj go na Ubuntu Linux i macOS. Chociaż instrukcje mogą działać w innych systemach, są testowane i obsługiwane tylko w systemach Ubuntu i macOS.

Konfiguracja dla systemu Linux i macOS

Zainstaluj następujące narzędzia do kompilacji, aby skonfigurować środowisko programistyczne.

Zainstaluj Pythona i zależności pakietów TensorFlow

Ubuntu

sudo apt install python3-dev python3-pip

System operacyjny Mac

Wymaga Xcode 9.2 lub nowszego.

Zainstaluj za pomocą menedżera pakietów 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

Zainstaluj zależności pakietu TensorFlow pip (jeśli używasz środowiska wirtualnego, pomiń argument --user ):

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

Zainstaluj Bazel

Aby zbudować TensorFlow, musisz zainstalować Bazel. Bazelisk to prosty sposób na zainstalowanie Bazela i automatyczne pobieranie prawidłowej wersji Bazela dla TensorFlow. Aby ułatwić korzystanie, dodaj Bazelisk jako wykonywalny plik bazel w PATH .

Jeśli Bazelisk nie jest dostępny, możesz ręcznie zainstalować Bazel . Upewnij się, że zainstalowałeś obsługiwaną wersję Bazela: dowolną wersję między _TF_MIN_BAZEL_VERSION i _TF_MAX_BAZEL_VERSION , jak określono w tensorflow/configure.py .

Zainstaluj obsługę GPU (opcjonalnie, tylko Linux)

Nie ma obsługi GPU dla systemu macOS.

Przeczytaj przewodnik obsługi GPU , aby zainstalować sterowniki i dodatkowe oprogramowanie wymagane do uruchomienia TensorFlow na GPU.

Pobierz kod źródłowy TensorFlow

Użyj Git , aby sklonować repozytorium TensorFlow :

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

Repo domyślnie to master gałąź programistyczna. Możesz również pobrać gałąź wydania, aby zbudować:

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

Skonfiguruj kompilację

Skonfiguruj kompilację systemu, uruchamiając ./configure w katalogu głównym drzewa źródłowego TensorFlow. Ten skrypt monituje o lokalizację zależności TensorFlow i prosi o dodatkowe opcje konfiguracji kompilacji (na przykład flagi kompilatora).

./configure

Jeśli używasz środowiska wirtualnego, python configure.py priorytet ścieżkom w środowisku, podczas gdy ./configure priorytet ścieżkom poza środowiskiem. W obu przypadkach możesz zmienić ustawienie domyślne.

Przykładowa sesja

Poniżej przedstawiono przykładowe uruchomienie skryptu ./configure (Twoja sesja może się różnić):

Opcje konfiguracji

Obsługa GPU

Aby uzyskać obsługę GPU , ustaw cuda=Y podczas konfiguracji i określ wersje CUDA i cuDNN. Jeśli w systemie jest zainstalowanych wiele wersji CUDA lub cuDNN, jawnie ustaw wersję zamiast polegać na domyślnej. ./configure tworzy dowiązania symboliczne do bibliotek CUDA twojego systemu — więc jeśli zaktualizujesz ścieżki bibliotek CUDA, ten krok konfiguracji musi zostać uruchomiony ponownie przed budowaniem.

Optymalizacje

W przypadku flag optymalizacji kompilacji ustawienie domyślne ( -march=native ) optymalizuje wygenerowany kod pod kątem typu procesora komputera. Jeśli jednak budujesz TensorFlow dla innego typu procesora, rozważ bardziej konkretną flagę optymalizacji. Sprawdź w podręczniku GCC przykłady.

Wstępnie skonfigurowane konfiguracje

Dostępnych jest kilka wstępnie skonfigurowanych konfiguracji budowania, które można dodać do polecenia bazel build , na przykład:

  • --config=dbg Kompiluj z informacjami debugowania. Zobacz CONTRIBUTING.md , aby uzyskać szczegółowe informacje.
  • --config=mkl — Obsługa Intel® MKL-DNN .
  • --config=monolithic — Konfiguracja dla w większości statycznej, monolitycznej kompilacji.
  • --config=v1 — Zbuduj TensorFlow 1.x zamiast 2.x.

Zbuduj pakiet pip

TensorFlow 2.x

Zainstaluj Bazel i użyj bazel build , aby utworzyć pakiet TensorFlow 2.x z obsługą tylko procesora :

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

Obsługa GPU

Aby zbudować konstruktora pakietów TensorFlow z obsługą GPU:

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

TensorFlow 1.x

Aby zbudować starszy pakiet TensorFlow 1.x, użyj opcji --config=v1 :

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

Opcje budowania Bazela

Zapoznaj się z dokumentacją wiersza polecenia Bazel, aby zapoznać się z opcjami kompilacji .

Budowanie TensorFlow ze źródeł może zużywać dużo pamięci RAM. Jeśli twój system jest ograniczony pamięcią, ogranicz użycie pamięci RAM przez Bazel za pomocą: --local_ram_resources=2048 .

Oficjalne pakiety TensorFlow są zbudowane przy użyciu łańcucha narzędzi GCC 7.3, który jest zgodny ze standardem pakietów manylinux2010.

W przypadku GCC 5 i nowszych, kompatybilność ze starszym ABI można zbudować za pomocą: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . Kompatybilność z ABI zapewnia, że ​​niestandardowe operacje zbudowane na podstawie oficjalnego pakietu TensorFlow będą nadal działać z pakietem zbudowanym w GCC 5.

Zbuduj pakiet

Polecenie bazel build tworzy plik wykonywalny o nazwie build_pip_package — jest to program, który buduje pakiet pip . Uruchom plik wykonywalny, jak pokazano poniżej, aby zbudować pakiet .whl w katalogu /tmp/tensorflow_pkg .

Aby zbudować z gałęzi wydania:

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

Aby zbudować z wzorca, użyj --nightly_flag , aby uzyskać odpowiednie zależności:

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

Chociaż możliwe jest zbudowanie zarówno konfiguracji CUDA, jak i innych niż CUDA w tym samym drzewie źródłowym, zaleca się uruchomienie bazel clean podczas przełączania między tymi dwiema konfiguracjami w tym samym drzewie źródłowym.

Zainstaluj pakiet

Nazwa wygenerowanego pliku .whl zależy od wersji TensorFlow i platformy. Użyj pip install , aby zainstalować pakiet, na przykład:

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

Kompilacje Docker Linux

Obrazy programistyczne Docker firmy TensorFlow to łatwy sposób na skonfigurowanie środowiska do budowania pakietów Linux ze źródeł. Te obrazy zawierają już kod źródłowy i zależności wymagane do zbudowania TensorFlow. Przejdź do przewodnika po TensorFlow Docker, aby uzyskać instrukcje instalacji i listę dostępnych tagów obrazu .

Tylko procesor

Poniższy przykład używa obrazu :devel do zbudowania pakietu tylko dla procesora z najnowszego kodu źródłowego TensorFlow. Sprawdź w przewodniku Dockera dostępne znaczniki TensorFlow -devel .

Pobierz najnowszy obraz rozwojowy i uruchom kontener Docker, którego użyjesz do zbudowania pakietu 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

Powyższe polecenie docker docker run uruchamia powłokę w katalogu /tensorflow_src — katalogu głównym drzewa źródłowego. Montuje bieżący katalog hosta w katalogu /mnt kontenera i przekazuje informacje o użytkowniku hosta do kontenera za pomocą zmiennej środowiskowej (używanej do ustawiania uprawnień — Docker może to utrudnić).

Alternatywnie, aby zbudować kopię hosta TensorFlow w kontenerze, zamontuj drzewo źródłowe hosta w katalogu /tensorflow kontenera:

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

Po skonfigurowaniu drzewa źródłowego zbuduj pakiet TensorFlow w środowisku wirtualnym kontenera:

  1. Skonfiguruj kompilację — powoduje to monitowanie użytkownika o udzielenie odpowiedzi na pytania dotyczące konfiguracji kompilacji.
  2. Zbuduj narzędzie używane do tworzenia pakietu pip .
  3. Uruchom narzędzie, aby utworzyć pakiet pip .
  4. Dostosuj uprawnienia własności do pliku poza kontenerem.
./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

Zainstaluj i zweryfikuj pakiet w kontenerze:

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 komputerze hosta pakiet TensorFlow pip znajduje się w bieżącym katalogu (z uprawnieniami użytkownika hosta): ./tensorflow- version - tags .whl

Obsługa GPU

Docker to najprostszy sposób na zbudowanie obsługi GPU dla TensorFlow, ponieważ maszyna hosta wymaga tylko sterownika NVIDIA® (nie trzeba instalować zestawu narzędzi NVIDIA® CUDA® ). Zapoznaj się z przewodnikiem obsługi GPU i przewodnikiem TensorFlow Docker, aby skonfigurować nvidia-docker (tylko Linux).

Poniższy przykład pobiera obraz TensorFlow :devel-gpu i używa nvidia-docker do uruchomienia kontenera z obsługą GPU. Ten obraz programistyczny jest skonfigurowany do budowania pakietu pip z obsługą 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

Następnie w środowisku wirtualnym kontenera zbuduj pakiet TensorFlow z obsługą 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

Zainstaluj i zweryfikuj pakiet w kontenerze i sprawdź 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')))"

Testowane konfiguracje kompilacji

Linux

procesor

Wersja Wersja Pythona Kompilator Narzędzia do budowania
przepływ tensorowy-2.9.0 3,7-3,10 GCC 9.3.1 Bazel 5.0.0
przepływ tensorowy-2,8.0 3,7-3,10 GCC 7.3.1 Bazylea 4.2.1
przepływ tensorowy-2.7.0 3,7-3,9 GCC 7.3.1 Bazylea 3.7.2
przepływ tensorowy-2,6,0 3,6-3,9 GCC 7.3.1 Bazylea 3.7.2
przepływ tensorowy-2,5,0 3,6-3,9 GCC 7.3.1 Bazylea 3.7.2
przepływ tensorowy-2.4.0 3,6-3,8 GCC 7.3.1 Bazel 3.1.0
przepływ tensorowy-2.3.0 3,5-3,8 GCC 7.3.1 Bazel 3.1.0
przepływ tensorowy-2.2.0 3,5-3,8 GCC 7.3.1 Bazel 2.0.0
przepływ tensorowy-2.1.0 2,7, 3,5-3,7 GCC 7.3.1 Bazylego 0.27.1
przepływ tensorowy-2.0.0 2,7, 3,3-3,7 GCC 7.3.1 Bazylego 0,26,1
przepływ tensorowy-1.15.0 2,7, 3,3-3,7 GCC 7.3.1 Bazylego 0,26,1
przepływ tensorowy-1.14.0 2,7, 3,3-3,7 GCC 4,8 Bazylego 0.24.1
przepływ tensorowy-1.13.1 2,7, 3,3-3,7 GCC 4,8 Bazylego 0.19.2
przepływ tensorowy-1.12.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.15.0
przepływ tensorowy-1.11.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.15.0
przepływ tensorowy-1.10.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.15.0
przepływ tensorowy-1.9.0 2,7, 3,3-3,6 GCC 4,8 Bazylego 0.11.0
przepływ tensorowy-1,8.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.10.0
przepływ tensorowy-1,7.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.10.0
przepływ tensorowy-1,6,0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.9.0
przepływ tensorowy-1.5.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.8.0
przepływ tensorowy-1.4.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0,5,4
przepływ tensorowy-1,3,0 2,7, 3,3-3,6 GCC 4,8 Bazyl 0,4,5
przepływ tensorowy-1.2.0 2,7, 3,3-3,6 GCC 4,8 Bazyl 0,4,5
przepływ tensorowy-1.1.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.4.2
przepływ tensorowy-1.0.0 2,7, 3,3-3,6 GCC 4,8 Bazel 0.4.2

GPU

Wersja Wersja Pythona Kompilator Narzędzia do budowania cuDNN CUDA
przepływ tensorowy-2.9.0 3,7-3,10 GCC 9.3.1 Bazel 5.0.0 8.1 11.2
przepływ tensorowy-2,8.0 3,7-3,10 GCC 7.3.1 Bazylea 4.2.1 8.1 11.2
przepływ tensorowy-2.7.0 3,7-3,9 GCC 7.3.1 Bazylea 3.7.2 8.1 11.2
przepływ tensorowy-2,6,0 3,6-3,9 GCC 7.3.1 Bazylea 3.7.2 8.1 11.2
przepływ tensorowy-2,5,0 3,6-3,9 GCC 7.3.1 Bazylea 3.7.2 8.1 11.2
przepływ tensorowy-2.4.0 3,6-3,8 GCC 7.3.1 Bazel 3.1.0 8,0 11,0
przepływ tensorowy-2.3.0 3,5-3,8 GCC 7.3.1 Bazel 3.1.0 7,6 10.1
przepływ tensorowy-2.2.0 3,5-3,8 GCC 7.3.1 Bazel 2.0.0 7,6 10.1
przepływ tensorowy-2.1.0 2,7, 3,5-3,7 GCC 7.3.1 Bazylego 0.27.1 7,6 10.1
przepływ tensorowy-2.0.0 2,7, 3,3-3,7 GCC 7.3.1 Bazylego 0,26,1 7,4 10,0
tensorflow_gpu-1.15.0 2,7, 3,3-3,7 GCC 7.3.1 Bazylego 0,26,1 7,4 10,0
tensorflow_gpu-1.14.0 2,7, 3,3-3,7 GCC 4,8 Bazylego 0.24.1 7,4 10,0
tensorflow_gpu-1.13.1 2,7, 3,3-3,7 GCC 4,8 Bazylego 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 Bazylego 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 Bazyl 0,4,5 6 8
tensorflow_gpu-1.2.0 2,7, 3,3-3,6 GCC 4,8 Bazyl 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

System operacyjny Mac

procesor

Wersja Wersja Pythona Kompilator Narzędzia do budowania
przepływ tensorowy-2.9.0 3,7-3,10 Clang z xcode 10.14 Bazel 5.0.0
przepływ tensorowy-2,8.0 3,7-3,10 Clang z xcode 10.14 Bazylea 4.2.1
przepływ tensorowy-2.7.0 3,7-3,9 Clang z xcode 10.11 Bazylea 3.7.2
przepływ tensorowy-2,6,0 3,6-3,9 Clang z xcode 10.11 Bazylea 3.7.2
przepływ tensorowy-2,5,0 3,6-3,9 Clang z xcode 10.11 Bazylea 3.7.2
przepływ tensorowy-2.4.0 3,6-3,8 Clang z xcode 10.3 Bazel 3.1.0
przepływ tensorowy-2.3.0 3,5-3,8 Clang z xcode 10.1 Bazel 3.1.0
przepływ tensorowy-2.2.0 3,5-3,8 Clang z xcode 10.1 Bazel 2.0.0
przepływ tensorowy-2.1.0 2,7, 3,5-3,7 Clang z xcode 10.1 Bazylego 0.27.1
przepływ tensorowy-2.0.0 2,7, 3,5-3,7 Clang z xcode 10.1 Bazylego 0.27.1
przepływ tensorowy-2.0.0 2,7, 3,3-3,7 Clang z xcode 10.1 Bazylego 0,26,1
przepływ tensorowy-1.15.0 2,7, 3,3-3,7 Clang z xcode 10.1 Bazylego 0,26,1
przepływ tensorowy-1.14.0 2,7, 3,3-3,7 Clang z xcode Bazylego 0.24.1
przepływ tensorowy-1.13.1 2,7, 3,3-3,7 Clang z xcode Bazylego 0.19.2
przepływ tensorowy-1.12.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
przepływ tensorowy-1.11.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
przepływ tensorowy-1.10.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
przepływ tensorowy-1.9.0 2,7, 3,3-3,6 Clang z xcode Bazylego 0.11.0
przepływ tensorowy-1,8.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.10.1
przepływ tensorowy-1,7.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.10.1
przepływ tensorowy-1,6,0 2,7, 3,3-3,6 Clang z xcode Bazel 0.8.1
przepływ tensorowy-1.5.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.8.1
przepływ tensorowy-1.4.0 2,7, 3,3-3,6 Clang z xcode Bazel 0,5,4
przepływ tensorowy-1,3,0 2,7, 3,3-3,6 Clang z xcode Bazyl 0,4,5
przepływ tensorowy-1.2.0 2,7, 3,3-3,6 Clang z xcode Bazyl 0,4,5
przepływ tensorowy-1.1.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2
przepływ tensorowy-1.0.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2

GPU

Wersja Wersja Pythona Kompilator Narzędzia do budowania cuDNN CUDA
tensorflow_gpu-1.1.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2 5.1 8