Большое тестирование видеокарт для машинного обучения

62b52b31d0ce56e26c3761277417d1e8.png

Всем привет! Меня зовут Алексей Рудак и я основатель компании 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

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

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 карты в один сервер.

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

© Habrahabr.ru