Создайте пакет 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
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.
Настроить сборку
Настройте сборку системы, запустив ./configure
в корне вашего исходного дерева TensorFlow. Этот скрипт запрашивает расположение зависимостей TensorFlow и дополнительные параметры конфигурации сборки (например, флаги компилятора).
./configure
При использовании виртуальной среды 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
— Конфигурация для преимущественно статической монолитной сборки. -
--config=v1
собрать TensorFlow 1.x вместо 2.x.
Создайте пакет pip
ТензорФлоу 2.x
Установите Bazel и используйте 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
ТензорФлоу 1.x
Чтобы собрать более старый пакет TensorFlow 1.x, используйте параметр --config=v1
:
bazel build --config=v1 [--config=option] //tensorflow/tools/pip_package:build_pip_package
Варианты сборки Базеля
Параметры сборки см. в справочнике по командной строке Bazel .
Сборка TensorFlow из исходного кода может использовать много оперативной памяти. Если в вашей системе ограничена память, ограничьте использование ОЗУ Bazel с помощью: --local_ram_resources=2048
.
Официальные пакеты TensorFlow созданы с помощью набора инструментов GCC 7.3, который соответствует стандарту пакетов 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 в виртуальной среде контейнера:
- Настроить сборку — пользователю предлагается ответить на вопросы о конфигурации сборки.
- Создайте инструмент, используемый для создания пакета pip .
- Запустите инструмент, чтобы создать пакет pip .
- Настройте права собственности на файл за пределами контейнера.
./configure # answer prompts or use defaults
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 устанавливать не нужно). См. руководство по поддержке GPU и руководство по 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 # answer prompts or use defaults
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.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.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.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 |