вНовости программирования

Что делать, если вы хотите изучать ИИ, но не шарите в математике? Часть третья. Собираем и настраиваем систему

Рассказывает Даниель Джеффрис 


Это третья статья из цикла, посвящённого изучению ИИ и всего, что с ним связано. В первой части мы обсуждали теорию, во второй — готовились к решению практических заданий. Сегодня же мы займёмся сборкой идеального компьютера для машинного обучения и настройкой системы. 

Итак, займёмся подбором комплектующих. Я предложу три варианта: бюджетный, средний и навороченный.

Но сперва — экспресс-вариант

Если вы не хотите собирать новый компьютер, можно просто обновить старый! Купите видеокарту Titan X или GTX 1080 (а недавно Nvidia анонсировала и более мощную GTX 1080 Ti) и установите VMware Workstation или любую другую виртуальную машину с поддержкой видеоускорителей. В качестве альтернативы можно поставить основной системой Linux, а Windows установить на виртуальную машину — таким образом вы получите максимальную производительность для машинного обучения.

Потом установите необходимые фреймворки, о которых мы поговорим во втором разделе этой статьи, и вы получите готовую систему, причём весьма дешёвую.

Подбор комплектующих

Я буду помечать дорогие и бюджетные варианты следующим образом:

  • ДнП (Деньги — не проблема) = наилучший вариант;
  • ЗПБ (Зачем платить больше?) = оптимальный вариант;
  • ДиС (Дёшево и сердито) = бюджетный вариант.

Видеокарта — всему голова

Центральный процессор — больше не самая важная часть компьютера. Для навороченных игровых систем нужны мощные процессоры, но не для машинного обучения — там роль Intel исполняет Nvidia.

Хотя карты AMD и зарекомендовали себя в майнинге криптовалюты, до ИИ они ещё не доросли. Скоро это изменится, но пока Nvidia на коне. Но не стоит сбрасывать Intel со счетов. Она приобрела компанию Nervana Systems и собирается начать выпускать специализированные чипы для машинного обучения уже в этом году.

Начнём с ДнП. Безоговорчный лидер — это Titan X. Ему просто нет равных.

В ней установлено 3584 ядер CUDA на частоте 1531 МГц и 12 ГБ видеопамяти GDDR5X с пропускной способностью 10 Гб/с.

Для машинного обучения важно количество ядер и объём памяти. По сути, алгоритмы машинного обучения — это всего лишь куча линейной алгебры. Представьте огромную таблицу Excel. Простой 4- или 8-ядерный процессор Intel просто не справится с таким объёмом данных.

Перемещение данных из памяти и в неё очень сильно ограничивает вычислительный процесс, поэтому чем больше памяти есть на карте, тем лучше. Поэтому Titan X и является лучшей.

Жаль, но на официальном сайте можно купить лишь 2 карты. Но для нас деньги — не проблема, поэтому ещё две мы возьмём где-нибудь ещё. Да, это 4-way SLI! Обойдётся он вам примерно в 360 тысяч (на момент написания статьи — прим. перев.), но это львиная доля затрат.

Любые бенчмарки предупредят вас, что SLI из более чем 2 карт не даст значительного прироста, но нам же не в игрушки играть (ладно, будем честны, не только в игрушки играть)! Для работы с ИИ нужно использовать максимально возможное количество видеокарт, поэтому четыре — это вовсе не предел. Заметьте, что вам не нужен мостик для SLI, если вы не планируете использовать систему для игр. Максимум, что будет связано с графикой — это построение графиков в matplotlib.

Теперь поговорим о ЗПБ. Вам подойдёт карта GeForce GTX 1080 Founders Edition. В ней всего лишь 2560 ядер CUDA, гораздо меньше, чем в Titan X, но она и стоит в два раза дешевле, 46 тысяч рублей. Памяти в ней тоже меньше, 8 ГБ вместо 12. Ещё один неплохой ДиС-вариант — это GeForce GTX 1070. Она может похвастаться 1920 ядрами CUDA и приемлемой ценой — 32 тысячи рублей. Таким образом, SLI из 4 карт обойдётся вам без малого в 130 тысяч рублей.

Конечно, можно обойтись двумя или тремя картами. По-хорошему, вам хватит и одной.

Итак, давайте рассмотрим оптимальные варианты:

  • 3 x Titan X = 10 752 ядер CUDA, 36 ГБ видеопамяти = 270 тыс. руб.
  • 2 x Titan X = 7167 ядер CUDA, 24 ГБ видеопамяти = 180 тыс. руб.
  • 3 x GTX 1080 = 7680 ядер CUDA, 24 ГБ видеопамяти = 138 тыс. руб.
  • 2 x GTX 1080 = 5120 ядер CUDA, 16 ГБ видеопамяти = 92 тыс. руб.
  • 3 x GTX 1070 = 5760 ядер CUDA, 24 ГБ видеопамяти = 96 тыс. руб.
  • 2 x GTX 1070 = 3840 ядер CUDA, 16 ГБ видеопамяти = 62 тыс. руб.

Оптимальный вариант — три GTX 1080. В два раза дешевле, чем «титаны» и всего на 3072 ядра меньше. Для своей системы я выбрал именно его.

Наконец, ДиС-вариант: GTX 1060. 6 ГБ видеопамяти и 1280 ядер CUDA за 17 тысяч рублей — это лучший бюджетный вариант.

Хранилище данных

Вам понадобится SSD, особенно если вы будете работать со свёрточными нейронными сетями и обрабатывать много изображений. Samsung 850 EVO ёмкостью 1 ТБ — это ДнП-вариант. Кроме того, за последний год цены на SSD значительно снизились, поэтому такая покупка не сильно ударит по кошельку. На момент написания статьи эта модель стоит порядка 20 тысяч рублей.

ЗПБ-вариант — это SSD той же модели, но на 250 ГБ. Стоит он примерно 6 тысяч.

Вам также понадобится HDD для хранения наборов данных. Они могут быть очень большими, поэтому стоит взять диск ёмкостью не меньше 4 ТБ, производитель не так уж и важен. Стоить он будет порядка 10 тысяч.

В качестве ДиС-альтернативы можно взять SSD от SanDisk на 240 ГБ за 4 тысячи рублей и HDD на 1 ТБ, но я считаю, что лишней памяти не бывает.

Оперативная память

Я советую брать не менее 16 ГБ оперативной памяти типа DDR4. Многие говорят, что оперативной памяти должно быть в 2 раза больше, чем видеопамяти, но 16 ГБ вам должно хватить. Я бы посоветовал модель Corsair Vengeance DDR4–3000, набор из двух планок по 8 ГБ будет стоить примерно 10 тысяч рублей.

Материнская плата

Поскольку мы хотим поместить в наш корпус 4 видеокарты, наш выбор очень невелик. Лучшим вариантом будет материнская плата MSI Extreme Gaming X99A SLI Plus. Также подойдёт ASUS X99 Deluxe II.

Если же вы используете меньше 4 карт, вариантов становится гораздо больше. В материнских платах главное — стабильность. В этом я убедился, когда собирал системы для майнинга криптовалюты. Gigabyte разработала отличную линейку надёжных материнских плат. Модель X99 Ultra Gaming оптимальна и стоит порядка 20 тысяч.

Корпус

Cooler Master Cosmos II — это ультимативный корпус форм-фактора EATX. Его стильный внешний вид отлично дополнит вашу систему.

Тем, кому нужен корпус поменьше, подойдёт Cooler Master Maker 5T.

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

Процессор

Вашей машине для машинного обучения не нужен мощный процессор. Большинство приложений многопоточны лишь на графическом процессоре, поэтому разоряться на процессор не стоит.

Поэтому вам стоит купить процессор с наибольшей тактовой частотой, т.е. i7-6700K с частотой 4 ГГц. Да, может показаться, что это перебор, но в последнее время цена на него только падает, так что почему бы и нет?

ЗПБ-альтернативы здесь нет.  i5 с частотой 3,5 ГГц стоит немногим дешевле, так какая разница?

ДиС-вариант здесь — двухядерный i3-6100 c частотой 3.7 ГГц, стоит он порядка 7 тысяч.

Блок питания

Блок питания EVGA Modular 1600 Supernova G2 — это лучший вариант для сборки с 4 видеокартами. Он обойдётся вам где-то в 18 тысяч.

Titan X потребляет порядка 250 ватт — вот уже тысяча, и на всё остальное остаётся не так уж и много, а БП лучше брать с запасом.

Если вы используете меньше видеокарт, вам подойдёт модель на 1300 ВтДиС-альтернатива — модель на 750 Вт.

Настройка системы

Теперь, когда мы закончили с железом, займёмся настройкой софта.

У вас есть три варианта:

  • Docker-контейнер;
  • Виртуальная машина;
  • Чистая установка.

Docker

Если вы хотите пойти по этому пути, то вам стоит начать с официального проекта Nvidia-Docker. Однако вам всё равно придётся ставить кучу фреймворков и библиотек поверх этого образа.

Конечно, вы можете поставить и контейнер со всем необходимым для машинного обучения, например, такой. К сожалению, в нём есть некоторые пока не решённые проблемы, да и на Dockerhub он не поместится, поэтому времени на ручную настройку вам придётся потратить немало.

Виртуальная машина

Как я и сказал в начале статьи, вы можете просто обновить железо вашего игрового компьютера, поставить VMware Workstation Pro, поддерживающую работу с графическими процессорами, и начать работать. Это самый дешёвый вариант, да и весьма удобный в использовании.

Чистая установка

В результате я выбрал именно этот вариант. Да, немного олдскульно, но поскольку я давно работаю сисадмином, то решил сделать всё вручную — таким образом можно максимально контролировать систему.

Сперва обсудим несколько деталей, сваязанных с ПО. Вы поймёте, что большая часть вычислений производится при помощи Python. В дальнейшем это может поменяться, но пока что это основной язык. Популярны также R и Scala, их мы тоже рассмотрим.

Вот список всех основных пакетов, которые мы установим:

Языки

  • Python 2.x;
  • Anaconda (и Python 3.6) — высокопроизводительный дистрибутив Python, содержащий более 100 популярных пакетов Python, R и Scala;
  • R — язык и среда для статистических расчётов;
  • Scala — язык, похожий на Java, но гораздо более производительный.

Драйверы и API

Приложения-помощники

  • Jupyter — отличное веб-приложение, которое позволит делиться документацией и кодом.

Фреймворки / библиотеки

  • TensorFlow — открытый фреймворк Google для машинного обучения, на котором, например, работает Google Translate;
  • Theano — популярный фреймворк для машинного обучения;
  • Caffe — ещё один фреймворк;
  • Torch — фреймворк для научных вычислений, использующий графические процессоры;
  • MXNET — масштабируемая система для машинного обучения, созданная Amazon и несколькими университетами.

Высокоуровневые библиотеки

  • Keras — высокоуровневая библиотека для работы с нейронными сетями, запускающаяся поверх TensorFlow или Theano;
  • Lasagne — лёгкая библиотека для создания и обучения нейронных сетей.

Python-библиотеки

Написано огромное количество библиотек для разного рода научной деятельности, мы поставим самые нужные:

  • Pip = менеджер пакетов для Python;
  • Pandas = высокопроизводительная библиотека для анализа данных;
  • Scikit-learn = популярная мощная библиотека для машинного обучения;
  • NumPy = численный Python;
  • Matplotlib = библиотека для визуализации;
  • Scipy = математические и научные расчёты;
  • IPython = интерактивный Python;
  • Scrappy = фреймворк для веб-скрапинга;
  • NLTK = набор инструментов для работы с естественными языками;
  • Pattern = библиотека для веб-майнинга;
  • Seaborn = статистические визуализации;
  • OpenCV = библиотека для работы с компьютерным зрением;
  • Rpy2 = интерфейс для R;
  • Py-graphviz = статистические графики;
  • OpenBLAS = линейная алгебра.

Настройка Linux-системы

Я рекомендую поставить последнюю версию Ubuntu LTS (16.04 на момент написания статьи). Запишите её на флешку при помощи программы Rufus и установите в UEFI-режиме.

Первый запуск

Запустив систему, вы увидите чёрный экран. Некоторые из драйверов просто не обновлены. Чтобы это исправить, сделайте следующее.

Когда компьютер загрузится, откройте терминал:

Ctrl + Alt + F1

Скачайте последние драйвера и перезагрузите систему:

  • В терминале залогиньтесь как суперпользователь;
  • Выполните sudo apt-get purge nvidia-*;
  • Выполните sudo add-apt-repository ppa:graphics-drivers/ppa и sudo apt-get update;
  • Выполните sudo apt-get install nvidia-375;
  • После перезагрузки проблемы с графикой должны исчезнуть.

Обновление системы

Откройте терминал и введите следующее:

sudo apt-get update -y sudo apt-get upgrade -y sudo apt-get install -y build-essential cmake g++ gfortran git pkg-config python-dev software-properties-common wget sudo apt-get autoremove sudo rm -rf /var/lib/apt/lists/*

CUDA

Скачайте CUDA 8 с сайта Nvidia. Перейдите в каталог загрузок и установите CUDA:

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local.deb sudo apt-get update -y sudo apt-get install -y cuda

Добавьте CUDA в список переменных окружения:

echo ‘export PATH=/usr/local/cuda/bin:$PATH’ >> ~/.bashrc echo ‘export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH’ >> ~/.bashrc source ~/.bashrc

Проверьте версию CUDA:

nvcc -V

Перезагрузите компьютер:

sudo shutdown -r now

Убедитесь, что всё установилось корректно. Сперва установите образцы CUDA:

/usr/local/cuda/bin/cuda-install-samples-*.sh ~/cuda-samples cd ~/cuda-samples/NVIDIA*Samples make -j $(($(nproc) + 1))

Обратите внимание, что +1 означает количество графических процессоров, поэтому число можно увеличить, ускорив тем самым время установки и компиляции.

После этого запустите deviceQuery и убедитесь, что все графические тесты успешно проходятся:

bin/x86_64/linux/release/deviceQuery

cuDNN

cuDNN — это библиотека для работы с развёртывающими нейронными сетями с поддержкой графических ускорителей. К сожалению, её нельзя просто скачать с репозитория. Вам придётся зарегистрироваться в программе Nvidia и подождать пару дней, чтобы получить доступ. Скачивайте 4 и 5 версии. Я ставил пятую.

Прежде чем ставить все другие фреймворки, дождитесь предоставления вам доступа к этой библиотеке — другие зависят от неё и могут не работать.

Извлеките и скопируйте файлы:

cd ~/Downloads/ tar xvf cudnn*.tgz cd cuda sudo cp */*.h /usr/local/cuda/include/ sudo cp */libcudnn* /usr/local/cuda/lib64/ sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

Запустите проверку:

nvidia-smi

Python

sudo apt-get install -y python-pip python-dev sudo apt-get update && apt-get install -y python-numpy python-scipy python-nose python-h5py python-skimage python-matplotlib python-pandas python-sklearn python-sympy libfreetype6-dev libpng12-dev libopenjpeg5 sudo apt-get clean && sudo apt-get autoremove rm -rf /var/lib/apt/lists/*

Установите остальные библиотеки через Pip:

pip install seaborn rpy2 opencv-python pygraphviz pattern nltk scrappy

Tensorflow

pip install tensorflow-gpu

Вот и всё!

Проверка Tensorflow:

$ python ... >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) Hello, TensorFlow! >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a + b)) 42 >>>

OpenBLAS

sudo apt-get install -y libblas-test libopenblas-base libopenblas-dev

Jupyter

pip install -U ipython[all] jupyter

Theano

sudo apt-get install -y python-numpy python-scipy python-dev python-pip python-nose g++ python-pygments python-sphinx python-nose sudo pip install Theano

Да, Theano пишется с заглавной буквы.

Проверьте Theano — не должно быть никаких предупреждений и ошибок:

python >>> import theano >>> exit() nosetests theano

Keras

Keras — это очень мощная высокоуровневая обёртка над Theano и Tensorflow. Она настолько проста, что становится скучно.

sudo pip install keras

Lasagne

Lasagne — это ещё одна популярная обёртка, но более сложная и мощная, чем Keras. Инструкции по установке можно скачать здесь.

pip install -r https://raw.githubusercontent.com/Lasagne/Lasagne/v0.1/requirements.txt

MXNET

MXNET — это масштабируемый фреймворк, поддерживаемый Amazon. Инструкции по установке можно найти на его официальном сайте, а скрипт для установки MXNet for Python — на GitHub.

Установка MXNet на Ubuntu

Вот что гласит сайт:

MXNet на настоящий момент поддерживает Python, R, Julia и Scala. Пользователи Python и R на Ubuntu могут воспользоваться набором скриптов, которые устанавливают все зависимости и саму библиотеку в папку ~/mxnet.

Установка MXNet for Python

Склонируйте репозиторий MXNet. Выполните команды в терминале без sudo:

git clone https://github.com/dmlc/mxnet.git ~/mxnet --recursive

Мы работаем на графических процессорах, поэтому добавьте настройки в файл config.mk:

cd ~/mxnet cp make/config.mk . echo "USE_CUDA=1" >>config.mk echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk echo "USE_CUDNN=1" >>config.mk

Установите MXNet for Python со всеми зависимостями:

cd ~/mxnet/setup-utils bash install-mxnet-ubuntu-python.sh

Добавьте его в путь:

source ~/.bashrc

Установка MXNet for R

Прежде всего нам понадобится R. Скрипт для установки MXNet for R можно найти здесь.

Сперва добавьте репозиторий R:

sudo echo “deb http://cran.rstudio.com/bin/linux/ubuntu xenial/” | sudo tee -a /etc/apt/sources.list

Добавьте R в Ubuntu Keyring:

gpg — keyserver keyserver.ubuntu.com — recv-key E084DAB9 gpg -a — export E084DAB9 | sudo apt-key add -

Установите R-Base:

sudo apt-get install r-base r-base-dev

Установите R-Studio (укажите нужную версию):

sudo apt-get install -y gdebi-core wget https://download1.rstudio.org/rstudio-0.99.896-amd64.deb sudo gdebi -n rstudio-0.99.896-amd64.deb rm rstudio-0.99.896-amd64.deb

Установите MXNet for R:

cd ~/mxnet/setup-utils bash install-mxnet-ubuntu-r.sh

Caffe

Инструкции можно найти на официальном сайте проекта. Они немного непонятные, да и пользоваться им нам придётся редко, так что я бы на вашем месте пропустил этот этап.

Установите все зависимости:

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install -y --no-install-recommends libboost-all-dev sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

Склонируйте репозиторий:

cd ~/git git clone https://github.com/BVLC/caffe.git cd caffe cp Makefile.config.example Makefile.config

Чтобы использовать cuDNN, установите флаг USE_CUDNN := 1 в Makefile:

sed -i ‘s/# USE_CUDNN := 1/USE_CUDNN := 1/‘ Makefile.config

Измените параметры BLAS:

sed -i 's/BLAS := atlas/BLAS := open/' Makefile.config

Установите файл requirements, соберите Caffe, соберите и запустите тесты и убедитесь, что они успешно пройдены. Опять-таки, обратите внимание на +1 — это число можно увеличить.

sudo pip install -r python/requirements.txt make all -j $(($(nproc) + 1)) make test -j $(($(nproc) + 1)) make runtest -j $(($(nproc) + 1))

Соберите PyCaffe, Python-интерфейс для Caffe:

make pycaffe -j $(($(nproc) + 1))

Добавьте Caffe в список переменных окружения:

echo ‘export CAFFE_ROOT=$(pwd)’ >> ~/.bashrc echo ‘export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH’ >> ~/.bashrc source ~/.bashrc

Убедитесь, что установка прошла успешно.

ipython >>> import caffe >>> exit()

Torch

Инструкции можно найти на сайте проекта. При установке фреймворка я столкнулся с небольшими проблемами, но обычно их не возникает.

git clone https://github.com/torch/distro.git ~/git/torch — recursive cd torch; bash install-deps; ./install.sh

Scala

sudo apt-get -y install scala

Anaconda

Скачайте Anaconda для Python 3.6 отсюда. У них также есть версия для 2.7.x.

Установите её:

sudo bash Anaconda3–4.3.0-Linux-x86_64.sh

Ни в коем случае не добавляйте её в список переменных окружения, иначе она заменит собой Python.

Создайте два окружения, между которыми можно будет переключаться для выбора нужной версии:

conda create -n py2 python=2.7 conda create -n py3 python=3.6

Активируйте окружение 3:

source activate py3

Установите все пакеты для Anaconda:

conda install pip pandas scikit-learn scipy numpy matplotlib ipython-notebook seaborn opencv scrappy nltk pattern

Установите pygraphviz и R-интерфейс при помощи pip:

pip install pygraphviz rpy2

Перезагрузите компьютер:

sudo shutdown -r now

Установка Tensorflow, Theano и Keras для Anaconda

Вы установите эти библиотеки для второй и третьей Python-версий Anaconda. Это повысит производительность.

Сперва поставьте версию Python 3:

source activate py3 pip install tensorflow Theano keras

Отключите окружение и включите окружение py2:

source deactivate source activate py2

Установите библиотеки для py2:

pip install tensorflow Theano keras

Отключите окружение:

source deactivate

Теперь у вас есть стандартная оболочка Ubuntu с встроенным Python 2.7.x и всеми необходимыми фреймворками.

Заключение

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

Типичный программист.

Источник: Типичный программист