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

Создайте 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 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 из файла .bazelversion TensorFlow.

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

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

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

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

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

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

    ```cd <desired directory>```
    
    1. Загрузите и извлеките архивный файл... (подходящий для вашей архитектуры):

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

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

      
      ./clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-16 --version 
      

    3. Каталог /clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-16 — это фактический путь к вашему новому 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 (ваш сеанс может отличаться):

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

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

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

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

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

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

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

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

    Команда 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® устанавливать не требуется). Обратитесь к руководству по поддержке графического процессора и руководству 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.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.15.0 3,9-3,11 Кланг 16.0.0 Базель 6.1.0 8,8 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.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