Создайте 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 (рекомендуется, только для Linux)
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:
Перейдите в желаемый каталог назначения:
```cd <desired directory>```
Загрузите и извлеките архивный файл... (подходящий для вашей архитектуры):
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
Проверьте полученную версию двоичных файлов Clang + LLVM 16:
./clang+llvm-16.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-16 --version
Каталог
/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 в виртуальной среде контейнера:
- Необязательно: Настройте сборку — пользователю будет предложено ответить на вопросы по настройке сборки.
- Создайте инструмент, используемый для создания пакета pip .
- Запустите инструмент, чтобы создать пакет pip .
- Настройте права владения файлом за пределами контейнера.
./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