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

Создайте пакет 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 requests opt_einsum
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.

Необязательно: настройте сборку

Сборки TensorFlow настраиваются с помощью файла .bazelrc в корневом каталоге репозитория. Сценарии ./configure или ./configure.py можно использовать для настройки общих параметров.

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

./configure

Существует также версия этого скрипта для Python, ./configure.py . При использовании виртуальной среды 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 — Конфигурация для преимущественно статической монолитной сборки.

Соберите и установите пакет pip

Пакет pip создается в два этапа. bazel build создают программу «сборщик пакетов». Затем вы запускаете сборщик пакетов, чтобы создать пакет.

Соберите сборщик пакетов

Используйте 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

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

Информацию о параметрах сборки см. в справочнике по командной строке Bazel .

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

Официальные пакеты TensorFlow созданы с помощью набора инструментов GCC, который соответствует стандарту пакетов 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  # 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

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

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 устанавливать не нужно). Обратитесь к руководству по поддержке графического процессора и руководству по 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  # 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

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

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.10.0 3,7-3,10 ССЗ 9.3.1 Базель 5.0.0
тензорный поток-2.9.0 3,7-3,10 ССЗ 9.3.1 Базель 5.0.0
тензорный поток-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.10.0 3,7-3,10 ССЗ 9.3.1 Базель 5.1.1 8.1 11.2
тензорный поток-2.9.0 3,7-3,10 ССЗ 9.3.1 Базель 5.0.0 8.1 11.2
тензорный поток-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.10.0 3,7-3,10 Кланг из xcode 10.14 Базель 5.1.1
тензорный поток-2.9.0 3,7-3,10 Кланг из xcode 10.14 Базель 5.0.0
тензорный поток-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