Установка Tensorflow с поддержкой gpu

Tensorflow это бесплатная библиотека с открытым исходным кодом, которая широко используется в машинном обучении. С ростом мощностей компьюетров искусственный интелект стал применяться все чаще и чаще, отвоевывая ниши у классических алгоритмов. Не прошло это и мимо multimedia. Распознавание изображений, восстановление старых видео, раскраска черно-белых фото, работа со звуком лишь малая часть того, где нейросети нашли широкое применение. Поэтому давайте рассмотрим способы установки библиотеки Tensorflow с поддержкой gpu. Именно графический ускоритель раскрывает весь потенциал этой популярной библиотеки. В этой статье мы будем устанавливать Tensorflow для Python.

Стандартная установка

Самый простой способ установить Tensorflow — это использовать утилиту pip (package installer for python). В 80% случае будет достаточно запустить pip и через полминуты, Tensorflow будет установлена. Но перед этим нужно провести подготовительные мероприятия.

Подготовка

Необходимо наличие NVidia gpu и нужно установить библиотеки CUDA, без них Tensorflow Не сможет задействовать всю мощь графического ускорителя. В статье как установить cuda максимально подробно описан это процесс.

Установка

Ставить будем пакет tensorflow-gpu. Но для начала проверим какие версии доступны:

pip install tensorflow-gpu==
pip install tensorflow-gpu==
Defaulting to user installation because normal site-packages is not writeable
ERROR: Could not find a version that satisfies the requirement tensorflow-gpu== (from versions: 0.12.1, 1.0.0, 1.0.1, 1.1.0, 1.2.0, 1.2.1, 1.3.0, 1.4.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0, 1.7.0, 1.7.1, 1.8.0, 1.9.0, 1.10.0, 1.10.1, 1.11.0, 1.12.0, 1.12.2, 1.12.3, 1.13.1, 1.13.2, 1.14.0, 1.15.0rc0, 1.15.0rc1, 1.15.0rc2, 1.15.0rc3, 1.15.0, 1.15.2, 1.15.3, 1.15.4, 1.15.5, 2.0.0a0, 2.0.0b0, 2.0.0b1, 2.0.0rc0, 2.0.0rc1, 2.0.0rc2, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.1.0rc0, 2.1.0rc1, 2.1.0rc2, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.2.0rc0, 2.2.0rc1, 2.2.0rc2, 2.2.0rc3, 2.2.0rc4, 2.2.0, 2.2.1, 2.2.2, 2.3.0rc0, 2.3.0rc1, 2.3.0rc2, 2.3.0, 2.3.1, 2.3.2, 2.4.0rc0, 2.4.0rc1, 2.4.0rc2, 2.4.0rc3, 2.4.0rc4, 2.4.0, 2.4.1)

Доступно много версий осталось выбрать нужную. Для этого руководствуемся двумя последними колонками в табличке (как узнать версию CUDA и cuDNN подробно здесь):

После того, как по cuDNN и CUDA найдена необходимая версия Tensorflow, ставим ее:

pip install tensorflow-gpu==2.4.1

После утсановки даем команду

pip list

и среди установленных пакетов должны быть

tensorboard 2.4.1
tensorboard-plugin-wit 1.8.0
tensorflow-estimator 2.4.0
tensorflow-gpu 2.4.1

И сразу же проверяем:

python3 -c 'import tensorflow as tf; print(tf.__version__)'
2021-03-03: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2.4.1

Видно, что tensorflow импортировался успешно и была загружена NVIDIA CUDA Runtime Library (libcudart.so.11.0).

Если вы неправильно выбрали версию Tensorflow для установки, то будет вот что:
Tensorflow установится, но без поддержки gpu. В списке pip list будет пакет «tensorflow», а не «tensorflow-gpu».

Кастомные wheels сборки (custom builds)

Наряду с официальным способом установки через pip есть метод установки посредством кастомных сборок. Энтузиасты со всего мира собирают инсталляционный пакет Tensorflow из исходников выкладывая их в общий доступ. Данный способ установки более гибкий чем через pip, потому что можно выбрать инсталляционный пакет по различным параметрам, таким как: версия Python, версия CUDA, поддержка gpu, поддержка инструкция процессора avx и sse.
Вот две ссылки, где можно найти подходящую вам сборку:
https://github.com/fo40225/tensorflow-windows-wheel
https://pypi.org/project/tf-nightly-gpu/

Устанавливается очень просто:

pip install tensorflow.whl

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

Если вам не подошли первый и второй методы установки, то нужно собирать Tensowflow из исходников. При этом способе открываются следующие возможности:

  1. Вы можете выкинуть все лишнее из сборки и оставить, только то, что вам нужно.
  2. Можно провести тонкую оптимизацию и собрать Tensorflow под конкретный компьютер, чтобы добиться максимального быстродействия.

Перед тем, как приступить к непосредсвенной сборке Tensowflow из исходников нужно установить в систему девелоперские библиотеки. Для Tensorflow нужно установить не так много библиотек, но тем не менее я рекомендую ставить с запасом. Например список библиотек для установки можно взять из следующей статьи:

Сборка OpenCV с поддержкой NVIDIA GPU


Там есть списки библиотек для Ubuntu и CentOS.

Устанавливаем необходимые пакеты для Python:

pip install numpy wheel
pip install keras_preprocessing --no-deps

Чтобы перейти к следующему этапу сборки нам снова понадобится вот эта таблица. По этой таблице нужно определить версию Tensorflow в зависимости от, установлненых CUDA и cuDNN. Зная версию Tensorflow находится версия сборщика Bazel (утилита для сборки проекта из исходников).
Скачиваем Bazel нужной версии:

https://github.com/bazelbuild/bazel/releases/download/4.0.0/bazel-4.0.0-installer-linux-x86_64.sh

Устанавливаем Bazel:

bazel-4.0.0-installer-linux-x86_64.sh --prefix=~/system

Внимание, если у вас Linux CentOS и установлена утилита ccache, то рекомендую убрать ее (потом можно поставить опять).
Далее клонируем репо с исхожниками Tensorflow и выбираем нужную версию:

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git branch -a
git checkout r2.4

Запускаем конфигуратор сборки. Скрипт конфигурации в интерактивном режиме спросит о путях к компилятору и библиотекам, а так же спросит о том какие компоненты включить или исключить из сборки:

./configure

Запускаем компиляцию и сборку пакета Tensorflow из исходников:

export TMP=/tmp
bazel build --config=cuda //tensorflow/tools/pip_package:build_pip_package --config=noaws --config=nogcp --config=nohdfs

Если компьютер не очень мощный то процесс сборки занимает несколько часов.

bazel-bin/tensorflow/tools/pip_package/build_pip_package /home/voran/system-tensorflow/tmp

Собираем Python пакет и тут же устанавливаем его:

pip install tensorflow-2.4.1-cp36-cp36m-linux_x86_64.whl

Пример

Свежеустановленный Tensorflow необходимо проверить на правильность установки. Для этого скачиваем пример для тестирования. Распаковываем и запускаем:

python img.py

Утилита nvidia-smi показывает, что запущенные Python процесс работает на видеокарте:

По output в консоли видно, что Tensorflow определил видеокарту и загрузил необходимые библиотеки.

Successfully opened dynamic library libcudart.so.11.0

I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties:
pciBusID: 0000:04:00.0 name: GeForce 840M computeCapability: 5.0

Successfully opened dynamic library libcudnn.so.8

Почитать еще: