Глубокая (!) Картина

Если вы планируете начать работу с глубоким обучением или уже начали и уже используете Python, вы знаете живой набор фреймворков для использования. Tensorflow, Theano, Keras (ну, Keras в любом случае использует Tensorflow или Theano в бэкэнде), Pytorch, Caffe и т. Д. Я не собираюсь здесь говорить о том, какой фреймворк выбрать. Мое исследование пока ограничено только Tensorflow и Keras, и, как и вы, я тоже новичок.

Итак, что побудило меня написать этот пост и о чем я действительно хочу поговорить? Что ж, давайте перейдем к делу и будем на месте. Вы должны знать, что простые алгоритмы глубокого обучения с небольшими наборами данных легко обучать и оценивать на компьютерах с компьютерами среднего уровня. В противном случае вы столкнетесь с проблемами с нехваткой памяти, болезненно долгим временем обучения, признайте это, ваш процессор был создан для игры в Minecraft, а не для обучения глубокой нейронной сети, которая может определить, является ли животное на картинке лабрадором или Сибирский хаски. Вот почему люди склонны выбирать высокопроизводительные процессоры для обучения больших и сложных сетей. Скорость имеет значение. GPU сделали еще один шаг вперед. Их архитектура позволяет использовать огромные вычислительные мощности для параллельной обработки, что ускоряет и упрощает обучение алгоритмов глубокого обучения. Таким образом, в сочетании с высокопроизводительным потребительским процессором и хорошим графическим процессором вы можете убить медлительность и вернуть себе человеческое превосходство над компьютером.

Нет Зеленого Нет вечеринки!

Однако кое-что еще есть. То есть - если вы преданный поклонник красной команды, я имею в виду поклонник графических процессоров Radeon, вам придется очень нелегко. Все фреймворки "из коробки" поддерживают графические процессоры Nvidia. Но почему? Очевидный ответ - годы работы CUDA и Nvidia над созданием cuDNN для своих графических процессоров. Результатом является бесшовная интеграция фреймворков глубокого обучения и вычислений на графическом процессоре.

Так как же начать использовать магию с поддержкой графического процессора на вашем компьютере под управлением Linux? Что ж, на самом деле это довольно просто. В зависимости от того, какой дистрибутив вы используете (на основе Debian - Ubuntu, Linux Mint и т. Д., На основе Arch - Arch, Manjaro и т. Д.), Уже существуют решения, созданные сообществом, которые вы можете просто загрузить и установить. Простые трюки с командной строкой. Еще что установить и как установить? Что ж, тогда давайте посмотрим!

Что вам понадобится

  • Графический процессор Nvidia (конечно, а где еще вы получите ядра CUDA?)
  • Дистрибутив Linux (поскольку я говорю исключительно о дистрибутивах Linux)
  • интернет-соединение
  • Anaconda для Python 3 (для Python2 все будет так же)
  • Вы также можете использовать Python, поставляемый с вашей системой. Создайте венв, чтобы избежать хлопот.
  • Терпение, оно тебе понадобится.

Начиная

Теперь я предполагаю, что вы уже загрузили и установили Anaconda или планируете использовать Python, поставляемый вашей системой. Как бы то ни было, давайте сначала приступим к настройке среды.

Однако примечание: для Deep Learning, Machine Learning, Data Science bla bla использование Anaconda всегда полезно.

Настройка Python

Перейдите на https://www.anaconda.com/download/#linux и загрузите версию Python3 или Python2 (в зависимости от того, что вы предпочитаете использовать). Для Linux установщик представляет собой сценарий bash, который необходимо запускать из командной строки. Итак, давайте начнем загрузку и дадим ей закончиться. Затем откройте папку загрузки и переименуйте файл в anaconda.sh - это упростит его запуск из командной строки (или, если вы ниндзя командной строки, как мой друг Асифул Лоту Нобель, оставьте имя как есть является). Теперь откройте терминал для той же папки, сделайте скрипт исполняемым и запустите его, используя следующие команды.

sudo chmod +x anaconda.sh
./anaconda.sh

Теперь вы знаете, что делать, прокрутите вниз, согласитесь с EULA, установите и будьте осторожны с последней строкой. Установщик просит вас добавить путь к установке anaconda к переменным пути. Не делайте этого в Linux (это может нарушить основные функции системы). Скажите установщику, что вы этого не хотите. Вы закончили установку. Пришло время приступить к делу.

Во-первых, добавьте анаконду в путь более безопасным способом. Вместо добавления в начало добавьте его в путь. Это гарантирует, что когда система захочет запустить процессы, зависящие от python, она получит системный python. Откройте ваш .bashrc, используя предпочитаемый вами текстовый редактор. Nano, Vi, VS Code, что бы это ни было (я предпочитаю VS Code). После открытия добавьте следующую строку в конец файла. Перед этим скопируйте путь, по которому были установлены двоичные файлы anacondas. Обычно он устанавливается в домашнюю папку вашего пользователя. Таким образом, путь должен быть чем-то вроде / home / anaconda / bin

export PATH=$PATH:/path_to_anaconda_bin_folder

Сохраните файл. Тогда сделайте следующее.

source .bashrc

Убедитесь, что ваша оболочка bash обновлена ​​только что внесенными вами изменениями в .bashrc. Однако, поскольку система всегда будет вызываться первой, как нам вызвать anaconda python? Давайте создадим для этого псевдоним или другое имя. Назовем анаконду питон conpy. Итак, снова откройте .bashrc и добавьте эту строку в конец.

alias conpy=/path_to_anaconda_bin_folder/python

Снова сохраните файл и обновите оболочку, используя исходный код. И мы закончили с начальной частью. Теперь я предлагаю создать conda env (anaconda) или virtualenv (для системного python).

conda create -n deep_learning python=3.6
# or, for system python
virtualenv deep_learning

Теперь активируйте один из них.

# for anaconda
source activate deep_learning
# for system python
source deep_learning/bin/activate

Теперь мы можем перейти к следующей «сложной» части - установке библиотек CUDA.

Установка CUDA и cuDNN

На момент написания последней версии CUDA Toolkit и cuDNN были 9 и 7 соответственно. Однако Tensorflow и некоторые другие фреймворки поддерживают CUDA 8 и cuDNN 6. Они также в некоторой степени обратно совместимы. Лучший способ установить эти инструменты - загрузить их с веб-сайта Nvidia:

Https://developer.nvidia.com/cuda-downloads. Зайдите туда, зарегистрируйтесь, а затем загрузите CUDA Toolkit 8.0 и cuDNN 6 для CUDA 8. Не расстраивайтесь и загрузите CUDA 9.

После загрузки распакуйте и войдите в извлеченную папку. Там вы найдете папку cuda. Скопируйте его в каталог / opt / cuda. Сделайте то же самое для cuDNN. Скопируйте его в / opt / cudnn.

Есть и альтернативный способ. Репозитории вашего дистрибутива могут содержать программы установки. В этом случае вам просто нужно выбрать правильную версию. Я использую Манджаро. И CUDA 8 Toolkit доступен в AUR. (Однако версия cuDNN в AUR выглядит немного запутанной, поскольку она также просит вас установить CUDA 9 и терпит неудачу, поскольку у вас установлен CUDA 8, странно!). Поэтому мне пришлось загрузить cuDNN вручную.

После копирования пора установить фреймворк и протестировать его! Итак, давайте перейдем к созданному нами ранее окружению.

Тестирование зеленого… ..

Для этого я буду использовать Tensorflow. Если один из них работает, все тоже должны работать! Установите пакет:

pip install tensorflow-gpu

Дайте ему установить. Затем попробуйте следующую команду.

python -c "import tensorflow"

Теперь это может или не может вызывать ошибку, говоря, что тензорному потоку не удалось найти библиотеку CUDA. В большинстве случаев это проблема, связанная с файлом libcudnn.so.6. Нам нужно создать символическую ссылку, чтобы решить эту проблему.

ln -s /opt/cuda/lib64/libcudnn.so.6 /path_to_anaconda/envs/deep_learning/lib/libcudnn.so.6
# same for system python venv as well, just get to site-packages folder of that env

Теперь попробуйте снова импортировать тензорный поток. На этот раз все сработает.

Как насчет небольшой программы?

Запустите его, и вы должны увидеть следующий результат.

2017-11-17 20:46:51.269600: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2017-11-17 20:46:51.476816: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.835
pciBusID: 0000:01:00.0
totalMemory: 7.92GiB freeMemory: 7.37GiB
2017-11-17 20:46:51.476845: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
9
2017-11-17 20:46:51.519231: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
9

Итак, мы закончили!

Итак, готово! Теперь вы знаете, как начать записывать свой графический процессор при большой нагрузке. Поздравляю.