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

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

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

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

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

Убунту

sudo apt install python3-dev python3-pip

macOS

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

Установите с помощью менеджера пакетов Homebrew :

brew install python

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

pip install -U --user pip

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

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

Если Bazelisk недоступен, вы можете установить Bazel вручную. Обязательно установите правильную версию Bazel из файла .bazelversion TensorFlow.

Clang — это компилятор C/C++/Objective-C, скомпилированный в C++ на основе LLVM. Это компилятор по умолчанию для сборки TensorFlow, начиная с TensorFlow 2.13. Текущая поддерживаемая версия — LLVM/Clang 17.

Ночные пакеты LLVM Debian/Ubuntu предоставляют сценарий автоматической установки и пакеты для ручной установки в Linux. Обязательно выполните следующую команду, если вы вручную добавляете репозиторий llvm apt в источники вашего пакета:

sudo apt-get update && sudo apt-get install -y llvm-17 clang-17

Теперь, в данном случае фактическим путем к clang является /usr/lib/llvm-17/bin/clang .

Альтернативно вы можете скачать и распаковать готовый Clang+LLVM 17 .

Ниже приведен пример шагов, которые вы можете предпринять для настройки загруженных двоичных файлов Clang + LLVM 17 в операционных системах Debian/Ubuntu:

  1. Перейдите в желаемый каталог назначения: cd <desired directory>

  2. Загрузите и извлеките архивный файл... (подходящий для вашей архитектуры):

    wget https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz
    
    tar -xvf clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz
    
    

  3. Скопируйте извлеченное содержимое (каталоги и файлы) в /usr (вам могут потребоваться разрешения sudo, а правильный каталог может отличаться в зависимости от дистрибутива). Это эффективно установит Clang и LLVM и добавит их в путь. Вам не придется ничего заменять, если только у вас не установлена ​​предыдущая установка; в этом случае вам следует заменить файлы:

    cp -r clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04/* /usr
    

  4. Проверьте полученную версию двоичных файлов Clang + LLVM 17:

    clang --version
    

  5. Теперь, когда /usr/bin/clang — это фактический путь к вашему новому clang. Вы можете запустить сценарий ./configure или вручную установить переменные среды CC и BAZEL_COMPILER по этому пути.

Установите поддержку графического процессора (необязательно, только для 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 (ваш сеанс может отличаться):

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

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

из версии 2.18.0

Для поддержки графического процессора установите cuda=Y во время настройки и при необходимости укажите версии CUDA и cuDNN. Bazel автоматически загрузит пакеты CUDA и CUDNN или при необходимости укажет на перераспределения CUDA/CUDNN/NCCL в локальной файловой системе.

до версии 2.18.0

Для поддержки графического процессора установите 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

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

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

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

Официальные пакеты TensorFlow созданы с использованием набора инструментов Clang, соответствующего стандарту пакетов Manylinux2014.

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

Чтобы собрать пакет pip, вам необходимо указать флаг --repo_env=WHEEL_NAME . в зависимости от указанного имени будет создан пакет, например:

Чтобы собрать пакет ЦП с тензорным потоком:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu

Чтобы собрать пакет графического процессора с тензорным потоком:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel

Чтобы собрать пакет TPU с тензорным потоком:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_tpu --config=tpu

Чтобы собрать ночной пакет, установите tf_nightly вместо tensorflow , например, для сборки ночного пакета CPU:

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tf_nightly_cpu

В результате сгенерированное колесо будет находиться в

bazel-bin/tensorflow/tools/pip_package/wheel_house/

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

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

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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. Настройте права владения файлом за пределами контейнера.
./configure  # if necessary

bazel build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu --config=opt
`
chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

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

pip uninstall tensorflow  # remove current version

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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® устанавливать не требуется). Обратитесь к руководству по поддержке графического процессора и руководству 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 //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel --config=opt

chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

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

pip uninstall tensorflow  # remove current version

pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/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.18.0 3,9-3,12 Кланг 17.0.6 Базель 6.5.0
тензорный поток-2.17.0 3,9-3,12 Кланг 17.0.6 Базель 6.5.0
тензорный поток-2.16.1 3,9-3,12 Кланг 17.0.6 Базель 6.5.0
тензорный поток-2.15.0 3,9-3,11 Кланг 16.0.0 Базель 6.1.0
тензорный поток-2.14.0 3,9-3,11 Кланг 16.0.0 Базель 6.1.0
тензорный поток-2.13.0 3,8-3,11 Кланг 16.0.0 Базель 5.3.0
тензорный поток-2.12.0 3,8-3,11 ОУЗ 9.3.1 Базель 5.3.0
тензорный поток-2.11.0 3,7-3,10 ОУЗ 9.3.1 Базель 5.3.0
тензорный поток-2.10.0 3,7-3,10 ОУЗ 9.3.1 Базель 5.1.1
тензорный поток-2.9.0 3,7-3,10 ОУЗ 9.3.1 Базель 5.0.0
тензорный поток-2.8.0 3,7-3,10 GCC 7.3.1 Базель 4.2.1
тензорный поток-2.7.0 3,7-3,9 GCC 7.3.1 Базель 3.7.2
тензорный поток-2.6.0 3,6-3,9 GCC 7.3.1 Базель 3.7.2
тензорный поток-2.5.0 3,6-3,9 GCC 7.3.1 Базель 3.7.2
тензорный поток-2.4.0 3,6-3,8 GCC 7.3.1 Базель 3.1.0
тензорный поток-2.3.0 3,5-3,8 GCC 7.3.1 Базель 3.1.0
тензорный поток-2.2.0 3,5-3,8 GCC 7.3.1 Базель 2.0.0
тензорный поток-2.1.0 2,7, 3,5-3,7 GCC 7.3.1 Базель 0.27.1
тензорный поток-2.0.0 2,7, 3,3-3,7 GCC 7.3.1 Базель 0.26.1
тензорный поток-1.15.0 2,7, 3,3-3,7 GCC 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 КУДА
тензорный поток-2.18.0 3,9-3,12 Кланг 17.0.6 Базель 6.5.0 9.3 12,5
тензорный поток-2.17.0 3,9-3,12 Кланг 17.0.6 Базель 6.5.0 8,9 12.3
тензорный поток-2.16.1 3,9-3,12 Кланг 17.0.6 Базель 6.5.0 8,9 12.3
тензорный поток-2.15.0 3,9-3,11 Кланг 16.0.0 Базель 6.1.0 8,9 12.2
тензорный поток-2.14.0 3,9-3,11 Кланг 16.0.0 Базель 6.1.0 8,7 11,8
тензорный поток-2.13.0 3,8-3,11 Кланг 16.0.0 Базель 5.3.0 8,6 11,8
тензорный поток-2.12.0 3,8-3,11 ОУЗ 9.3.1 Базель 5.3.0 8,6 11,8
тензорный поток-2.11.0 3,7-3,10 ОУЗ 9.3.1 Базель 5.3.0 8.1 11.2
тензорный поток-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 GCC 7.3.1 Базель 4.2.1 8.1 11.2
тензорный поток-2.7.0 3,7-3,9 GCC 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.6.0 3,6-3,9 GCC 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.5.0 3,6-3,9 GCC 7.3.1 Базель 3.7.2 8.1 11.2
тензорный поток-2.4.0 3,6-3,8 GCC 7.3.1 Базель 3.1.0 8.0 11,0
тензорный поток-2.3.0 3,5-3,8 GCC 7.3.1 Базель 3.1.0 7,6 10.1
тензорный поток-2.2.0 3,5-3,8 GCC 7.3.1 Базель 2.0.0 7,6 10.1
тензорный поток-2.1.0 2,7, 3,5-3,7 GCC 7.3.1 Базель 0.27.1 7,6 10.1
тензорный поток-2.0.0 2,7, 3,3-3,7 GCC 7.3.1 Базель 0.26.1 7.4 10,0
тензорный поток_гпу-1.15.0 2,7, 3,3-3,7 GCC 7.3.1 Базель 0.26.1 7.4 10,0
тензорный поток_гпу-1.14.0 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.24.1 7.4 10,0
тензорный поток_гпу-1.13.1 2,7, 3,3-3,7 ССЗ 4.8 Базель 0.19.2 7.4 10,0
тензорный поток_гпу-1.12.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0 7 9
тензорный поток_гпу-1.11.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.15.0 7 9
тензорный поток_гпу-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
тензорный поток_гпу-1.8.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.10.0 7 9
тензорный поток_гпу-1.7.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.9.0 7 9
тензорный поток_гпу-1.6.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.9.0 7 9
тензорный поток_гпу-1.5.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.8.0 7 9
тензорный поток_гпу-1.4.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.5.4 6 8
тензорный поток_гпу-1.3.0 2,7, 3,3-3,6 ССЗ 4.8 Базель 0.4.5 6 8
тензорный поток_гпу-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.16.1 3,9-3,12 Кланг из Xcode 13.6 Базель 6.5.0
тензорный поток-2.15.0 3,9-3,11 Кланг из xcode 10.15 Базель 6.1.0
тензорный поток-2.14.0 3,9-3,11 Кланг из xcode 10.15 Базель 6.1.0
тензорный поток-2.13.0 3,8-3,11 Кланг из xcode 10.15 Базель 5.3.0
тензорный поток-2.12.0 3,8-3,11 Кланг из xcode 10.15 Базель 5.3.0
тензорный поток-2.11.0 3,7-3,10 Кланг из xcode 10.14 Базель 5.3.0
тензорный поток-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 КУДА
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