{"id":14276,"url":"\/distributions\/14276\/click?bit=1&hash=721b78297d313f451e61a17537482715c74771bae8c8ce438ed30c5ac3bb4196","title":"\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0432\u0430\u0440 \u0438\u043b\u0438 \u0443\u0441\u043b\u0443\u0433\u0443 \u0431\u0435\u0437 \u0431\u0438\u0440\u0436\u0438","buttonText":"","imageUuid":""}

Бюджетный сервер для обучения нейронных сетей

Всем добрый день. В этой статье я расскажу как собрать сервер для обучения нейронных сетей и сэкономить кучу денег.

Спойлер, сэкономлено почти 400 000 рублей.

Немного предыстории.

Я много лет занимаюсь наукой и стартапами. Последние несколько лет я делал проект в сфере аналитики международных финансовых рынков на базе нейронных сетей (В связи с развалом международной оплаты его пришлось прикрыть, если кому-то интересно, и сейчас я его разворачиваю в другую сторону. Но написать я хочу не об этом). Кому интересно, можете прочитать статьи здесь.

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

Если посмотреть в сторону облачных решений, то все они стоят как крыло от боинга.

Не в рамках рекламы, а в рамках примера я приведу сервис:

Вы сами можете убедиться в стоимости цен.

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

Как вы видите, 50+ к в месяц заставляют задуматься о покупке своего сервера.

Логика решения

Когда вы создаёте сервер, то ваши действия должны быть целесообразны.

Например, мне нужно создать ансамбль нейронных сетей. В ансамбле от 9 до 12 нейронок. Допустим каждой из них нужен датасет по 100 Гб. У вас может быть больше или меньше. Главное, вы можете посчитать, сколько у вас должен быть размер хранилища.

Следующим немаловажным фактом является наличие RAID 0 уровня под PCI-E для максимизации производительности работы с данными. В моём случае это ключевой фактор как с целью генерации датасетов, так и работы с ними.

Другой фактор, возможность масштабирования ресурсов.

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

Всё это и многое другое накладывает ограничения на ваш выбор.

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

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

В качестве материнской платы была выбрана двухсокетная материнская плата X99 D4X8

Материнская плата имеет 2 сокета 2011-3, 256 Гб максимальный объем оперативной памяти, два NVME m2 слота и 3 PCI-E слота по 16 линий на каждом, что является важным фактором с точки зрения вычисления на GPU.

Куплена материнская платы была на aliexpress за 11500.

Для примера ссылка:

На момент написания статьи она стоит 7200. Упал доллар к рублю, стало дешевле.

В качестве аналога можно привести:

Материнская плата Supermicro MBD-H11DSI-O Socket SP3 16xDDR4 2xPCI-E 16x 3xPCI-E 8x 10 EATX Retail.

Цена: 57 тысяч рублей.

Или вот:

Серверная материнская плата ASUS Z10PE-D8 WS.

Цена: 59 тысяч рублей.

Итого, сэкономлено 45 тысяч рублей.

Здесь я скажу ДВА очень важных момента, на которые вы должны обратить внимание!!!

Если вы будете покупать подобные платы, то осознавайте её размер. Об этом я дополнительно скажу ниже.

Например, размер этой платы 33 на 30,5. Заявляется EATX, что в принципе правда. Но ей нужен ООЧЕНЬ большой корпус, желательно EEATX.

Выбирайте верно блок питания. Посмотрите, у материнской платы 2 гнезда для подключения питания CPU на 8 пинов.

Если у кого то не работают SSD под M.2 слоты, то около слота есть переключатели, которые я обозначил на картинке выше. Их нужно переключить.

К сожалению, аппаратного RAID для M2 SSD у меня сделать не удалось, поэтому пришлось довольствоваться программным через Windows. Для SATA портов разумеется всё в порядке.

Другим важным моментом является разгон. Имеется возможность прошить BIOS и сделать анлок Turbo Boost и андервольтинг. Turbo Boost и андервольтинг дают возможность поднять частоту на ядрах до 3 ГГц, что является важным с целью повышения производительности.

На просторах интернета есть решения на эту тему. Но я пока себе не делал.

CPU

Процессоры подбирал здесь:

Смотрел по соотношению цены и характеристик. Взял топовый по производительности, но хороший по цене.

Взял 2 XEON 2693v3 по 18 ядер на каждом.

Оба они мне обошлись в 25500

В России они продавались дорого, по 70 тысяч за штуку.

Итого сэкономлено порядка 130 тысяч.

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

Большая часть датасетов у меня порядка 100 Гб. И на текущем этапе было принято установить на борт 128 Гб. 4 планки по 32 Гб DDR4 фирмы Samsung обошлись мне в 12 тысяч каждая планка, итого 48.

ВАЖНО! Когда вы покупаете память, обращайте внимание на её тип в спецификации материнской платы и её поддержку процессором. Потому как часть китайских плат поддерживают DDR3.

Обращаю внимание на то, что данная память серверная. Она подойдет в х99, но не подойдет в обычные компьютеры.

Для сравнения взял Самсунг 32 Гб с яндекс маркета: 42 тысячи рублей за планку. Итого: 168 за комплект.

Сэкономлено: 120к.

Блок питания

Взял Taifast на 1800 Вт за 8,5к. В Росси такой мощности стоят порядка 55к.

Разница порядка 47к.

Здесь есть важный момент, в выборе блока питания я немного ошибся. Точнее ошибся не я, а заявлено было неверно, что якобы есть 2 ветки питания CPU на 8 пинов, по факту оказалась 1. В итоге мне пришлось покупать переходник 2xPATA->8-pin 12В.

Всё отлично работает, особенно с учётом того, что веток питания в принципе на данном блоке великое множество.

Важным фактором выбора данного блока была возможность наращивания мощности сервера с точки зрения обучения на GPU.

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

х145 Вт CPU уже 300 Вт. + 60 Вт Материнская плата.

+ Видеокарта 3090 ti 450 Вт.

Итого, если вы ставите 2 топовые карты объединенные по SLI, то вам и 1800 Вт может хватить впритык.

SSD и HDD

HDD взял Seagate на 4 Тб. На первое время достаточно для хранения датасетов.

Цена вопроса 7 тысяч. В ДНС такой стоит порядка 10к. +3к экономии

SSD KingSpec 2 штуки по 512 Гб работают в RAID 0 для ускорения производительности. Обошлись оба за 8,5 к. В России за 2 можно отдать порядка 14к. +6к экономии.

В будущем планирую поставить что-то такое. Это переходник PCI-E под M2, чтобы сделать RAID 0 уровня под несколько SSD. Например данный под 4 SSD.

Система охлажедения

Здесь есть важный нюанс для рассматриваемой платы, для которой я купил процессор 2693v3.

Можно рассмотреть какого-то рода башенные куллеры (с 6 трубками), как представлено на рисунке выше. Проблема в том, что 2-х вентиляторных куллеров не достаточно по рассеиваемой мощности для охлаждения, нужно радиатор как на рисунке ниже. Однако он не помещается в материнскую плату. И это очень важно!

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

Цена вопроса системы охлаждения для 2 CPU: 6,5K. Цена в России примерно одинаковая.

На корпус было установлено 3 куллера по 120 - 140 мм.

Корпус

Корпус это очень больная тема. Я перепробовал несколько. Покупал в России, пришлось относить в магазин.

Если посмотреть на размер плат:

То E-ATX точно соотносится с тем, что заявляет производитель материнской платы: E-ATX305 × 330.

Однако, корпуса, которые заявляют поддержку E-ATX делают это опрометчиво. Я перепробовал несколько, ни в одну он не вошел.

Он поддерживает EE-ATX, и наверное в него войдет материнская плата, но подобные корпуса стоят 35к+.

Поэтому было принято решение купить самый большой корпус с поддержкой E-ATX и немного допилить его напильником, чтобы установить туда материнскую плату.

Был куплен: корпус Cougar PANZER MAX-G [106AMK0015-00] черный

Цена вопроса 12к. +30к экономии.

Для того, чтобы выпилить часть задней панели как на рисунке выше, а также для доработки мест крепления материнской платы был куплен инструмент: пилки для электролобзика, свёрла 2,5 мм, метчики М3, вороток. В качестве упоров для материнской платы использовались пластиковые скобы высотой 5 мм.

После удаления лишнего, материнская плата встала.

Упоры для крепления материнской платы дорабатывались как показано на картинке ниже.

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

Для поддержки материнской платы сверху пришлось делать пластиковый прихват:

Тем не менее, всё отлично встало и работает:

Итог

Всё отлично работает.

Цена сборки (с учётом доработки): порядка 130 000 рублей.

Экономии 380 000 рублей, по сравнению, если закупать аналоги в России.

Под конец хочу сказать, что не призываю никого покупать на Алике. Следует понимать, что это риск в разных смыслах слова. + Качество. Каждый делает свой выбор сам.

Однако, в кризис порой не бывает выбора, и приходится искать решения.

Всем всех благ и успешного бизнеса.

0
58 комментариев
Написать комментарий...
Roman Pravuk

А нужен ли сервер для обучения? По опыту современный игровой комп с cuda вполне себе нормальное решение. Raid 0 тоже сомнительно - больше всего нагрузки при обучении идёт именно на видеокарту. Если грамотно построить датагенератор (класс sequence в keras) на какой либо БД, то вы будете загружать следующий batch в момент когда учится текущий обычного ssd хватает. Если вам важно размер, ну так база данных поможет - строите кластер, ну или ручной шардеринг. Ну а если не хочется тратиться на видеокарту то google colab за $50 в месяц вполне может хватить.
Для выполнения вашей обученной модели нужен cpu с поддержкой avx3 и fma, ну или например coral ускорители

Ответить
Развернуть ветку
Аполлон Степанов
Автор

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

GPU это только часть. Сколько вы будете генерировать датасет?? Сколько вы будете его предобрабатывать?? Читать?? Может быть вам и ГРУ то не нужно, а нужно нечто другое.

Ответить
Развернуть ветку
Roman Pravuk

Да генерация батча занимает процессоров время, но сравнить 2 десятилетних зиона и один современный i9 на 24 потока по производительности. Сам датасет можно генерировать налету (я так и делаю), при это огромная экономия памяти - не нужно загружать весь датасет в память.
Я к тому что многие вещи решаются программно. Все же обучение это предпродакшн, зачем для обучения серверное железо?
Собрать игровой пк без учета видеокарты можно за те же +/- $2к

Судя по вашим статьям вы часто используете lstm слои. Попробуйте при обучении использовать cudnlstm

https://www.tensorflow.org/api_docs/python/tf/compat/v1/keras/layers/CuDNNLSTM - увидите насколько сократится утилизация cpu

Ответить
Развернуть ветку
Аполлон Степанов
Автор

Нет, на лету генерировать у меня нельзя.

У меня от 1500 до 7000 факторов, и генерация даже небольшого куска занимает значительное время.

Поэтому у меня генерация датасета вынесена отдельно от всего остального.

В противном случае, я бы миллион лет обучал.

Касательно 2693v3, согласно данным сравнения производительности разных сервисов, то данный процессор не уступает целому ряду core i9.

+ У меня их два.

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

Ответить
Развернуть ветку
Roman Pravuk

По поводу lstm-CuDNNLSTM на моей модели скорость обучения ~56 минут с cudnn против 17 часов на стандартной lstm 🙂 правда сеть гибридная - efficient net B4 + lstm (64 ядра)

Ответить
Развернуть ветку
Аполлон Степанов
Автор

А какой у вас объем датасета?? И какой размер нейронной сети??

Ответить
Развернуть ветку
Roman Pravuk

Про размер точно непомню- завтра посмотрю. Архитектуру описал в предыдущем сообщении

Ответить
Развернуть ветку
Аполлон Степанов
Автор

Да, увидел, спасибо. У меня только на внешнем слое 1000 lstm нейронов)

Ответить
Развернуть ветку
Roman Pravuk

Имейте ввиду что один lstm блок это 3 dense + умножения и складывания векторов), так что умножайте параметры на 3)

Ответить
Развернуть ветку
Аполлон Степанов
Автор

Хорошо)

Ответить
Развернуть ветку
55 комментариев
Раскрывать всегда