- Регистрация
- 9 Май 2015
- Сообщения
- 1,071
- Баллы
- 155
- Возраст
- 51
Рассказывает
Это третья статья из цикла, посвящённого изучению ИИ и всего, что с ним связано. В мы обсуждали теорию, во — готовились к решению практических заданий. Сегодня же мы займёмся сборкой идеального компьютера для машинного обучения и настройкой системы.
Итак, займёмся подбором комплектующих. Я предложу три варианта: бюджетный, средний и навороченный.
Но сперва — экспресс-вариант
Потом установите необходимые фреймворки, о которых мы поговорим во этой статьи, и вы получите готовую систему, причём весьма дешёвую.
Подбор комплектующих
Я буду помечать дорогие и бюджетные варианты следующим образом:
- ДнП (Деньги — не проблема) = наилучший вариант;
- ЗПБ (Зачем платить больше?) = оптимальный вариант;
- ДиС (Дёшево и сердито) = бюджетный вариант.
Центральный процессор — больше не самая важная часть компьютера. Для навороченных игровых систем нужны мощные процессоры, но не для машинного обучения — там роль 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 . Она может похвастаться 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 тысяч рублей — это лучший бюджетный вариант.
Хранилище данных
Вам понадобится SSD, особенно если вы будете работать со свёрточными нейронными сетями и обрабатывать много изображений. ёмкостью 1 ТБ — это ДнП-вариант. Кроме того, за последний год цены на SSD значительно снизились, поэтому такая покупка не сильно ударит по кошельку. На момент написания статьи эта модель стоит порядка 20 тысяч рублей.
ЗПБ-вариант — это SSD той же модели, но на 250 ГБ. Стоит он примерно 6 тысяч.
Вам также понадобится HDD для хранения наборов данных. Они могут быть очень большими, поэтому стоит взять диск ёмкостью не меньше 4 ТБ, производитель не так уж и важен. Стоить он будет порядка 10 тысяч.
В качестве ДиС-альтернативы можно взять на 240 ГБ за 4 тысячи рублей и HDD на 1 ТБ, но я считаю, что лишней памяти не бывает.
Оперативная память
Я советую брать не менее 16 ГБ оперативной памяти типа DDR4. Многие говорят, что оперативной памяти должно быть в 2 раза больше, чем видеопамяти, но 16 ГБ вам должно хватить. Я бы посоветовал модель , набор из двух планок по 8 ГБ будет стоить примерно 10 тысяч рублей.
Материнская плата
Поскольку мы хотим поместить в наш корпус 4 видеокарты, наш выбор очень невелик. Лучшим вариантом будет материнская плата . Также подойдёт .
Если же вы используете меньше 4 карт, вариантов становится гораздо больше. В материнских платах главное — стабильность. В этом я убедился, когда собирал системы для майнинга криптовалюты. Gigabyte разработала отличную линейку надёжных материнских плат. Модель оптимальна и стоит порядка 20 тысяч.
Корпус
— это ультимативный корпус форм-фактора EATX. Его стильный внешний вид отлично дополнит вашу систему.
Тем, кому нужен корпус поменьше, подойдёт .
Я никогда не видел смысла в покупке дешёвого корпуса. Тем не менее, в продаже есть множество достойных бюджетных вариантов, и перечислять их здесь нет смысла.
Процессор
Вашей машине для машинного обучения не нужен мощный процессор. Большинство приложений многопоточны лишь на графическом процессоре, поэтому разоряться на процессор не стоит.
Поэтому вам стоит купить процессор с наибольшей тактовой частотой, т.е. с частотой 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 и всеми необходимыми фреймворками.
Заключение
Вот и всё. Вы собрали компьютер по своим возможностям и настроили систему, напичкав её всем необходимым для машинного обучения софтом.
— .