Как собрать сервер для обучения нейросетей

Если вам нужна нейросеть с необычными навыками, можно обучить собственную модель. А для этого — собрать сервер. Как это сделать и не потратить время и деньги впустую, расскажем в статье.

Как собрать сервер для обучения нейросетей

Алгоритмы машинного обучения (ML) — это целый раздел computer science с кучей зубодробительной математики. Если объяснять просто, современное машинное обучение — это когда в большом количестве перемножаются матрицы. Желательно параллельно, чтобы очень много матриц перемножилось за ограниченное время. Это определяет выбор железа.

Сервер для ML надо собирать под задачу. На то, какой будет идеальная конфигурация, влияют:

  • размер обучаемой модели;
  • объем обучающей выборки;
  • размер отдельного элемента выборки;
  • архитектура модели.

Нужно представлять, какие задачи вы будете выполнять, чтобы убедиться, что на конкретном железе они будут выполняться эффективно, а вы не будете переплачивать за ресурсы. И только после этого переходить к выбору и настройке сервера. Рассмотрим основные компоненты серверного железа и их параметры, которые нужно учитывать при выборе для обучения моделей ML.

Видеокарта

Вам нужна видеокарта от NVIDIA — в силу конструктивных особенностей. Среди компаний, производящих видеокарты, NVIDIA раньше всех начала адаптировать свои графические процессоры (GPU) под нужды машинного обучения:

  • Именно NVIDIA придумали архитектуру CUDA. Исторически видеокарта — это устройство, которое выполняет параллельно много простых вычислений. CUDA позволяет вычеркнуть слово «простых» — с этой архитектурой можно заставить видеокарту выполнять сложные алгоритмы, а еще обеспечивать взаимодействие между потоками параллельных вычислений.
  • У видеокарт NVIDIA есть тензорные ядра. Они позволяют очень быстро выполнять операции над матрицами, а параллельные вычисления и матричная математика — это суть ML.

Поэтому для обучения нейросетей нужна видеокарта, у которой в описании есть слова CUDA и «тензорные ядра». Видеокарта без такого описания может иметь сравнимую производительность в видеоиграх, но на ML-задачах разница будет заметной.

Другие производители, например Intel или AMD, тоже работают над своими решениями для ML. Но пока у них нет видеокарт, сравнимых по эффективности.

Объем видеопамяти. Он зависит от размерности пространства признаков. Это размер отдельной записи в датасете, на котором вы будете обучать нейросеть. Отраслевым минимумом считается 8 ГБ видеопамяти на каждую видеокарту. Но если вы планируете учить модель на картинках в высоком разрешении, может понадобиться 16 или даже 24 ГБ.

Количество видеокарт. Современные видеокарты очень быстрые — вполне возможно, что конкретно для вашей задачи хватит и одной. Игровые видеокарты NVIDIA хороши с точки зрения производительности ML, но у них могут быть проблемы с размером и теплоотведением. Из пользовательских подойдут NVIDIA GeForce RTX 3080, 3080 Ti и 3090.

Можно ускорить обучение модели: купить несколько видеокарт и запустить параллельные вычисления на нескольких устройствах. Стоит заранее убедиться, что софт, которым вы планируете пользоваться, рассчитан на работу с несколькими видеокартами. Лучше выбрать более «профессиональные» GPU, например RTX A5000 и A6000, а в особенности — Tesla V100, последний писк моды в мире ML.

Если использовать хотя бы две видеокарты, можно сразу выявить проблемы, связанные с обучением на нескольких GPU. Когда в дальнейшем вам понадобится нарастить мощности, вы будете к этому уже готовы.

Процессор

Выбор процессора зависит от выбора видеокарты. Чтобы процессор обслуживал GPU эффективно, ему нужно достаточное количество ядер. Желательно иметь по четыре ядра на каждую используемую видеокарту, например:

  • для одной видеокарты достаточно 4-ядерного процессора;
  • для четырех понадобится 16-ядерный.

Еще важна скорость соединения с GPU. Каждая видеокарта поддерживает определенное количество соединений PCI Express. Хорошо, если процессор поддерживает такое же количество соединений, как все видеокарты суммарно.

Например, у вас четыре видеокарты NVIDIA A5000, каждая из которых поддерживает 16 соединений PCI Express. Тогда процессору желательно поддерживать 16 × 4 = 64 соединения. Это обеспечивает, например, процессор Intel Xeon W-3200.

Некоторые задачи ML более требовательны к производительности CPU. Для них количество ядер стоит взять с запасом.

Выбор производителя процессора чаще всего не играет роли, но на всякий случай лучше почитать документацию по вашему ML-фреймворку. Например, если он умеет использовать интеловский oneAPI AI Analytics Toolkit, процессор от Intel даст ему дополнительные возможности.

Из конкретных линеек процессоров заслуживают внимания Intel Xeon W и AMD Threadripper Pro. У них много каналов памяти, а общая устойчивость — промышленного уровня.

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

Тут есть два варианта: держать обучающую выборку целиком в оперативной памяти (RAM) или на отдельном устройстве хранения данных, например на диске SSD.

В первом случае объем RAM нужно выбирать исходя из объема датасета.

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

Жесткий диск

Выбор зависит от решений, которые вы приняли в предыдущих пунктах:

  • Если все данные помещаются в оперативную память, жесткий диск не имеет большого значения. Прикиньте, сколько версий обучающей выборки вы можете захотеть держать под рукой и сколько они в сумме будут весить. Для надежности умножьте эту цифру на два и возьмите SSD такого объема. Чтобы хранить очень большие датасеты, можно использовать HDD — он дешевле, но медленнее.
  • Если обучающая выборка не помещается в RAM, требования к жесткому диску возрастают. Лучше всего взять диск с интерфейсом NVMe для максимальной скорости доступа к данным.

Можно комбинировать диск NVMe для «горячих» данных и более объемный SATA SSD для хранения всего, что не понадобится модели в следующую миллисекунду.

В качестве экзотического варианта можно использовать сетевое хранилище (NAS): с Ethernet-портом на 10 Гбит/с вместо жесткого диска хранить данные на отдельном сервере. Но NAS подойдет только для особых случаев — например, если вы хотите быстро переключаться между несколькими хранилищами данных. Потому что при чтении из сетевого хранилища данные будут приходить с большей задержкой, что может быть критично при считывании множества небольших фрагментов.

Блок питания

Мощное ML-железо потребляет много электричества. Стоит сложить энергопотребление всех компонентов и взять блок питания соответствующей мощности, иначе сервер выключится в разгар обучения.

Например, у вас процессор Intel Xeon W9-3495X, который на пике может потреблять почти 2000 Вт, и две видеокарты NVIDIA A5000, каждой из которых требуется 230 Вт. В сумме это почти 2,5 кВт. В зависимости от остального оборудования вам понадобится блок питания на 3 кВт или выше.

Когда аренда лучше покупки?

Когда вы определились с параметрами железа для сервера, возникает вопрос: стоит ли покупать оборудование, или лучше воспользоваться арендой выделенного сервера? Собственная машина для ML — это интересно, но дорого. Не всегда дороговизна оправдана. Есть три случая, когда выгоднее арендовать выделенный сервер.

Случай 1: вы не уверены, что будете заниматься ML плотно. Если сервер простаивает, то с учетом амортизации он генерирует чистый убыток. Арендуя выделенный сервер, вы платите лишь за то время, в которое он используется.

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

Случай 3: вы точно знаете, какие мощности вам нужны — это топовое железо для ML, которое стоит недешево. В этом случае купить железо дешевле и считать подольше не получится, потому что вычисления на слабом железе финансово невыгодны. Купить на барахолке компьютер, который будет считать вашу задачу 10 лет, вдвое дороже, чем арендовать сервер, который посчитает эту же задачу за месяц. А у вас останутся деньги на новый проект.

Если какой-то из этих случаев похож на ваш — возможно, не стоит торопиться с покупкой. Сегодня многие хостинг-провайдеры предлагают специальные серверы для ML с соответствующим железом. Ознакомьтесь с их предложениями — возможно, они покроют ваши потребности.

А чему лично вы хотели бы обучить нейросеть? Пишите в комментариях.

2929
11
2 комментария

Зачем выбирать "писк моды", если можно подобрать более недорогое решение? Сомневаюсь, что кто-то купит карту для домашнего обучения только потому что она модная. Как вам кажется?

1
Ответить

Я так понимаю, речь всё же не про сборку своего сервака, а про рекламу аренды.
И вот эта тема была бы шибко интереснее - от сравнения провайдеров до пошаговых руководств для конкретного сервиса и конкретной задачи. Про AWS такое есть. Российские провы больше пресс-релизы какие-то публикуют там и сям, а полезной информации - по нулям.
А напрасно.

1
Ответить