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 для быстрого доступа к предварительно обученным моделям. Мы будем следовать следующим шагам:
- Обучите и настройте модель с помощью TAO
- Выполнить вывод на образцах
- Оцените производительность модели
- Экспорт модели для развертывания
- Настройка сервисов Riva
- Разверните модель с помощью 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 для инициализации и запуска нашего сервера.
Теперь ваше приложение развернуто и готово к работе на сервере логических выводов! Чтобы получить доступ к развернутому приложению, подключите репозиторий к простому клиенту. Когда вы получаете доступ к своему клиенту, вы должны увидеть результаты задачи, которую вы настроили в своем приложении.