Опыт установки нейросети на домашний пк

Привет всем, спасибо что подписались. После прочтения поста и комментария  - интерес взыграл вверх и было решено попробовать поднять у себя на домашнем ПК одну из нейросетей по просьбам нескольких пикабушников, и, заодно, сделать перевод инструкции по отдельной просьбе @kitmouse. Мною выбрана эта нейросеть, так как в комментариях речь шла в т.ч. про неё , да и есть в наличии видеокарта с поддержкой CUDA.


"Внимание! Данный мануал в текущий момент может быть частично неактуален, если использовать самые свежие версии Дистрибутивов Linux или программного обеспечения, версии которых отличаются от тех, что указаны в посте."


Скажу сразу, я не эксперт, а красноглаз-любитель (дисклеймер) и у меня стоит для некоторых домашних дел рядом с Win10 в режиме dualboot полюбившийся LinuxMint 18-й версии, которая основана на недавно вышедшей Ubuntu 16.04. Используя, по сути, 16.04, я столкнулся с рядом трудностей. Так что, данный пост, кроме перевода мануала, будет дополнен фиксами для 16.04 систем в хронологическом порядке.


Все ссылки, которые приведены в посте - либо ссылки на решения тех или иных проблем, либо ссылки на официальные источники используемых скриптов и продуктов.


Не спорю, могу где-то костылять. Если так - поправьте, только скажу спасибо.


Итак, из железа имеется:

* AMD FX-8350

* 32Gb DDR3

* Nvidia GTX 980

* Linux Mint 18 x64 (на основе Ubuntu 16.04)...

Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Чтобы не набирать пароль от учётки после использования команды sudo в терминале - внес своего пользователя в конфиг (/etc/sudoers) это:


epicmorg ALL=(ALL) NOPASSWD:ALL

Где epicmorg - имя моей учетной записи. У вас - ваше. Это далеко не самое безопасное решение, не уверены - не делайте это.


Теперь, открыв инструкцию на гитхабе следуем шагам, как установить neural-style на Ubuntu.


Шаг 1. Установка torch7

Полная инструкция на англ - тут.


Открываем терминал от своего пользователя и пишем:

cd ~/

(переход в свой домашний каталог)

curl -s https://raw.githubusercontent.com/torch/ezinstall/master/ins... | bash

(скачивание скрипта install-deps и выполнение его в терминале bash для установки зависимостей, которые необходимы при установке torch)


У меня при установке install-deps не нашелся libqt4-core и libqt4-gui и скрипт благополучно выплюнул ошибку. Погуглив, нашел ответ на as ubuntu, что на 16.04 они именуются libqtcore4 и libqtgui4, которые поставил отдельно.

sudo apt-get install libqtcore4 libqtgui4

После чего, install-deps скрипт поставился без ошибок.


Кстати, если у вас не стоит git - поставьте его командой, а заодно и cmake:

sudo apt-get install git cmake

Настраивать в данном случае не надо, пойдет "из коробки".


Дальше нас как раз просят склонировать репозиторий torch с гитхаба:

git clone https://github.com/torch/distro.git ~/torch --recursive

После чего переходим в склонированную папку с torch и начинаем компиляцию

cd ~/torch; ./install.sh

При компилияции (выполнение install.sh) у меня вываливалась ошибка, что не найден readline.h. Ответ нашел на stackoverflow - оказывается, не хватает пакета libreadline-dev.

sudo apt-get install  libreadline-dev

После запуска install.sh еще раз - компиляция прошла успешно.


Первый скрипт устанавливал все зависимости для torch и это может занять у вас некоторое время. Второй сценарий фактически устанавливает Lua и сам torch, а также редактирует файл .bashrc так, чтобы torch добавляется в переменную $PATH.


Дальше мы должны обновить переменные окружения командой:

source ~/.bashrc
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Для проверки установился ли torch выполняю комману th в консоле.

Для выхода - пишу exit, жму enter и подтверждаю выход клавишей y.


Шаг 2. Установка loadcaffe

Loadcaffe - это модуль, загружающий модели Caffe в Torch. Зависит он от гугловского Protocol Buffer library. Поэтому,  сначала надо установить их:
sudo apt-get install libprotobuf-dev protobuf-compiler

После - можно спокойно установить loadcaffe:

luarocks install loadcaffe
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Шаг 3. Установка самой neural-style.

Теперь нам надо скопировать репозиторий с гитхаба самой нейросети. Выполняем:

cd ~/

(переход в свой домашний каталог)

git clone clone https://github.com/jcjohnson/neural-style.git

(клонирование репозитория с neural-style)

cd neural-style

(переход в скачанную папку)


Далее нам необходимо загрузить модели предварительно обученной нейронной сети:

sh models/download_models.sh
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Теперь у нас есть возможность запускать neural-style в режиме процессора с помощью команды:

th neural_style.lua -gpu -1 -print_iter 1

(В аргументе -gpu значение -1 означает, что gpu не используется. А значения от 0 и выше - нумерация установленных gpu, но про это позже).


Если все работает правильно, вы должны увидеть вывод вроде этого:

Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Шаг 4. Настройка CUDA.

Если у вас есть видеокарта от NVIDIA с поддержкой CUDA, то вы можете ускорить нейронную сеть.


Как верно заметил тов. @Landgraf132, можно было обойтись установкой пакета nvidia-cuda-toolkit:

sudo apt-get install nvidia-cuda-toolkit

Но я этого не знал, так что, пошел более сложным путем. А именно, с сайта nvidia скачаел run-файл для 15.04 (весит около гигабайта!) в домашнюю директорию.


Далее в терминале запускаем установку:

cd ~/

(переход в свой домашний каталог)

sudo sh cuda_7.5.18_linux.run

(запуск установщика в консольном режиме)

В файле содержатся драйверы для дисплея, CUDA toolkit и cuda samples (перимеры). На все вопросы касательно путей установки - ответил yes, кроме драйвера для дисплея (уже стоит) и CUDA sample, потому что они нам не пригодятся.

Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

(Как показала практика,  нам нужен gcc версии 4.8 (который у меня уже стоял в системе), так как версия CUDA 7.5 совместима только с ним)


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

nvidia-smi
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Шаг 5. Установка CUDA backend для torch

Все просто. В терминале выполняем:

luarocks install cutorch

потом

luarocks install cunn

Для проверки, правильно ли установилось выполняем:

th -e "require 'cutorch'; require 'cunn'; print(cutorch)"

Выпало в консоль что-то похожее как в инструкции:

Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Теперь можно запускать нейросеть в режиме GPU:

cd ~/neural-style

(перешли в каталог с сетью)

th neural_style.lua -gpu 0 -print_iter 1
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

Опять же - вывод в консоль как в инструкции.


Шаг 6. Дополнительная установка cuDNN.

Инструкция гласит:

cuDNN библиотека от NVIDIA, которая эффективно реализует многие из операций (например, свертка и объединения), которые обычно используются в глубоком обучении.

После регистрации в качестве разработчика NVIDIA, скачал необходимый архив cudnn-7.5-linux-x64-v5.1-rc.tgz в домашнюю директорию.


Распаковку и установку проводил так:

tar -xzvf cudnn-7.5-linux-x64-v5.1-rc.tgz

Копирование библиотек:

sudo cp cuda/lib64/libcudnn* /usr/local/cuda-7.*/lib64/
sudo cp cuda/include/cudnn.h /usr/local/cuda-7.*/include/

Так же мне понадобилось скопировать файлы libcudnn* в путь, который прописан у меня в переменную LD_LIBRARY_PATH. (Без этого не запускалось). Узнать путь можно сделав:

echo $LD_LIBRARY_PATH

У меня это было: /home/epicmorg/torch/install/lib

Скопировал:

sudo cp cuda/lib64/libcudnn* /home/epicmorg/torch/install/lib

После надо поставить плагин cuDNN для torch:

luarocks install cudnn

Теперь нейросеть можно использовать вместе с cuDNN:

cd ~/neural-style
th neural_style.lua -gpu 0 -backend cudnn

И да, cuDNN доступна только для режима GPU.


Теперь можно баловаться нейросетью.


Шаг 7.  Проверка на деле.

Скрипт для пробного запуска:

th neural_style.lua -gpu 0 -backend cudnn -style_image <image1.jpg> -content_image <image2.jpg>

Подставлять место image1 стиль, а image2 - фото. пути к фоткам можно указывать как полные, так и относительные.


Я взял из примера на гитхабе brad_pitt.jpg и golden_gate_starry.png.


Получилось так:

th neural_style.lua -gpu 0 -backend cudnn -style_image golden_gate_starry.png -content_image brad_pitt.jpg

Исходники:

golden_gate_starry.png

brad_pitt.jpg

Просчет шел около 3-4 минут. Результат:

Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu
Опыт установки нейросети на домашний пк Нейронные сети, Linux, Текст, Nvidia, Cuda, Lua, Длиннопост, Ubuntu

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

5
Автор поста оценил этот комментарий

В шаге 1 может не работать ссылка на мануал отдельный.

Вот она: http://torch.ch/docs/

раскрыть ветку
2
Автор поста оценил этот комментарий

На AMD видеокарте взойдет без CUDA?

раскрыть ветку
2
DELETED
Автор поста оценил этот комментарий

Продолжай. Подписался

1
Автор поста оценил этот комментарий

@moderator, ночи доброй. смотрю, иногда все же пользователи заходят в пост и даже что-то делают по мануалу. но он неактуален частично. можете в первый абзац вписать жирнотой предупреждение об этом?


Типа "Внимание! Данный мануал в текущий момент может быть частично неактуален, если использовать самые свежие версии Дистрибутивов Linux или программного обеспечения, версии которых отличаются от тех, что указаны в посте."

1
Автор поста оценил этот комментарий

Привет, продолжаю мучить линукс, уже на основной машине с geforce 780 на борту. И вот новая проблема: ставлю все как в инструкции, но cuda то ли не поставилась, то ли с ней что-то не так. В общем, вот скриншот, что-то явно не то.


А вот что пишет при установке cuda_7.5.18_linux.run

Driver: Not Selected

Toolkit: Installation Failed. Using unsupported Compiler.

Samples: Not Selected

Иллюстрация к комментарию
раскрыть ветку