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

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


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

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

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

Если вы не хотите собирать новый компьютер, можно просто обновить старый! Купите видеокарту 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-режиме.

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

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

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

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

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

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

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

CUDA

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

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

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

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

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

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

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

cuDNN

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

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

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

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

Python

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

Tensorflow

Вот и всё!

Проверка Tensorflow:

OpenBLAS

Jupyter

Theano

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

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

Keras

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

Lasagne

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

MXNET

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Caffe

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

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

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

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

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

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

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

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

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

Torch

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

Scala

Anaconda

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

Перевод статьи «Learning AI if You Suck at Math — P3 — Building an AI Dream Machine or Budget Friendly Special»