NVIDIA Riva ускоряет цикл разработки готовых к производству речевых ИИ-приложений.

Разговорный ИИ — горячая область среди специалистов по данным во всем мире. Потребность в ботах, обладающих человеческими разговорными навыками, стала очевидной, поскольку все больше и больше корпораций используют чат-ботов и распознавание речи для общих задач, таких как помощь клиентам и появление виртуальных помощников, таких как Siri, Alexa и т. д.

К сожалению, разработчики машинного обучения, заинтересованные в разработке приложений в этой области, сегодня сталкиваются со своеобразной проблемой: отсутствием общей основы для быстрой разработки и развертывания таких приложений. Для выполнения только подзадачи в этой области (например, обработки естественного языка (NLP)) требуются разные библиотеки и ресурсы разработчика. Таким образом, требуется универсальный SDK для создания диалоговых приложений.

Сегодня мы рассмотрим SDK, решающий указанную выше проблему: NVIDIA Riva. Я работал над этим SDK в качестве стажера по машинному обучению в NVIDIA под руководством г-на Амита Кумара (старший архитектор решений — глубокое обучение). В этом блоге мы поймем, как работает Riva, как его установить и как создавать готовые к работе приложения с помощью Riva.

Рива — Обзор

Как я уже говорил выше, Riva — это SDK для создания приложений Speech AI, которые вы можете настроить в соответствии со своими потребностями. В настоящее время Riva поддерживает три жизненно важные области диалогового ИИ: автоматическое распознавание речи (ASR), обработку естественного языка (NLP), преобразование текста в речь (TTS) и наоборот. Это позволяет нам иметь сквозной рабочий процесс для речи, чтобы вы могли больше сосредоточиться на проблемах, которые вы хотите решить, а не на том, как их решить.

Riva также поддерживает предварительно обученные модели TAO от NGC, что обеспечивает большую гибкость и эффективность конвейеров голосового ИИ. Вы также можете развернуть пользовательские модели, обученные с помощью NVIDIA NeMO, здесь. Если вам интересно узнать о NeMO, вы можете прочитать об основах NeMO в моем блоге здесь.

Общий обзор архитектуры Riva доступен здесь. Неспециалисту может быть сложно понять, поэтому вот небольшой вывод: Riva берет конвейеры (для речевых приложений, используя любую модель, например предварительно обученную модель TAO или модель NeMO) и развертывает их на серверах логического вывода. Таким образом, он делит работу на три разных этапа: разработка, сборка и развертывание.

На первом этапе (разработка) конвейер преобразуется в формат, совместимый с Riva. Этот шаг важен, поскольку модели TAO и NeMO представляют собой отдельные модели, а Riva принимает только полные пайплайны. Итак, мы переводим все контрольные точки модели в формат .riva.

Далее следует этап сборки. Все необходимые объекты для развертывания нашего приложения/сервиса объединяются в промежуточный файл .rmir (промежуточное представление модели Riva).

Наконец, на третьем этапе (развертывание) файл RMIR преобразуется в репозиторий Riva, а все модели экспортируются и оптимизируются для целевой платформы.

Выше был обзор внутренней работы Riva. Далее мы обсудим установку Riva на ваш локальный компьютер.

Монтаж

Лучший способ запустить Riva на локальных машинах — использовать Docker. Docker помогает поддерживать чистую среду для тестирования и развертывания пайплайнов на вашем локальном компьютере с помощью контейнеров, а также может очиститься после того, как вы закончите.

Все связанные с Riva образы контейнеров для Riva доступны на NGC, доступ к которому вы можете получить здесь.

Riva включает сценарии быстрого запуска для быстрой настройки в локальных системах. Чтобы использовать их, убедитесь, что на вашем компьютере установлен Docker, а затем выполните следующие команды:

ngc registry resource download-version nvidia/riva/riva_quickstart:2.0.0
cd riva_quickstart_v2.0.0
bash riva_init.sh
bash riva_start.sh
bash riva_start_client.sh

Приведенный выше код запускает контейнер, в котором вы можете использовать Jupyter для использования различных сервисов. После того, как вы закончите, выключите сервер Jupyter. Затем остановите сервер Riva с помощью команды riva_stop.sh.

Примечание.Описанный выше метод применим только к настройкам dGPU. Для платформы Jetson выполните шаги, указанные здесь.

Пример развертывания конвейера

Мы будем использовать NVIDIA TAO для быстрого доступа к предварительно обученным моделям. Мы будем следовать следующим шагам:

  1. Обучите и настройте модель с помощью TAO
  2. Выполнить вывод на образцах
  3. Оцените производительность модели
  4. Экспорт модели для развертывания
  5. Настройка сервисов Riva
  6. Разверните модель с помощью Riva

Чтобы использовать TAO, установите лаунчер TAO отсюда. Затем мы можем получить доступ к TAO как к инструменту командной строки. Вы можете выбрать, какую задачу вы хотите выполнить из списка. TAO также включает файлы примеров для опробования моделей. Мы загружаем эти файлы, добавляя `download_specs` в качестве аргумента к команде задачи.

Теперь у нас будет общая модель для вывода выборочных данных в нашей системе. Как только вы будете довольны своей общей моделью, приступайте к обучению на основе контекста. Используйте команду «train» с файлом конфигурации обучения (все это предоставляется при загрузке спецификаций).

После повторного обучения вашей модели мы можем оценить производительность вашей модели с помощью команды «оценить». Если оценка не на должном уровне, вы можете точно настроить свою модель с помощью команды «finetune».

После того, как мы закончим настройку модели под наши нужды, мы экспортируем модель в формат «.riva». Теперь мы готовы развернуть ваш Pipeline на Riva. Мы запускаем контейнер производителя службы с помощью команды riva-build, чтобы создать наш файл RMIR.

Наконец, чтобы построить наш репозиторий моделей Riva, мы запускаем riva-deploy в том же формате, что и команда riva-build. Теперь у нас должен быть готовый репозиторий модели для развертывания на сервере.

Наконец, мы модифицируем наш файл «config.sh», чтобы он был совместим с нашими спецификациями репо. Затем мы запускаем riva_init.sh и riva_start.sh для инициализации и запуска нашего сервера.

Теперь ваше приложение развернуто и готово к работе на сервере логических выводов! Чтобы получить доступ к развернутому приложению, подключите репозиторий к простому клиенту. Когда вы получаете доступ к своему клиенту, вы должны увидеть результаты задачи, которую вы настроили в своем приложении.