Zbuduj ze źródła

Zbuduj pakiet pip TensorFlow ze źródła i zainstaluj go w systemie 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 systemów Linux i macOS

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

Zainstaluj Python i zależności pakietu 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 pip TensorFlow (jeśli używasz środowiska wirtualnego, pomiń argument --user ):

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

Zainstaluj Bazela

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

Jeśli Bazelisk nie jest dostępny, możesz ręcznie zainstalować Bazel . Upewnij się, że zainstalowałeś poprawną wersję Bazel z pliku .bazelversion TensorFlow .

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

Brak obsługi GPU dla systemu macOS.

Przeczytaj przewodnik po obsłudze 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

Domyślnie repozytorium to master gałąź programistyczna. Możesz także sprawdzić gałąź wydania do zbudowania:

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

Opcjonalnie: skonfiguruj kompilację

Kompilacje TensorFlow są konfigurowane przez plik .bazelrc w katalogu głównym repozytorium. Skrypty ./configure lub ./configure.py mogą służyć do dostosowywania typowych ustawień.

Jeśli potrzebujesz zmienić konfigurację, uruchom skrypt ./configure z katalogu głównego repozytorium. Ten skrypt wyświetli monit o lokalizację zależności TensorFlow i poprosi o dodatkowe opcje konfiguracji kompilacji (na przykład flagi kompilatora). Aby uzyskać szczegółowe informacje, zapoznaj się z sekcją Przykładowa sesja .

./configure

Istnieje również wersja tego skryptu dla Pythona, ./configure.py . 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

Wsparcie GPU

Aby uzyskać obsługę GPU , ustaw cuda=Y podczas konfiguracji i określ wersje CUDA i cuDNN. Jeśli Twój system ma zainstalowanych wiele wersji CUDA lub cuDNN, jawnie ustaw wersję zamiast polegać na wartości 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 wartość domyślna ( -march=native ) optymalizuje wygenerowany kod dla typu procesora komputera. Jeśli jednak budujesz TensorFlow dla innego typu procesora, rozważ bardziej szczegółową flagę optymalizacji. Sprawdź podręcznik GCC dla przykładów.

Wstępnie skonfigurowane konfiguracje

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

  • --config=dbg Kompiluj z informacjami o debugowaniu. Więcej informacji można znaleźć na stronie CONTRIBUTING.md .
  • --config=mkl Intel® MKL-DNN .
  • --config=monolithic — konfiguracja dla w większości statycznej, monolitycznej kompilacji.

Zbuduj i zainstaluj pakiet pip

Pakiet pip jest tworzony w dwóch krokach. bazel build tworzą program „konstruktora pakietów”. Następnie uruchamiasz narzędzie do tworzenia pakietów, aby utworzyć pakiet.

Zbuduj konstruktora pakietów

Użyj bazel build , aby utworzyć narzędzie do tworzenia pakietów TensorFlow 2.x z obsługą tylko procesora :

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

Wsparcie GPU

Aby zbudować narzędzie do tworzenia pakietów TensorFlow z obsługą GPU:

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

Opcje budowania Bazela

Zapoznaj się z dokumentacją dotyczącą wiersza poleceń Bazel, aby zapoznać się z opcjami kompilacji .

Budowanie TensorFlow ze źródła może zużywać dużo pamięci RAM. Jeśli twój system ma ograniczoną pamięć, 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, który jest zgodny ze standardem pakietów Manylinux2010.

W przypadku GCC 5 i nowszych zgodność ze starszym ABI można zbudować za pomocą: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . Zgodność 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

Komenda 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 skompilować 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 konfiguracji innych niż CUDA w ramach tego samego drzewa źródłowego, zaleca się uruchamianie 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 Twojej 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 tworzenia pakietów systemu Linux ze źródła. Te obrazy zawierają już kod źródłowy i zależności wymagane do zbudowania TensorFlow. Przejdź do przewodnika TensorFlow Docker, aby uzyskać instrukcje instalacji i listę dostępnych tagów obrazów .

Tylko procesor

W poniższym przykładzie użyto :devel obrazu do skompilowania pakietu tylko dla procesora z najnowszego kodu źródłowego TensorFlow. Sprawdź przewodnik platformy Docker pod kątem dostępnych tagów TensorFlow -devel .

Pobierz najnowszy obraz programistyczny 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 poprzez zmienną środowiskową (używaną do ustawiania uprawnień — Docker może to utrudnić).

Alternatywnie, aby zbudować kopię hosta TensorFlow w kontenerze, zamontuj źródłowe drzewo 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ódeł zbuduj pakiet TensorFlow w środowisku wirtualnym kontenera:

  1. Opcjonalnie: Skonfiguruj kompilację — spowoduje to wyświetlenie monitu 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  # 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

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

Wsparcie GPU

Docker to najłatwiejszy sposób na zbudowanie obsługi procesora graficznego dla TensorFlow, ponieważ komputer hosta wymaga tylko sterownika NVIDIA® ( zestaw narzędzi NVIDIA® CUDA® nie musi być instalowany). 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 uruchamiania kontenera obsługującego GPU. Ten obraz programistyczny jest skonfigurowany do tworzenia 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 wirtualnym środowisku kontenera zbuduj pakiet TensorFlow z obsługą 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

Zainstaluj i sprawdź pakiet w kontenerze oraz 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

Linuks

procesor

Wersja Wersja Pythona Kompilator Buduj narzędzia
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.0.0
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

Wersja Wersja Pythona Kompilator Buduj narzędzia cuDNN CUDA
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

System operacyjny Mac

procesor

Wersja Wersja Pythona Kompilator Buduj narzędzia
tensorflow-2.11.0 3.7-3.10 Clang z xcode 10.14 Bazel 5.3.0
tensorflow-2.10.0 3.7-3.10 Clang z xcode 10.14 Bazel 5.1.1
tensorflow-2.9.0 3.7-3.10 Clang z xcode 10.14 Bazel 5.0.0
tensorflow-2.8.0 3.7-3.10 Clang z xcode 10.14 Bazel 4.2.1
tensorflow-2.7.0 3,7-3,9 Clang z xcode 10.11 Bazel 3.7.2
tensorflow-2.6.0 3,6-3,9 Clang z xcode 10.11 Bazel 3.7.2
tensorflow-2.5.0 3,6-3,9 Clang z xcode 10.11 Bazel 3.7.2
tensorflow-2.4.0 3,6-3,8 Clang z xcode 10.3 Bazel 3.1.0
tensorflow-2.3.0 3,5-3,8 Clang z xcode 10.1 Bazel 3.1.0
tensorflow-2.2.0 3,5-3,8 Clang z xcode 10.1 Bazel 2.0.0
tensorflow-2.1.0 2,7, 3,5-3,7 Clang z xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2,7, 3,5-3,7 Clang z xcode 10.1 Bazel 0.27.1
tensorflow-2.0.0 2,7, 3,3-3,7 Clang z xcode 10.1 Bazel 0.26.1
tensorflow-1.15.0 2,7, 3,3-3,7 Clang z xcode 10.1 Bazel 0.26.1
tensorflow-1.14.0 2,7, 3,3-3,7 Clang z xcode Bazel 0.24.1
tensorflow-1.13.1 2,7, 3,3-3,7 Clang z xcode Bazel 0.19.2
tensorflow-1.12.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
tensorflow-1.11.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
tensorflow-1.10.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.15.0
tensorflow-1.9.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.11.0
tensorflow-1.8.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.10.1
tensorflow-1.7.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.10.1
tensorflow-1.6.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.8.1
tensorflow-1.5.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.8.1
tensorflow-1.4.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.5.4
tensorflow-1.3.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.5
tensorflow-1.2.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.5
tensorflow-1.1.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2
tensorflow-1.0.0 2,7, 3,3-3,6 Clang z xcode Bazel 0.4.2

GPU

Wersja Wersja Pythona Kompilator Buduj narzędzia 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