Досвід установки нейромережі на домашній пк
"Увага! Цей мануал в даний момент може бути частково неактуальним, якщо використовувати найсвіжіші версії дистрибутивів Linux або програмного забезпечення, версії яких відрізняються від тих, що вказані в пості."
Скажу відразу, я не експерт, а червоноокий-аматор (дисклеймер) і у мене стоїть для деяких домашніх справ поряд з Win10 в режимі dualboot LinuxMint, що полюбився 18-ї версії, яка заснована на Ubuntu 16.04, що недавно вийшла. Використовуючи по суті 16.04, я зіткнувся з низкою труднощів. Так що цей пост, крім перекладу мануалу, буде доповнено фіксами для 16.04 систем у хронологічному порядку.
Усі посилання, які наведені в пості - або посилання на вирішення тих чи інших проблем, або посилання на офіційні джерела використовуваних скриптів та продуктів.
Не сперечаюся, можу десь митити. Якщо так - виправте, тільки скажу спасибі.
Отже, із заліза є:
* Linux Mint 18 x64 (на основі Ubuntu 16.04).

Щоб не набирати пароль від облікового запису після використання команди sudo в терміналі - вніс свого користувача в конфіг (/etc/sudoers) це:
epicmorg ALL=(ALL) NOPASSWD:ALL
Деepicmorg- ім'я мого облікового запису. У вас – ваше. Це далеко не найбезпечніше рішення, не впевнені - не робіть це.
Тепер, відкривши інструкцію на гітхабі, слідуємо крокам, як встановити neural-style на Ubuntu.
Повна інструкція на англ - тут.
Відкриваємо термінал від свого користувача та пишемо:
(перехід до свого домашнього каталогу)
(скачування скрипта install-deps та виконання його в терміналі bash для встановлення залежностей, які необхідні при установці torch)
У мене при установці install-deps не знайшовся libqt4-core та libqt4-guiскрипт благополучно виплюнув помилку. Погуглив, знайшов відповідь на ubuntu, що на 16.04 вони іменуються libqtcore4 і libqtgui4, які поставив окремо.
sudo apt-get install libqtcore4 libqtgui4
Після цього, install-deps скрипт ставився без помилок.
До речі, якщо у вас не вартоgit- поставте його командою, а заразом іcmake:
sudo apt-get install git cmake
Налаштовувати в даному випадку не треба, піде з коробки.
Далі нас просять схилювати репозиторій torch з гітхабу:
Після чого переходимо до схиляної папки з torch і починаємо компіляцію
При компіліації (виконання install.sh) у мене вивалювалася помилка, що не знайдено readline.h. Відповідь знайшла на stackoverflow - виявляється, бракує пакетуlibreadline-dev.
sudo apt-get install libreadline-dev
Після запуску install.sh ще раз – компіляція пройшла успішно.
Перший скрипт встановлював всі залежності для torch та це може зайняти у вас деякий час. Другий сценарій фактично встановлює Lua і сам torch, а також редагує файл.bashrcтак, щоб torch додається до змінної $PATH.
Далі ми маємо оновити змінні оточення командою:

Для перевірки встановився чи 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
Крок 3. Встановлення самоїNeural-Style.
Тепер нам треба скопіювати репозиторій із гітхабу самої нейромережі. Виконуємо:
(перехід до свого домашнього каталогу)
(клонування репозиторію з neural-style)
(перехід у скачану папку)
Далі нам необхідно завантажити моделі попередньо навченої нейронної мережі:

Тепер у нас є можливість запускати neural-style у режимі процесора за допомогою команди:
th neural_style.lua -gpu -1 -print_iter 1
(В аргументі -gpu значення -1 означає, що gpu не використовується. А значення від 0 і вище - нумерація встановлених gpu, але це пізніше).
Якщо все працює правильно, ви повинні побачити висновок на кшталт цього:
Крок 4. Налаштування CUDA.
Як правильно помітив тов. @Landgraf132 , можна було обійтися установкою пакету nvidia-cuda-toolkit:
sudo apt-get install nvidia-cuda-toolkit
Але я цього не знав, тож пішов складнішим шляхом. Зокрема, з сайту nvidia завантажив run-файл для 15.04 (важить близько гігабайта!) в домашню директорію.
Далі в терміналі запускаємо установку:
(перехід до свого домашнього каталогу)
sudo sh cuda_7.5.18_linux.run
(запуск установника в консольному режимі)
Файл містить драйвери для дисплея, CUDA toolkit і cuda samples (перимери). На всі питання щодо шляхів установки - відповів yes, окрім драйвера для дисплея (вже стоїть) та CUDA sample, тому що вони нам не знадобляться.

(Як показала практика, нам потрібенgcc версії 4.8(який у мене вже стояв у системі), тому що версія CUDA 7.5 сумісна лише з ним)
Після встановлення у мануалі радять перезавантажитись. Після успішного ребута, перевірив, що все добре за допомогою команди в терміналі:

Крок 5. Установка CUDA backend для torch
Все просто. У терміналі виконуємо:
luarocks install cutorch
luarocks install cunn
Для перевірки, чи правильно встановилося виконуємо:
th -e "require 'cutorch'; require 'cunn'; print(cutorch)"
Випало в консоль щось схоже як в інструкції:

Тепер можна запускати нейромережу в режимі GPU:
(перейшли до каталогу з мережею)
th neural_style.lua -gpu 0 -print_iter 1

Знову ж таки - виведення в консоль як в інструкції.
Крок 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. (Без цього не запускалося). Дізнатися шлях можна зробивши:
У мене це було:/home/epicmorg/torch/install/lib
sudo cp cuda/lib64/libcudnn* /home/epicmorg/torch/install/lib
Після потрібно поставити плагін cuDNN для torch:
luarocks install cudnn
Тепер нейромережу можна використовувати разом із cuDNN:
/neural-style th neural_style.lua -gpu 0 -backend cudnn
І так, cuDNN доступна лише для режиму GPU.
Тепер можна балуватися нейромережею.
Крок 7. Перевірка на ділі.
Скрипт для пробного запуску:
th neural_style.lua -gpu 0 -backend cudnn -style_image -content_image
Підставляти місце 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
Прорахунок тривав близько 3-4 хвилин. Результат:

Розбирати параметри запуску даної нейромережі наступного разу.