Создайте пакет 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
Установите зависимости пакета 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 из файла TensorFlow .bazelversion .
Установите поддержку графического процессора (необязательно, только для 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, который соответствует стандарту пакетов 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® 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.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 | ССЗ 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.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 | ССЗ 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.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 | 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 |