- Регистрация
- 9 Май 2015
- Сообщения
- 1,071
- Баллы
- 155
- Возраст
- 51
Рассказывает
Это третья статья из цикла, посвящённого изучению ИИ и всего, что с ним связано. В мы обсуждали теорию, во — готовились к решению практических заданий. Сегодня же мы займёмся сборкой идеального компьютера для машинного обучения и настройкой системы.
Итак, займёмся подбором комплектующих. Я предложу три варианта: бюджетный, средний и навороченный.
Но сперва — экспресс-вариант
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/1-300x195.jpeg)
Потом установите необходимые фреймворки, о которых мы поговорим во этой статьи, и вы получите готовую систему, причём весьма дешёвую.
Подбор комплектующих
Я буду помечать дорогие и бюджетные варианты следующим образом:
- ДнП (Деньги — не проблема) = наилучший вариант;
- ЗПБ (Зачем платить больше?) = оптимальный вариант;
- ДиС (Дёшево и сердито) = бюджетный вариант.
Центральный процессор — больше не самая важная часть компьютера. Для навороченных игровых систем нужны мощные процессоры, но не для машинного обучения — там роль Intel Nvidia.
Хотя карты AMD и зарекомендовали себя в майнинге криптовалюты, до ИИ они ещё не доросли. Скоро это изменится, но пока Nvidia на коне. Но не стоит сбрасывать Intel со счетов. Она компанию Nervana Systems и собирается начать выпускать специализированные чипы для машинного обучения уже в этом году.
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/2-300x161.jpeg)
Начнём с ДнП. Безоговорчный лидер — это Titan X. Ему просто нет равных.
В ней установлено 3584 ядер CUDA на частоте 1531 МГц и 12 ГБ видеопамяти GDDR5X с пропускной способностью 10 Гб/с.
Для машинного обучения важно количество ядер и объём памяти. По сути, алгоритмы машинного обучения — это всего лишь куча линейной алгебры. Представьте огромную таблицу Excel. Простой 4- или 8-ядерный процессор Intel просто не справится с таким объёмом данных.
Перемещение данных из памяти и в неё очень сильно ограничивает вычислительный процесс, поэтому чем больше памяти есть на карте, тем лучше. Поэтому Titan X и является лучшей.
Жаль, но на официальном сайте можно купить лишь 2 карты. Но для нас деньги — не проблема, поэтому ещё две мы возьмём где-нибудь ещё. Да, это 4-way SLI! Обойдётся он вам примерно в 360 тысяч (на момент написания статьи — прим. перев.), но это львиная доля затрат.
Любые бенчмарки предупредят вас, что SLI из более чем 2 карт не даст значительного прироста, но нам же не в игрушки играть (ладно, будем честны, не только в игрушки играть)! Для работы с ИИ нужно использовать максимально возможное количество видеокарт, поэтому четыре — это вовсе не предел. Заметьте, что вам не нужен мостик для SLI, если вы не планируете использовать систему для игр. Максимум, что будет связано с графикой — это построение графиков в matplotlib.
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/3-300x300.jpeg)
Теперь поговорим о ЗПБ. Вам подойдёт карта GeForce GTX 1080 Founders Edition. В ней всего лишь 2560 ядер CUDA, гораздо меньше, чем в Titan X, но она и стоит в два раза дешевле, 46 тысяч рублей. Памяти в ней тоже меньше, 8 ГБ вместо 12. Ещё один неплохой ДиС-вариант — это GeForce . Она может похвастаться 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 ядра меньше. Для своей системы я выбрал именно его.
Наконец, ДиС-вариант: . 6 ГБ видеопамяти и 1280 ядер CUDA за 17 тысяч рублей — это лучший бюджетный вариант.
Хранилище данных
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/4-300x212.jpeg)
Вам понадобится SSD, особенно если вы будете работать со свёрточными нейронными сетями и обрабатывать много изображений. ёмкостью 1 ТБ — это ДнП-вариант. Кроме того, за последний год цены на SSD значительно снизились, поэтому такая покупка не сильно ударит по кошельку. На момент написания статьи эта модель стоит порядка 20 тысяч рублей.
ЗПБ-вариант — это SSD той же модели, но на 250 ГБ. Стоит он примерно 6 тысяч.
Вам также понадобится HDD для хранения наборов данных. Они могут быть очень большими, поэтому стоит взять диск ёмкостью не меньше 4 ТБ, производитель не так уж и важен. Стоить он будет порядка 10 тысяч.
В качестве ДиС-альтернативы можно взять на 240 ГБ за 4 тысячи рублей и HDD на 1 ТБ, но я считаю, что лишней памяти не бывает.
Оперативная память
Я советую брать не менее 16 ГБ оперативной памяти типа DDR4. Многие говорят, что оперативной памяти должно быть в 2 раза больше, чем видеопамяти, но 16 ГБ вам должно хватить. Я бы посоветовал модель , набор из двух планок по 8 ГБ будет стоить примерно 10 тысяч рублей.
Материнская плата
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/5-300x240.png)
Поскольку мы хотим поместить в наш корпус 4 видеокарты, наш выбор очень невелик. Лучшим вариантом будет материнская плата . Также подойдёт .
Если же вы используете меньше 4 карт, вариантов становится гораздо больше. В материнских платах главное — стабильность. В этом я убедился, когда собирал системы для майнинга криптовалюты. Gigabyte разработала отличную линейку надёжных материнских плат. Модель оптимальна и стоит порядка 20 тысяч.
Корпус
— это ультимативный корпус форм-фактора EATX. Его стильный внешний вид отлично дополнит вашу систему.
Тем, кому нужен корпус поменьше, подойдёт .
Я никогда не видел смысла в покупке дешёвого корпуса. Тем не менее, в продаже есть множество достойных бюджетных вариантов, и перечислять их здесь нет смысла.
Процессор
![](https://tproger2.azureedge.net/wp-content/uploads/2017/03/7-260x300.jpeg)
Вашей машине для машинного обучения не нужен мощный процессор. Большинство приложений многопоточны лишь на графическом процессоре, поэтому разоряться на процессор не стоит.
Поэтому вам стоит купить процессор с наибольшей тактовой частотой, т.е. с частотой 4 ГГц. Да, может показаться, что это перебор, но в последнее время цена на него только падает, так что почему бы и нет?
ЗПБ-альтернативы здесь нет. i5 с частотой 3,5 ГГц стоит немногим дешевле, так какая разница?
ДиС-вариант здесь — двухядерный c частотой 3.7 ГГц, стоит он порядка 7 тысяч.
Блок питания
Блок питания — это лучший вариант для сборки с 4 видеокартами. Он обойдётся вам где-то в 18 тысяч.
Titan X потребляет порядка 250 ватт — вот уже тысяча, и на всё остальное остаётся не так уж и много, а БП лучше брать с запасом.
Если вы используете меньше видеокарт, вам подойдёт . ДиС-альтернатива — .
Настройка системы
Теперь, когда мы закончили с железом, займёмся настройкой софта.
У вас есть три варианта:
- Docker-контейнер;
- Виртуальная машина;
- Чистая установка.
Если вы хотите пойти по этому пути, то вам стоит начать с официального проекта . Однако вам всё равно придётся ставить кучу фреймворков и библиотек поверх этого образа.
Конечно, вы можете поставить и контейнер со всем необходимым для машинного обучения, например, . К сожалению, в нём есть некоторые пока не решённые проблемы, да и на Dockerhub он не поместится, поэтому времени на ручную настройку вам придётся потратить немало.
Виртуальная машина
Как я и сказал в начале статьи, вы можете просто обновить железо вашего игрового компьютера, поставить VMware Workstation Pro, поддерживающую работу с графическими процессорами, и начать работать. Это самый дешёвый вариант, да и весьма удобный в использовании.
Чистая установка
В результате я выбрал именно этот вариант. Да, немного олдскульно, но поскольку я давно работаю сисадмином, то решил сделать всё вручную — таким образом можно максимально контролировать систему.
Сперва обсудим несколько деталей, сваязанных с ПО. Вы поймёте, что большая часть вычислений производится при помощи Python. В дальнейшем это может поменяться, но пока что это основной язык. Популярны также R и Scala, их мы тоже рассмотрим.
Вот список всех основных пакетов, которые мы установим:
Языки
- Python 2.x;
- (и Python 3.6) — высокопроизводительный дистрибутив Python, содержащий более 100 популярных пакетов Python, R и Scala;
- — язык и среда для статистических расчётов;
- — язык, похожий на Java, но гораздо более производительный.
- ;
- — проприетарная платформа для параллельных вычислений и модель API от Nvidia;
- — библиотека для графических процессоров Nvidia для работы с .
- — отличное веб-приложение, которое позволит делиться документацией и кодом.
- — открытый фреймворк Google для машинного обучения, на котором, например, работает Google Translate;
- — популярный фреймворк для машинного обучения;
- — ещё один фреймворк;
- — фреймворк для научных вычислений, использующий графические процессоры;
- — масштабируемая система для машинного обучения, созданная Amazon и несколькими университетами.
- — высокоуровневая библиотека для работы с нейронными сетями, запускающаяся поверх TensorFlow или Theano;
- — лёгкая библиотека для создания и обучения нейронных сетей.
Написано огромное количество библиотек для разного рода научной деятельности, мы поставим самые нужные:
- Pip = менеджер пакетов для Python;
- Pandas = высокопроизводительная библиотека для анализа данных;
- Scikit-learn = популярная мощная библиотека для машинного обучения;
- NumPy = численный Python;
- Matplotlib = библиотека для визуализации;
- Scipy = математические и научные расчёты;
- IPython = интерактивный Python;
- Scrappy = фреймворк для веб-скрапинга;
- NLTK = набор инструментов для работы с естественными языками;
- Pattern = библиотека для веб-майнинга;
- Seaborn = статистические визуализации;
- OpenCV = библиотека для работы с компьютерным зрением;
- Rpy2 = интерфейс для R;
- Py-graphviz = статистические графики;
- OpenBLAS = линейная алгебра.
Я рекомендую поставить Ubuntu LTS (16.04 на момент написания статьи). Запишите её на флешку при помощи программы и установите в 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 с . Перейдите в каталог загрузок и установите 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 — на .
Установка 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 и всеми необходимыми фреймворками.
Заключение
Вот и всё. Вы собрали компьютер по своим возможностям и настроили систему, напичкав её всем необходимым для машинного обучения софтом.
— .