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

В общем, 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 – Использованные параметры модели

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

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

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

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

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

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

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

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

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

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

В нашем случае делать новую модель с количеством более 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) - пишите в личку.