Цель: найти недорогой и эффективный метод поддержки 200 предложений в секунду с использованием современных моделей машинного перевода Хельсинки (https://huggingface.co/Helsinki-NLP)

(Это работа в процессе, пока я продолжаю тестирование)

Методы перевода

  1. Предложение за предложением

Модели перевода Хельсинки (и многие модели библиотеки трансформаторов) были обучены с использованием данных одного предложения. В результате это потенциально даст наилучшие результаты.

2. Группы предложений (по 2–3 за раз)

Некоторое предварительное тестирование показало более быстрое время отклика при использовании этого массового метода по сравнению со всеми предложениями параллельно.

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

Моя тестовая модель, используемая для всех ссылок, была англо-китайской моделью.

Тестовое предложение: «Это полное тестовое предложение ни о чем, что действительно имеет значение, потому что оно просто для того, чтобы увидеть, можно ли легко преобразовать этот английский текст в китайский за разумное время».

Групповые предложения: тестовое предложение повторяется X раз.

Нагрузочное тестирование и цены

Все тестирование проводится на Google Cloud Platform (GCP). Тестирование виртуальных ЦП выполняется в CloudRun с экземпляром vCPU x2 и 8 ГБ памяти. CO означает инстанс, оптимизированный для вычислений, с vCPU x8 и памятью 32 ГБ. Тестирование графического процессора выполняется на виртуальных машинах. Код запускается внутри контейнера Docker.

Согласно этой статье, GPU V100 может поддерживать 53 секунды в секунду. Кроме того, другие ресурсы предполагают, что графические процессоры увеличивают успех при параллельной обработке задач в производственной среде, поэтому я решил выяснить, насколько. Графические процессоры K80 — это те, которые используются в Google Colab, и они дешевле, чем V100 (230 долларов в месяц против 1250 долларов в месяц), поэтому я также тестировал K80.

виртуальные ЦП

1 виртуальный ЦП = 0,5 предложения в секунду (25 долл. США в месяц; линейное увеличение на каждый виртуальный ЦП)

CO = 1,8 предложения в секунду (225 долларов в месяц)

Обсуждение: в статье, на которую я ссылался выше, они получили 6 предложений в секунду, однако я не смог приблизиться к этому, и они не указали, как они настроили свои процессоры.

графический процессор

(Графические процессоры были подключены к ВМ с 2 виртуальными ЦП и 7,5 ГБ памяти)

1 K80 = 1,7 предложения в секунду (230 долларов в месяц)

T4 = 3,7 предложения в секунду (180 долларов в месяц)

V100 = 4 предложения в секунду (1250 долларов в месяц)

Время отклика

CloudRun: 2 виртуальных процессора и 8 ГБ памяти (некоторые тесты приводили только к тайм-аутам)

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

1 предложение

CloudRun = 2,4 секунды

СО = 0,6 секунды

К80 = 0,65 секунды

Т4 = 0,3 секунды

V100 = 0,35 секунды

Пошаговые предложения параллельно

Количество предложений: 2, 3, 4

CloudRun: 4,3 с, 4,7 с, 7,3 с (несколько непоследовательно)

CO: 0.6s, 0.9s, 1.3s

K80: 0.66s, 1s, 1.7s

T4: 0.34s, 0.3s, 0.52s

V100: 0.35s, 0.35s, 0.35s

5 предложений (параллельно)

CloudRun = 7,6 секунды (иногда таймауты)

СО = 1,7 секунды

К80 = 2,4 секунды

Т4 = 1 секунда

V100 = 0,75 секунды

10 предложений (параллельно)

СО = 4,3 секунды

К80 = 5,5 секунды

Т4 = 3 секунды

V100 = 2,8 секунды

Группа из 5 предложений

CloudRun = 7,8 секунды

СО = 2 секунды

K80 = 1,9 секунды (быстрее, чем 5 в параллельном режиме)

T4 = 0,95 секунды (примерно так же, как и при параллельном)

V100 = 0,9 секунды (быстрее, чем 5 параллельно)

Группа из 10 предложений

СО = 3,1 секунды

K80 = 2,7 секунды (быстрее, чем 10 в параллельном режиме)

T4 = 1,4 секунды (быстрее, чем 10 параллельно)

V100 = 1,25 секунды (быстрее, чем 10 параллельно)

Постоянные тесты

(Считается устойчивым, если среднее время соответствует времени одного запроса для предложения или группы предложений. Например, группа из 10 предложений, равная 0,5, означает, что процессор обрабатывал 0,5 запросов в секунду для группы из 10 предложений при том же среднем времени ответа. как будто мы сделали только один запрос.)

Группы из 10 предложений на 10 секунд

K80 = 0,33 группы по 10 предложений в секунду

T4 = 0,75 групп из 10 предложений в секунду

V100 = 0,8 группы из 10 предложений в секунду

Неофициальные выводы

Я заметил, что при тестировании графических процессоров существует порог, при котором любое немного большее количество запросов в секунду приведет к резкому увеличению времени для ответов. По сути, система перегружается. Например. Я попытался использовать короткое предложение из 75 символов, мне удалось поразить K80 со скоростью 3 запроса в секунду, а среднее время отклика составило 0,3 секунды. Однако увеличение этого показателя до 3,5 заняло 0,72 с, а увеличение до 4 в секунду — 2,7 с.

Если текст слишком короткий, у него может быть инвертированное время отклика. Например, в модели с английского на китайский для «Hello» на графическом процессоре K80 требуется 8 секунд. Это действительно модель, предназначенная для предложений.

Увеличение размера сервера N2 V100 с 2 виртуальных ЦП до 8 виртуальных ЦП и 32 ГБ памяти не повлияло на результат.

Заключение

Я все еще хотел бы протестировать A100, однако, судя по тому, что я вижу, кластер T4 кажется лучшим решением.

Альтернативный сторонний сервис, который я бы порекомендовал

Я не планировал использовать сторонний сервис для моделей перевода в Хельсинки, так как не думал, что можно получить экономичный сторонний вариант, поскольку основные облачные провайдеры были неоправданно дорогими вариантами. Однако я обнаружил, что nlpcloud.io, новый API-сервис NLP с поддержкой графического процессора, на который я недавно подписался, предлагает отличный масштабируемый вариант для перевода с использованием моделей Хельсинки. Я смог перевести блок из 5 предложений за 1,45 секунды. У них есть произвольный лимит в 1k символов. Учитывая, что эти модели предназначены для предложений, а не блоков текста, это не лишено смысла.