Большое тестирование видеокарт для машинного обучения
Всем привет! Меня зовут Алексей Рудак и я основатель компании Lingvanex, которая занимается решениями в области машинного перевода и транскрипции речи. Для нашей работы мы постоянно тренируем языковые модели. Наша команда использует десятки разных видеокарт, выбранных под разные задачи: где-то нужна мощная станция DGX, а где-то достаточно старой игровой карты типа RTX 2080Ti. Выбор оптимальной конфигурации GPU сэкономит вам не только время на тренировку, но и деньги.
Интересно то, что в интернете довольно мало статей с тестами GPU именно для скорости тренировки языковых моделей. В основном встречаются только тесты inference. Когда вышел новый чип H100, в отчете NVidia было указано, что при тренировке он быстрее A100 до девяти раз, но для наших задач новая карта оказалась всего на 90% быстрее старой. Для сравнения: у наших облачных провайдеров разница в цене между этими GPU составляла 2 раза, поэтому переходить на новый H100 для экономии денег смысла не было.
В дополнение к этому мы брали на тест станцию DGX, которая состоит из 8 видеокарт A100 80GB и стоит 10 тысяч долларов в месяц. После теста стало ясно что соотношение цена / производительность этой станции нас полностью не устраивает и за эти деньги мы можем взять 66 x RTX 3090, которые в сумме принесут гораздо больше пользы.
Наши языковые модели для перевода имеют до 500 миллионов параметров (в среднем от 100 млн до 300 млн). Возможно, если значительно увеличить кол-во параметров, то соотношение цена / производительность от DGX станет лучше. На данный момент мы не тренируем большие языковые модели, которые могут переводить сразу между всеми языками во всех вариациях, а применяем отдельные языковые модели под каждую языковую пару, например англо-немецкую. Каждая из таких моделей занимает от 120 до 300 Mb.
Стоит отметить, что для разных языков в интернете находится разное количество данных, и если, например, для испанского можно найти 500 млн предложений с переводом, то для тибетского не более миллиона. Из-за этого модели для разных языков тренируются с разным числом параметров и на выходе имеют разное качество перевода. Для создания модели перевода с английского на испанский мы используем сервер с 4 x RTX 4500 и 256GB RAM, а тибетский язык вполне можно натренировать на RTX 2080 Ti c 16GB RAM, так как увеличивать сложность нейронной сети, и как следствие, брать более мощный сервер при небольшом объеме данных не имеет смысла.
Выбор графических процессоров и немного теории
Тренировка языковых моделей проходила с использованием фреймворка OpenNMT-tf. Данный этап включал в себя такие шаги как подготовка данных, обучение модели и сравнение ее с эталонным переводом. Использование FP16 вместо FP32 во время обучения позволило существенно сократить время тренировки языковых моделей не ухудшая качество перевода, но не все наши GPU поддерживали это.
При выборе графических процессоров стандартно берут во внимание такие показатели как вычислительная мощность (TFLOPS), видеопамять (VRAM), поддержка библиотек и фреймворков, бюджет и другие факторы (размер и форм-фактор видеокарты, требования к энергопотреблению, охлаждение и совместимость с вашей системой). При обучении моделей генерации текста также следует помнить, что для разных языков будет потребляться разное количество ресурсов. Например, для кодирования одного символа языков латинской группы используется 1 байт, для кириллической 2 байта, а для с языков, содержащих иероглифы — 3 байта. Понимание того, какими характеристиками будет обладать ваша видеокарта в существенной мере влияет на скорость процесса обучения.
При обучении моделей с точки зрения использованных GPU, условно видеокарты были поделены на две группы согласно периоду использования: ранние видеокарты, с помощью которых проводились первые замеры скорости обучения и карты, находящиеся в работе на данный момент. С основными характеристиками данных видеокарт можно ознакомиться в таблице 1 и 2 соответственно.
Таблица 1- Ранее применявшиеся графические процессоры и их технические параметры
Количество GPU | Название | VRAM, GB | CUDA | FP16, TFLOPS | FP32, TFLOPS |
1 | Tesla V100-SXM2 | HBM2, 16 | 7.0 | 31.33 | 16.31 |
2 | Tesla V100-SXM2 | HBM2, 32 | 7.0 | 31.33 | 15.67 |
1 | RTX 4060 Ti | GDDR6, 8 | 8.9 | 22.06 | 22.06 |
1 | Nvidia A40 | GDDR6, 48 | 8.6 | 37.42 | 37.42 |
2 | Nvidia A40 | GDDR6, 96 | 8.6 | 37.42 | 37.42 |
1 | Nvidia A100 | HBM2, 40 | 8.0 | 77.97 | 19.49 |
1 | Nvidia A100 | HBM2, 80 | 8.0 | 77.97 | 19.49 |
1 | Nvidia RTX A6000 | GDDR6, 48 | 8.6 | 38.71 | 38.71 |
1 | Nvidia A10 | GDDR6, 24 | 8.6 | 31.24 | 31.24 |
8 | Nvidia A10 | GDDR6, 192 | 8.6 | 31.24 | 31.24 |
1 | Nvidia H100 | HBM3, 80 | 9.0 | 204.9 | 51.22 |
Примечания
1. При CUDA большим 7.0, использование FP16 будет давать прирост скорости тренировки, в зависимости от версии CUDA и характеристик самой видеокарты.
2. Если в спецификации к видеокарте указано, что соотношение производительности FP16 к FP32 больше, чем 1 к 1, то использование mixed precision будет гарантированно давать прирост скорости тренировки на указанную в спецификации величину. Например, для Quadro RTX 6000 значение FP16 TFLOPS в 32.62 (2:1) ускорит тренировку минимум в два раза (на практике в 2.4 раза).
Таблица 2 — Используемые в данное время модели графических процессоров и их основные характеристики
Количество GPU | Название | VRAM, GB | CUDA | FP16, TFLOPS | FP32, TFLOPS |
1 | Quadro RTX 6000 | GDDR6, 24 | 7.5 | 32.62 | 16.31 |
2 | Quadro RTX 6000 | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Quadro RTX 6000 | GDDR6, 96 | 7.5 | 32.62 | 16.31 |
2 | Nvidia TITAN RTX | GDDR6, 48 | 7.5 | 32.62 | 16.31 |
4 | Nvidia RTX A4500 | GDDR6, 80 | 8.6 | 23.65 | 23.65 |
1 | Nvidia GeForce RTX 3090 | GDDR6X, 24 | 8.6 | 35.58 | 35.58 |
1 | Nvidia GeForce RTX 3070 | GDDR6, 8 | 8.6 | 20.31 | 20.31 |
* — значения для FP16, TFLOPS и FP32, TFLOPS взяты из спецификаций на один графический процессор
Процесс обучения и тестирование GPU
Обучения моделей проходило с использованием набора из 18 графических процессоров. В процессе тренировки нейросетей было использовано большое количество языковых пар (более ста языков). Во время обучения, за основу брались следующие параметры нейросети:
vocab size = 30 000
numunits = 768
layers = 6
heads = 16
inner dimension = 4 096
Для начала охарактеризуем GPU, которые принадлежали к первой группе исходя из таблицы 1. За основу сравнения показателей будет браться время в минутах и секундах, затраченное на обучения модели при примерной скорости в 1 000 шагов и размером аккумулируемого батча (Effective batch size) равного 100 000 токенов.
Подчеркнем, что для первой группы замеры скорости проводились с применения механизма alignment и только с использованием FP32. Без использования данного механизма скорость обучения на некоторых серверах может быть значительно быстрее.
Механизм alignment позволяет сопоставить подстроки в базовом и переведенном тексте. Он нужен для перевода форматированного текста, например веб-страниц, когда подстрока в предложении может быть выделена другим шрифтом и должна переводится с выделением.
Взяв во внимание вышеназванные параметры нейросети, лучшее время из первой таблицы показал графический процессор Nvidia H100 со временем обучения в 22 минуты, промежуточное время у графического процессора той же марки GeForce RTX 4060 Ti с замером по времени обучения в 72 минуты и на последнем месте оказался графический процессор Tesla V100-SXM 2 с показателями в 140 минут.
Также при тестировании GPU использовались восемь карт Nvidia A10 со скоростью обучения в 20 минут и 28 секунд, две карты Nvidia A40 со временем в 56 минут и две карты Tesla V100-SXM, которые показали время в 86 минут. Одновременное применение нескольких карт одной и той же серии графического процессора может ускорить процесс тренировки моделей и показать почти одинаковое время с графическими процессами, которые обладают более высокими мощностями, но такая техника может оказаться недостаточно рациональной в финансовом и процедурном плане. Результаты замеров скорости обучения можно наблюдать в таблице номер 3.
Таблица 3 — Замеры по времени обучения на использованных ранее графических картах (использование alignment, effective batch-size =100k, fp32)
Количество используемых графических процессоров | Графический процессор | Примерная скорость (мин.сек), 1 000 шагов | Используемый Batch size |
8 | Nvidia A10 | 20,28 | 6 250 |
1 | Nvidia H100 | 22 | 25 000 |
1 | A100 (80 Gb) | 40 | 25 000 |
1 | A100 (40 Gb) | 56 | 15 000 |
2 | Nvidia A40 | 56 | 12 500 |
1 | RTX A6000 | 68,25 | 12 500 |
1 | GeForce RTX 4060 Ti | 72 | 4 167 |
1 | Nvidia A40 | 82,08 | 12 500 |
2 | Tesla V100-SXM | 86 | 4 167 |
1 | Nvidia A10 | 104,50 | 5 000 |
1 | Tesla V100-SXM2 | 140 | 4 167 |
Далее проведем сравнительный анализ графических ускорителей, используемые в настоящее время (таблица номер 2). Для данной группы графических процессоров замеры скорости проводились с использованием механизма выравнивания (alignment), а также с применением FP16 и FP32. Замеры скорости, включая данный механизм и mixed precision, будут представлены ниже, в таблицах 4 и 5 соответственно.
Итак, проведя замеры скорости графических процессоров из данной таблицы, можно сказать, что первое место занял графический процессор серии RTX A4500 со временем обучения в 31 минуту, но следует подчеркнуть, что такая скорость тренировки моделей получилась за счет увеличения количества единиц используемого графического процессора до 4. Не беря во внимание данный факт, скорость обучения у вышеназванного графического процессора будет намного больше, что разместит его в итоговой таблице на предпоследних местах.
Следом, на втором месте, расположился графический процессор серии Quadro RTX 6000 со временем обучения в 47 минут. Следует обратить внимание, что такая скорость обучения обратно же обусловлена количеством единиц используемого процессора, которое равно четырем. Использование только одного такого графического процессора даст потерю скорости примерно в 3.2 раза и соответственно составит приблизительно 153 минуты и разместит его на последнем месте.
Третью строчку занял графический процессор серии TITAN RTX со временем в 75 минут и 85 секунд. Данный показатель по скорости обучения связан с использованием 2 процессоров, что позволило сократить время обучения модели.
Безоговорочным лидером по скорости обучения в количестве одной единицы безусловно будет графический процессор серии GeForce RTX 3090 со временем в 78 минут и 26 секунд. Увеличение количества единиц данного графического процессора ускорит скорость обучения модели, что явно обгонит все вышеперечисленные модели графических процессоров. Данные по замерам времени обучения моделей можно видеть в таблице номер 4.
Таблица 4 — Сравнительный анализ скорости обучения языковых моделей на ранее использованных графических процессорах (использование alignment, effective batch-size =100k, fp32)
Количество GPU | Название | Примерная скорость (мин.сек), 1 000 шагов | Используемый Batch size |
4 | Nvidia RTX A4500 | 31 | 5 000 |
4 | Quadro RTX 6000 | 47 | 6 250 |
2 | Nvidia TITAN RTX | 75,85 | 6 250 |
1 | GeForce RTX 3090 | 78,26 | 6 250 |
2 | Quadro RTX 6000 | 88 | 6 250 |
1 | GeForce RTX 3070 | 104,17 | 2 000 |
1 | Quadro RTX 6000 | 153 | 6 250 |
Следующие измерения скорости обучения проводились с использованием FP16. По сравнению с FP32, половинная точность дает возможность уменьшить объем памяти, потребляемой при обучении модели, и ускорить вычисления на GPU. Качество перевода языковых моделей натренированных с FP16 сопоставимо с FP32.
Измеряя время обучения моделей с использованием FP32 по предыдущей таблице, можно сказать, что время обучения нейронной сети сократилось почти в два раза. По результатам измерения производительности можно заметить, что позиции графических процессоров в таблице 4 остались без особых изменений. Карта серии Quadro RTX 6000 поднялась с пятой позиции на шестую, опередив GPU GeForce RTX 3090 на 96 секунд. Итоговые цифры приведены в таблице 5.
Таблица 5 — Сравнительный анализ скорости обучения языковых моделей на ранее использованных графических процессорах (использование alignment, effective batch-size =100k, fp16)
Количество GPU | Название | Примерная скорость (мин.сек), 1 000 шагов | Используемый Batch size |
4 | Nvidia RTX A4500 | 15,81 | 10 000 |
4 | Quadro RTX 6000 | 20,34 | 12 500 |
2 | Nvidia TITAN RTX | 32,68 | 6 250 |
2 | Quadro RTX 6000 | 37,93 | 10 000 |
1 | GeForce RTX 3090 | 38,89 | 10 000 |
1 | GeForce RTX 3070 | 48,51 | 2 500 |
1 | Quadro RTX 6000 | 52,56 | 10 000 |
Заключение
Кроме выбора GPU еще стоит отметить выбор оптимального cloud-провайдера. Разница в их стоимости может отличаться до 2 раз за ту же конфигурацию сервера. Дешевая на первый взгляд цена может привести к проблемам со стабильностью, отсутствием техподдержки или списанием произвольных сум с карточки.
Для нашего бизнеса мы используем 6 разных провайдеров и до сих пор не решились перенести все к одному в виду различных рисков.
Если вы занимаетесь машинным обучением, то большие cloud провайдеры типа Google, AWS, OVH могут дать вам бесплатных кредитов на сумму аж до 100 тыс USD на год, которую вы можете потратить на их сервисы. На их сайтах есть программы поддержки стартапов, где можно отправить заявку на такой грант. Они заинтересованы, чтобы вы разместили ваши сервера у них, и чем более сложная у вас инфраструктура, тем больший бесплатный грант они могут вам предложить.
Большие cloud провайдеры работают только с профессиональными GPU серий A, L, H. Мелкие провайдеры иногда предлагают игровые карты RTX 30-x и 40-x серий, которые за ту же производительность имеют вдвое меньшую цену. После ряда тестов мы выбрали Nvidia RTX 3090 как лучшую карту для наших задач при соотношение цена / производительность. Сервер с одной RTX 3090 и 16GB обходится нам около 150 долларов в месяц. Для тренировки большого кол-ва данных мы берем 4 карты в один сервер.
Если вы постоянно тренируете модели и планируете заниматься этим несколько лет, то рассмотрите возможность собрать свои сервера на игровых видеокартах.