Как мы тестировали суперкомпьютер DGX-H100 и что из этого вышло

489da0537b216f95d4efe0a4efab957a.png

Всем привет! Меня зовут Алексей Рудак, и я — основатель компании Lingvanex, которая уже 7 лет занимается решениями в области машинного перевода и транскрипции речи. 

Время с момента моей первой статьи на Хабре прошло незаметно. Это были годы амбиций, упорства и стремления сделать лучший в мире переводчик, не имея в своем распоряжении тех ресурсов, которые доступны крупным корпорациям. Мне всегда казалось, что небольшие инженерные команды при правильном руководстве, мотивации и ограниченном финансировании, могут быстро создавать решения мирового уровня, порой буквально «из песка и палок». По крайней мере среди моих знакомых было несколько таких случаев, которые сделали их миллионерами. А что будет, если им дать еще суперкомпьютеры? А если дать им размеченные датасеты ? В этой статье я бы хотел порассуждать на эту тему, тем более нашей команде подвернулся интересный случай, о котором я хотел рассказать.

Три месяца назад на мой email пришло предложение с возможностью бесплатного теста вычислительной станции от Nvidia DGX-H100. Одна из компаний продавала эти системы и искала потенциальных покупателей из числа тех, кто тренирует большие языковые модели, –, а это как раз мы. Это было предложение, от которого нельзя было отказаться. Все наши предыдущие сервера не шли в какое-либо сравнение с той производительностью, которая оказалась в наших руках. 

Диапазон цены на DGX-H100 составляет от 250 до 350 тыс долларов. Ее заявленная производительность на fp8 составляет около 32 петафлопс (petaFlops). Мы тренируем наши модели для переводчика на fp16 и получаем около 16 petaFlops под задачи. Но что это означает для нас? Для этого стоит вернуться в 2017 год…

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

В это же время запустился один из наших конкурентов в области перевода — DeepL. У них было около миллиона долларов инвестиций, команда из 10 человек, десяти языков и простой сайт. В принципе, это было то же самое, что и у нас, за исключением двух факторов — системы, на которой они тренировали свои языковые модели, и количества качественных датасетов.

Тогда для тренировок моделей я арендовал 20 серверов на Hetzner c видеокартами GTX 1080 по цене 99 евро в месяц. На fp32 одна карта выдавала 9 терафлопс (teraFlops), fp16 не поддерживался. Тогда не было возможности их соединить в одну вычислительную систему (через Horovod например), поэтому тренировки разных языков шли параллельно и занимали около месяца на одну итерацию.  После каждой итерации проводились тесты качества перевода, затем исправление данных, и процесс повторялся снова. Как же трудно мне давались эти долгие месяцы ожидания! Расчеты показывали что если увеличить сложность нейронной сети, то качество перевода значительно улучшалось, но в то же время время тренировки растягивалось до года. 

В 2017 года Deepl опубликовал статью что у них для тренировок моделей используется компьютер в 5 petaFlops, что на тот момент в рейтинге топа коммерческих суперкомпьютеров занимало 23 место (top500.org). Для меня это казалось недостижимым и одновременно расстраивало, — где они могли достать этот компьютер с теми инвестициями? Через какое-то время мы выиграли конкурс от AWS и нам дали 100 тыс кредитов, которые мы могли потратить на сервера с новейшей на то время Nvidia V100, по 8 GPU на сервер, что давало в сумме уже 125 teraFlops на fp32. Дело пошло чуть быстрее, но все равно было медленно…

Также у DeepL был сайт Linguee — огромная база данных,   где собраны примеры параллельных переводов с сайтов, которые локализованы на несколько языков.  У нас были только open-source датасеты, которых в то время было не так много. Парсить интернет для поиска новых качественных данных оказалось очень затратно, поэтому вскоре мы прекратили. Но тем не менее, я продолжал работать над своим переводчиком. 

Прошло семь лет. Сейчас DeepL — большая компания, которая оценивается в 2 миллиарда долларов и я следил за ней с момента ее основания.  По мере роста DeepL меня постоянно волновали одни и те же вопросы:

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

И вот у меня появился компьютер, который  оказался намного производительней, чем был у DeepL в 2017 году. За все это время мы напарсили и отфильтровали много данных. Cейчас стало намного больше opensource датасетов. Если ранее модели тренировали, используя в среднем 10 миллионов переведенных строк, то теперь датасеты возросли до 120 миллионов строк на языковую пару. То есть с проблемой с данными было решено, осталось найти, на чем их тренировать.

У меня появилась возможность получить ответ на терзавший меня вопрос. Началась подготовка к тестам.

Подготовка к тестированию

Наши языковые модели в основном обучаются на серверах с несколькими RTX 3090 и A4500, реже на A6000. Ранее были попытки протестировать DGX-A100, но по каким-то причинам производительность на них оказалась намного ниже ожидаемой, а поставщик этой машины не смог нам помочь.  Самым производительным, что удалось успешно протестировать до того дня, был сервер  8 x L40S. А теперь у нас оказался  DGX-H100.

Итак, что такое NVIDIA DGX H100?

NVIDIA DGX H100 — это серверная система, разработанная NVIDIA, которая представляет собой мощное решение для высокопроизводительных вычислений (HPC), глубокого обучения и искусственного интеллекта. Она построена на основе графических процессоров NVIDIA H100 Tensor Core с архитектурой Hopper.

Таблица 1 — Технические данные DGX H100

790e5fa09153c1ab120a72b97bfafb6c.png

В общем, DGX-H100 — штука мощная и перспективная, но, к сожалению, с первого раза тренировка моделей не запустилась. В попытке исправить ситуацию продавцы DGX сначала позвали своих инженеров, потом инженеров Nvidia, и вместе с нашими DevOps начали искать, в чем причина. Все это растянулось на 2 недели, и, как всегда, это была совместимость версий большого кол-ва разных библиотек. Вскоре мы все починили.

Тестирование 

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

Предыдущие результаты показывали, что увеличение количества слоев нейросети приводит к значительному росту в качестве перевода (изменение с 6 до 12 слоев). До этого самое большое, что мы тренировали, было 12 слоев, так как все, что больше, — сильно долго ждать. По расчетам, 10 дней хватало, чтобы натренировать модель в 24 слоя. Расчетное количество параметров языковой модели — 1,5 миллиарда. Для тестирования было выбрано 125 миллионов строк перевода с арабского на английский.

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

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

Тестовая модель v1 — конфигурация нейросети, при которой у нас получается значительно улучшить качество перевода при тех же данных. Но аренда сервера типа  L40S уже дорогая, несколько тысяч долларов на 1 тренировку, используется только для индивидуальных решений под клиентов. Например, когда нужно качественно переводить только одну из ниш (финансы, промышленность, медицины и другие, с использованием терминологии клиента).

Тестовая модель v2 — конфигурация с увеличенным числом параметров, которую мы хотим проверить имея на руках DGX-H100, чтобы посмотреть, чего можно достичь, и не ждать при этом целый месяц.

Таблица 2 — Использованные параметры модели

98c5e5546e4324484609f8cdc7d04a49.png

Полученные результаты

После того, как все 3 модели натренированы давайте посмотрим результаты качества перевода. Для этого будем использовать метрики BLEU и COMET, и тестовые датасеты NTRex (От Microsoft) и Flores (от Facebook).

Таблица 3 — Показатели качества перевода двух конфигураций моделей: тестовая модель v1 (586 МБ) и базовая модель.

22c708575f8a49a827a60654d03d7326.png

Из таблицы виден рост по метрике BLEU. Числа небольшие, но «на глаз» качество перевода значительно улучшается.

Четвертая таблица отражает показатели производительности для модели v2 (1,4 ГБ) натренированной с помощью DGX и базовой модели на тех же наборах тренировочных данных.

Таблица 4 — Показатели производительности двух конфигураций моделей: тестовая модель v2 (1,4 ГБ) и базовая модель.

d9b4052356a5c5558dda6f66befabbc3.png

В таблицах 5 и 6 представлены различия в качестве перевода у модели между конфигурациями L24 (24 слоя) и L12 (12 слоев),   то есть с тренировкой DGX и самым производительным сервером на L40S, который у нас был до этого. Отличия незначительные, которые сложно заметить «на глаз», просматривая переведенные предложения.

Таблица 5 — Показатели качества между модели, натренированной с помощью DGX (24 слоя) относительно нашей самой большой модели (12 слоев)

0c59edc2eeddd62e84e426ac8adc95a6.png

Итоги и выводы

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

В нашем случае делать новую модель с количеством более 24 слоев используя для этого DGX не имеет смысла, так как самый большой прирост был именно с 6 до 12 слоев. Прирост по качеству у модели с 24 слоями оказался небольшой, и если смотреть глазами переводы 100 разных предложений, то сложно заметить разницу. Но если по каким-то причинам у вас есть ресурсы уровня DGX, то это быстрый способ сильно продвинуться по качеству перевода, особо не напрягаясь.

Использование таких систем, как DGX-H100, позволяет проводить нам одну тренировку модели с 12 слоями за 2 дня вместо 20 на нашем сервере с 4 x RTX A4500, и уже примерно за 10 итераций добиться серьезного роста качества. Но конкуренты тоже не стоят на месте и постоянно улучшают свои модели. Это постоянная гонка ресурсов и технологий. Но тогда в чем отличие нашего переводчика?  

Наше основное отличие от Google и DeepL в том, что мы поставляем локальное решение под Linux, которое работает без доступа в интернет и может переводить учитывая терминологию клиента. Также его можно интегрировать как SDK в любое другое приложение. Наше качество перевода специализированного текста будет лучше, чем у того же DeepL. Однако чтобы делать эти решения быстро и массово,   как раз и нужен DGX.

Поэтому, отвечая на свой же вопрос 2017 года, изменило бы развитие проекта владение в то время машиной уровня DGX и насколько, — да, изменило бы, причем сильно. Но, к сожалению, этой машиной мы не владели и на данный момент тоже не владеем. Однако это не повод опускать руки, а, как настоящие инженеры, продолжать искать оптимальные решения в той ситуации, которая есть. Это заставляет мозг работать на пределе и двигаться вперед. 

Вместо того чтобы тренировать одну большую модель, используя суперкомпьютер, теперь мы тренируем две отдельных языковых модели. Первая делает базовый перевод, а вторая языковая модель исправляет за ней ошибки. При таком подходе качество перевода сопоставимо с максимальной моделью которая натренирована с DGX, но по затратам получается в десять раз дешевле.  Если кто хочет протестировать эти модели (как REST API, SDK или Docker) — пишите в личку.

© Habrahabr.ru