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

Сборка из исходников

Создайте пакет pip TensorFlow из исходного кода и установите его в Ubuntu Linux и macOS. Хотя инструкции могут работать для других систем, они протестированы и поддерживаются только для Ubuntu и macOS.

Настройка для Linux и macOS

Установите следующие инструменты сборки, чтобы настроить среду разработки.

Установите Python и зависимости пакета TensorFlow.

Убунту

sudo apt install python3-dev python3-pip

macOS

Требуется Xcode 9.2 или новее.

Установите с помощью менеджера пакетов 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

Установите зависимости пакета TensorFlow pip (при использовании виртуальной среды опустите аргумент --user ):

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

Установить Базель

Для сборки TensorFlow вам потребуется установить Bazel. Bazelisk — это простой способ установить Bazel, который автоматически загружает правильную версию Bazel для TensorFlow. Для простоты использования добавьте Bazelisk в качестве исполняемого файла bazel в PATH .

Если Bazelisk недоступен, вы можете установить Bazel вручную. Обязательно установите поддерживаемую версию Bazel: любую версию между _TF_MIN_BAZEL_VERSION и _TF_MAX_BAZEL_VERSION , как указано в tensorflow/configure.py .

Установите поддержку графического процессора (необязательно, только для Linux)

Для macOS нет поддержки графического процессора.

Прочтите руководство по поддержке графического процессора , чтобы установить драйверы и дополнительное программное обеспечение, необходимое для запуска TensorFlow на графическом процессоре.

Загрузите исходный код TensorFlow.

Используйте Git для клонирования репозитория TensorFlow :

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

Репо по умолчанию использует master ветку разработки. Вы также можете проверить ветку релиза для сборки:

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

Настроить сборку

Настройте сборку системы, запустив ./configure в корне вашего исходного дерева TensorFlow. Этот скрипт запрашивает расположение зависимостей TensorFlow и дополнительные параметры конфигурации сборки (например, флаги компилятора).

./configure

При использовании виртуальной среды python configure.py приоритет путям внутри среды, тогда как ./configure приоритет путям вне среды. В обоих случаях вы можете изменить значение по умолчанию.

Пример сеанса

Ниже показан пример запуска скрипта ./configure (ваш сеанс может отличаться):

Варианты конфигурации

Поддержка графического процессора

Для поддержки GPU установите cuda=Y во время настройки и укажите версии CUDA и cuDNN. Если в вашей системе установлено несколько версий CUDA или cuDNN, явно установите версию, а не полагайтесь на версию по умолчанию. ./configure создает символические ссылки на библиотеки CUDA вашей системы, поэтому, если вы обновите пути к библиотекам CUDA, этот шаг настройки необходимо будет выполнить еще раз перед сборкой.

Оптимизации

Для флагов оптимизации компиляции значение по умолчанию ( -march=native ) оптимизирует сгенерированный код для типа ЦП вашего компьютера. Однако при создании TensorFlow для другого типа ЦП рассмотрите более конкретный флаг оптимизации. Примеры см. в руководстве GCC .

Предварительно настроенные конфигурации

Доступны некоторые предварительно настроенные конфигурации сборки, которые можно добавить в bazel build , например:

  • --config=dbg Сборка с отладочной информацией. Подробности смотрите на CONTRIBUTING.md .
  • --config=mkl —Поддержка Intel® MKL-DNN .
  • --config=monolithic — Конфигурация для преимущественно статической монолитной сборки.
  • --config=v1 собрать TensorFlow 1.x вместо 2.x.

Создайте пакет pip

ТензорФлоу 2.x

Установите Bazel и используйте bazel build для создания пакета TensorFlow 2.x с поддержкой только ЦП :

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

Поддержка графического процессора

Чтобы создать сборщик пакетов TensorFlow с поддержкой графического процессора:

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

ТензорФлоу 1.x

Чтобы собрать более старый пакет TensorFlow 1.x, используйте параметр --config=v1 :

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

Варианты сборки Базеля

Параметры сборки см. в справочнике по командной строке Bazel .

Сборка TensorFlow из исходного кода может использовать много оперативной памяти. Если в вашей системе ограничена память, ограничьте использование ОЗУ Bazel с помощью: --local_ram_resources=2048 .

Официальные пакеты TensorFlow созданы с помощью набора инструментов GCC 7.3, который соответствует стандарту пакетов manylinux2010.

Для GCC 5 и более поздних версий совместимость со старым ABI можно создать с помощью: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" . Совместимость с ABI гарантирует, что пользовательские операции, созданные для официального пакета TensorFlow, продолжат работать с пакетом, созданным GCC 5.

Соберите пакет

Команда bazel build создает исполняемый файл с именем build_pip_package — это программа, которая создает пакет pip . Запустите исполняемый файл, как показано ниже, чтобы создать пакет .whl в каталоге /tmp/tensorflow_pkg .

Для сборки из ветки релиза:

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

Для сборки из мастера используйте --nightly_flag , чтобы получить правильные зависимости:

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

Хотя в одном и том же исходном дереве можно создавать как конфигурации CUDA, так и не-CUDA, рекомендуется запускать bazel clean при переключении между этими двумя конфигурациями в одном и том же исходном дереве.

Установить пакет

Имя сгенерированного файла .whl зависит от версии TensorFlow и вашей платформы. Используйте pip install для установки пакета, например:

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

Сборки Docker Linux

Образы для разработки Docker от TensorFlow — это простой способ настроить среду для сборки пакетов Linux из исходного кода. Эти образы уже содержат исходный код и зависимости, необходимые для сборки TensorFlow. См. руководство TensorFlow Docker по установке и список доступных тегов изображений .

только процессор

В следующем примере используется образ :devel для сборки пакета только для ЦП из последнего исходного кода TensorFlow. См. руководство по Docker для доступных тегов TensorFlow -devel .

Загрузите последний образ разработки и запустите контейнер Docker, который мы будем использовать для сборки пакета 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

Приведенная выше команда docker run запускает оболочку в /tensorflow_src — корневом дереве исходного кода. Он монтирует текущий каталог хоста в каталог контейнера /mnt и передает информацию о пользователе хоста в контейнер через переменную окружения (используется для установки разрешений — Docker может усложнить эту задачу).

В качестве альтернативы, чтобы создать хост-копию TensorFlow в контейнере, смонтируйте исходное дерево хоста в каталоге /tensorflow контейнера:

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

Настроив исходное дерево, создайте пакет TensorFlow в виртуальной среде контейнера:

  1. Настроить сборку — пользователю предлагается ответить на вопросы о конфигурации сборки.
  2. Создайте инструмент, используемый для создания пакета pip .
  3. Запустите инструмент, чтобы создать пакет pip .
  4. Настройте права собственности на файл за пределами контейнера.
./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

Установите и проверьте пакет внутри контейнера:

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

На вашем хост-компьютере пакет pip TensorFlow находится в текущем каталоге (с правами пользователя хоста): ./tensorflow- version - tags .whl

Поддержка графического процессора

Docker — это самый простой способ обеспечить поддержку TensorFlow графическим процессором, поскольку для хост -компьютера требуется только драйвер NVIDIA® ( инструментарий NVIDIA® CUDA® Toolkit устанавливать не нужно). См. руководство по поддержке GPU и руководство по TensorFlow Docker, чтобы настроить nvidia-docker (только для Linux).

В следующем примере загружается образ TensorFlow :devel-gpu и используется nvidia-docker для запуска контейнера с поддержкой графического процессора. Этот образ разработки настроен для сборки пакета pip с поддержкой графического процессора:

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

Затем в виртуальной среде контейнера соберите пакет TensorFlow с поддержкой графического процессора:

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

Установите и проверьте пакет внутри контейнера и проверьте наличие графического процессора:

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

Протестированные конфигурации сборки

линукс

ЦПУ

Версия версия Python Компилятор Инструменты сборки
тензорный поток-2.8.0 3,7-3,10 ССЗ 7.3.1 Базель 4.2.1
тензорный поток-2.7.0 3,7-3,9 ССЗ 7.3.1 Базель 3.7.2
тензорный поток-2.6.0 3,6-3,9 ССЗ 7.3.1 Базель 3.7.2
тензорный поток-2.5.0 3,6-3,9 ССЗ 7.3.1 Базель 3.7.2
тензорный поток-2.4.0 3,6-3,8 ССЗ 7.3.1 Базель 3.1.0
тензорный поток-2.3.0 3,5-3,8 ССЗ 7.3.1 Базель 3.1.0
тензорный поток-2.2.0 3,5-3,8 ССЗ 7.3.1 Базель 2.0.0
тензорный поток-2.1.0 2,7, 3,5-3,7 ССЗ 7.3.1 Базель 0.27.1
тензорный поток-2.0.0 2,7, 3,3-3,7 ССЗ 7.3.1 Базель 0.26.1
тензорный поток-1.15.0 2,7, 3,3-3,7 ССЗ 7.3.1 Базель 0.26.1
тензорный поток-1.14.0 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.24.1
тензорный поток-1.13.1 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.19.2
тензорный поток-1.12.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0
тензорный поток-1.11.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0
тензорный поток-1.10.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0
тензорный поток-1.9.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.11.0
тензорный поток-1.8.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.10.0
тензорный поток-1.7.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.10.0
тензорный поток-1.6.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.9.0
тензорный поток-1.5.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.8.0
тензорный поток-1.4.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.5.4
тензорный поток-1.3.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.5
тензорный поток-1.2.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.5
тензорный поток-1.1.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.2
тензорный поток-1.0.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.2

графический процессор

Версия версия Python Компилятор Инструменты сборки cuDNN CUDA
тензорный поток-2.8.0 3,7-3,10 ССЗ 7.3.1 Базель 4.2.1 8.1 11.2
тензорный поток-2.7.0 3,7-3,9 ССЗ 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.6.0 3,6-3,9 ССЗ 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.5.0 3,6-3,9 ССЗ 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.4.0 3,6-3,8 ССЗ 7.3.1 Базель 3.1.0 8,0 11,0
тензорный поток-2.3.0 3,5-3,8 ССЗ 7.3.1 Базель 3.1.0 7.6 10.1
тензорный поток-2.2.0 3,5-3,8 ССЗ 7.3.1 Базель 2.0.0 7.6 10.1
тензорный поток-2.1.0 2,7, 3,5-3,7 ССЗ 7.3.1 Базель 0.27.1 7.6 10.1
тензорный поток-2.0.0 2,7, 3,3-3,7 ССЗ 7.3.1 Базель 0.26.1 7.4 10,0
tensorflow_gpu-1.15.0 2,7, 3,3-3,7 ССЗ 7.3.1 Базель 0.26.1 7.4 10,0
tensorflow_gpu-1.14.0 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.24.1 7.4 10,0
tensorflow_gpu-1.13.1 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.19.2 7.4 10,0
tensorflow_gpu-1.12.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0 7 9
tensorflow_gpu-1.11.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0 7 9
tensorflow_gpu-1.10.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0 7 9
tensorflow_gpu-1.9.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.11.0 7 9
tensorflow_gpu-1.8.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.10.0 7 9
tensorflow_gpu-1.7.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.9.0 7 9
tensorflow_gpu-1.6.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.9.0 7 9
tensorflow_gpu-1.5.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.8.0 7 9
tensorflow_gpu-1.4.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.5.4 6 8
tensorflow_gpu-1.3.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.5 6 8
tensorflow_gpu-1.2.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.5 5.1 8
tensorflow_gpu-1.1.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.2 5.1 8

macOS

ЦПУ

Версия версия Python Компилятор Инструменты сборки
тензорный поток-2.8.0 3,7-3,10 Кланг из xcode 10.14 Базель 4.2.1
тензорный поток-2.7.0 3,7-3,9 Кланг из xcode 10.11 Базель 3.7.2
тензорный поток-2.6.0 3,6-3,9 Кланг из xcode 10.11 Базель 3.7.2
тензорный поток-2.5.0 3,6-3,9 Кланг из xcode 10.11 Базель 3.7.2
тензорный поток-2.4.0 3,6-3,8 Кланг из xcode 10.3 Базель 3.1.0
тензорный поток-2.3.0 3,5-3,8 Кланг из xcode 10.1 Базель 3.1.0
тензорный поток-2.2.0 3,5-3,8 Кланг из xcode 10.1 Базель 2.0.0
тензорный поток-2.1.0 2,7, 3,5-3,7 Кланг из xcode 10.1 Базель 0.27.1
тензорный поток-2.0.0 2,7, 3,5-3,7 Кланг из xcode 10.1 Базель 0.27.1
тензорный поток-2.0.0 2,7, 3,3-3,7 Кланг из xcode 10.1 Базель 0.26.1
тензорный поток-1.15.0 2,7, 3,3-3,7 Кланг из xcode 10.1 Базель 0.26.1
тензорный поток-1.14.0 2,7, 3,3-3,7 Кланг из xcode Базель 0.24.1
тензорный поток-1.13.1 2,7, 3,3-3,7 Кланг из xcode Базель 0.19.2
тензорный поток-1.12.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.15.0
тензорный поток-1.11.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.15.0
тензорный поток-1.10.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.15.0
тензорный поток-1.9.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.11.0
тензорный поток-1.8.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.10.1
тензорный поток-1.7.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.10.1
тензорный поток-1.6.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.8.1
тензорный поток-1.5.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.8.1
тензорный поток-1.4.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.5.4
тензорный поток-1.3.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.5
тензорный поток-1.2.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.5
тензорный поток-1.1.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.2
тензорный поток-1.0.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.2

графический процессор

Версия версия Python Компилятор Инструменты сборки cuDNN CUDA
tensorflow_gpu-1.1.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.2 5.1 8
tensorflow_gpu-1.0.0 2,7, 3,3-3,6 Кланг из xcode Базель 0.4.2 5.1 8