Как собрать компьютер для ML

yoqwpqrpoceuju7kduec635n_7c.jpeg

Свой собственный сервер для обучения — как машина в 20 веке: если вы всерьез занимаетесь Data Science, рано или поздно вы придете к тому, что нужна единая настроенная среда, уверенность в ресурсах, независимых от правил работодателя и админов. Кто-то скажет, что всё можно делать в облаках, однако постоянный доступ, долгие эксперименты 24/7, да еще и с хранением данных выйдут в копеечку.

Итак, если вы решились — нужно строить свой город-сад.
Давайте посмотрим, что нам нужно:

  • Датасеты где-то должны лежать. Нужна возможность хранить и иметь быстрый доступ к большим объемам данных.
  • Видеокарта. Resnet-ы и Unet-ы ждут.
  • Многоядерный процессор. Многие забывают, но многие операции в numpy, pandas, да и алгоритмы градиентного бустинга отлично распараллелены для multithreading, но все еще не работают на видеокартах.
  • Оперативная память. Должна вмещать все.
  • И остальное, что должно обслуживать параметры: достаточный источник питания, корпус и материнская плата, где все это счастье поместится, операционная система.


Самый главный определяющий фактор, конечно, бюджет. Свой я определил в районе 150 тыс. рублей.

Итак, первое и самое дорогое — это видеокарта. Давайте признаем очевидное: Nvidia является сейчас абсолютным лидером по производительности и совместимости фреймворков, и если вы пишете нейросети, то вам нужно cudnn и cuda. Но хорошие видеокарты стоят круглые суммы: если мы хотим хотя бы 11 Gb памяти и соответствующую производительность, надо выложить 1000 $+ за топовую модель. Видеокарты разлетаются, а цены растут. Как быть? Надо вспомнить, что прямо сейчас мы живем в уникальное время: пузырь криптовалют лопается по швам, и на рынок выходит большое количество видеокарт от майнеров. Я являюсь счастливым обладателем подержанной 1080 Ti за 30 тыс. рублей, и почти за год она ни разу меня не подвела, работая 24/7. Возьмите компьютер с Windows (почему-то большинство программ тестирования видеокарт именно под эту систему), запаситесь программами, проверьте вашу рабочую лошадку вдоль и поперек и смело берите графический ускоритель в 1.5–2 раза дешевле.

Продолжая идею вычислителей, перейдем к процессору. Тут хотелось бы сказать, по аналогии с предыдущим, что абсолютный лидер — Intel (тем более, я там когда-то работал). Это верно… только если мы говорим про однопоточные приложения или неограниченный бюджет. Однако у нас ни тот, ни другой случай, а хочется параллелить и денежку оставить, тут к нам приходит AMD Ryzen в целом и их линейка Threadripper в частности. За 700–1000$ можно купить 24–32 ядерный кристалл, на котором Catboost будет летать, аналогичные параметры Intel стоят в два раза дороже. Конечно, есть большое «НО»: своей производительности Threadripper обязан специфической конструкции, и с этим придется считаться (об этом ниже)…

mmotwzjugbh9ywf8ybjfbw6sb1s.jpeg

Немного лирики от сборщика: «Думаю, после недавнего фиаско Intel с 10980XE вопрос о том, какой процессор выбрать для многопоточных вычислений, имеет довольно понятный ответ. Но… всё может поменяться».

И тут мы переходим к памяти. Делать сервер меньше чем с 32 гигабайтами оперативной памяти странно (тогда уже проще считать на фитнес-браслетах) и лучше брать память с высокой частотой (3200+, процессоры архитектур ZEN и ZEN 2 ее любят). Конечно, оперативная память — не самый сложный компонент схемы, а значит и производителей много, но лучше брать проверенных (я взял Corsair). Тут надо определиться с тем, сколько брать, и с количеством каналов. Самый простой ответ: побольше, чтобы на каждой плашке да по 16 гигабайт сидело. Кажется, что можно и 256 гигов оперативы заполучить в свой ПК. Но не всё так просто. Если вы берете двухканальную память, то к одному объему информации в памяти будет лезть вдвое больше активных ядер, а это значит, что снижается скорость доступа — тут надо вспомнить про необходимость быстрого доступа к памяти, как критичное требование. Значит берем четырехканальную. На каждой плашке у нас будет по 8 гигов памяти.

Еще один инсайт от сборщика, а точнее, обещанные подробности о Threadripper: «В целом, если в вас сидит мантра «все каналы памяти должны быть заполнены» (а у Threadripper их 4) можете скроллить вниз. Остальным напоминаю, что у этого процессора старой архитектуры интересная структура из 4 NUMA nodes, узлов с неоднородным доступом к памяти. Работать они могут и с одним каналом, но тогда у вас будут копиться задержки, вызванные этой архитектурой. В более новых Threadripper, построенных уже на ZEN 2, эта особенность ликвидирована, но пожелание компьютеру многих каналов памяти остается».

Итак, мы вывели ограничение материнской платы на количество слотов под память, хотя бы 4 (чтобы получить 32 гигабайта), а желательно — 8. Еще стоит сразу подумать, собираетесь ли вы брать вторую видеокарту, и, конечно, посмотреть на производителя. Тут мы выясняем, что предложений на рынке для PC (не серверных), подходящих под наши ограничения, не так много (по крайней мере, было немного, когда эта машина собиралась). Конечно, на ум приходит ASUS, и при неограниченном бюджете взял бы его, но пытаясь влезть в рамки, берем ASRock, младшего брата большой компании, доступного даже после падения рубля.

Конечно, имея такой быстрый вычислитель, странно упираться в скорость жесткого диска, значит нам нужен SSD. Они, конечно, дороже, однако выясняется, что мало какие задачи требуют терабайтов данных в постоянном доступе. Значит, можно взять 512 Гб, а датасеты, которые пока не хочется удалять, держать вместе с коллекцией домашних фильмов — на отдельном классическом терабайтном диске. Или больше. Сколько нужно и что позволит бюджет.

Собрав основные компоненты, прикидываем, что может дать хозяйству мощность. Тут подумайте о развитии и, например, о второй видеокарте (лучше взять с запасом). И, конечно, надо решить, кто охладит эту мощь. Threadripper-ы греются, как цветочные цены на 8 марта, так что нужна мощная система охлаждения. Формально подойдет сильная воздушная и водяная, но я советую брать водяную: по цене сравнима с сильной воздушной, но не будет постоянного ощущения, что живете на взлетно-посадочной полосе. Плюс, за последнее время количество производителей, предлагающих вменяемые охладители специально для Threadripper, выросло — есть из чего выбрать.

0uivtscefpwje4_l-8wfthzexjg.jpeg

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

Существуют следующие возможности покупки всего счастья:

  1. Заказать собрать кому-то внешнему
    • плюсы: могут еще раз проверить комплектацию, нет проблем с совместимостью
    • минус: ~10–15% стоимости в зависимости от сложности работы и стоимости комплектующих
  2. Выписать всё на листочек, прийти на Савеловский/Горбушку (если живете в Москве) и собрать там.
    • плюсы: точно ничто не побьется при доставке, все сделают при вас, меньше денег за сборку
    • минусы: могут быть не самые дешевые компоненты (даже в рамках одного рынка цена прыгает до 50%, плюс за эту цену могу попробовать поставить Б/У)
  3. Заказать все на Яндекс-маркете
    • плюсы: можно дешевый вариант
    • минусы: сложно проверить доставку
  4. Заказать всё за границей (алиэкспресс/ebay)
    • плюсы: самый дешевый вариант, сюрприз по приезду
    • минус: сюрприз по приезду (серьезно, не надо так — в Спортлото чаще выигрывают)


Я сам выбрал первый вариант (в личке могу порекомендовать конкретных людей).

Когда все приехало и собрано, осталось накатить систему.

Это история для отдельного поста, здесь расскажу вкратце: поскольку я хотел его еще использовать как десктоп и имел предыдущий опыт работы в Linux, то по причине популярности выбрал Ubuntu Linux.

Когда все работает, попросите у своего провайдера статический IP — это бесплатно или недорого и обеспечит доступ к вашим юпитер-ноутбукам почти отовсюду.

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

lefvy_kjy-0z2ecl3aag9ds0p9k.jpeg

Финальный подсчет (цены начала 2019 года):

Автор: Николай Князев, руководитель группы машинного обучения компании «Инфосистемы Джет»

© Habrahabr.ru