Создание демонстрационного стенда SpeechKit Hybrid
- Начните работу с Yandex Cloud
- Установите дополнительные зависимости
- Подготовьте репозиторий с конфигурацией Terraform
- Подготовьте SSH-ключи
- Добавьте переменные для конфигурации Terraform
- Создайте инфраструктуру с помощью Terraform
- Организуйте постоянный канал связи с сервером Yandex Cloud
- Проведите нагрузочное тестирование распознавания и синтеза речи
SpeechKit Hybrid предоставляет возможности сервиса Yandex SpeechKit для распознавания и синтеза речи. Вы можете развернуть демонстрационный стенд SpeechKit Hybrid с помощью сервисов Yandex Cloud через Terraform. Так можно потестировать приложения распознавания и синтеза, размещаемые в Docker-контейнерах.
Работа по созданию демонстрационного стенда ведется на двух машинах:
- Локальной. Ниже предполагается, что используется ОС Linux.
- Виртуальной, соответствует системным требованиям SpeechKit Hybrid. На этой ВМ запускаются Docker-контейнеры.
В демонстрационном стенде рассматривается модель лицензирования Cloud Billing, поэтому сведения о каждом запросе к сервису SpeechKit Hybrid отправляются в сервис Yandex Cloud Billing.
Чтобы развернуть демонстрационный стенд SpeechKit Hybrid:
- Начните работу с Yandex Cloud.
- Установите дополнительные зависимости.
- Подготовьте SSH-ключи.
- Добавьте переменные для конфигурации Terraform.
- Создайте инфраструктуру с помощью Terraform.
- Организуйте постоянный канал связи с сервером Yandex Cloud.
- Проведите нагрузочное тестирование распознавания и синтеза речи.
В случае ошибок воспользуйтесь инструкцией по отладке.
Начните работу с Yandex Cloud
-
Зарегистрируйтесь в Yandex Cloud. Процесс регистрации различается для физических и юридических лиц:
-
Перейдите в консоль управления
, затем войдите в Yandex Cloud. -
Создайте каталог в консоли управления. В нем будут располагаться ваши ресурсы:
-
В консоли управления
в списке слева выберите нужное облако. -
Справа сверху нажмите кнопку
Создать каталог. -
Введите имя каталога. Требования к имени:
- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
(Опционально) Введите описание каталога.
-
Выберите опцию Создать сеть по умолчанию. Будет создана сеть с подсетями в каждой зоне доступности. Также в этой сети будет создана группа безопасности по умолчанию, внутри которой весь сетевой трафик разрешен.
-
Нажмите кнопку Создать.
-
-
Создайте сервисный аккаунт
sk-hybrid-example
.Сервисный аккаунт позволяет гибко настраивать права доступа. Подробнее о сервисном аккаунте читайте в разделе Сервисные аккаунты.
-
Назначьте сервисному аккаунту роли:
compute.editor
— чтобы создать ВМ Yandex Cloud;container-registry.images.puller
— чтобы работать с Docker-образами в реестре Yandex Container Registry;iam.serviceAccounts.keyAdmin
— чтобы создать API-ключ для авторизации в Yandex Cloud Billing.
-
Сохраните идентификатор и секретную часть ключа. Их нельзя запросить позднее.
-
Создайте реестр в Container Registry.
-
Сообщите команде SpeechKit
идентификатор реестра. В вашем реестре появятся необходимые контейнеры и образы.
Установите дополнительные зависимости
На локальной машине:
- Установите интерфейс командной строки Yandex Cloud (YC CLI).
- Аутентифицируйте свой сервисный аккаунт через YC CLI.
- Установите Terraform.
Подготовьте репозиторий с конфигурацией Terraform
На локальной машине:
-
Склонируйте репозиторий с конфигурацией Terraform
, из которой будет развернута необходимая инфраструктура:git clone git@github.com:yandex-cloud-examples/yc-speechkit-hybrid-deployment.git
-
В терминале перейдите в директорию склонированного репозитория.
Подготовьте SSH-ключи
SSH-ключи понадобятся для аутентификации при подключении к ВМ Yandex Cloud. Чтобы подготовить их, выполните следующие действия на локальной машине:
-
Если у вас нет пары из открытого и закрытого SSH-ключей, создайте ее:
ssh-keygen -t rsa -f $HOME/.ssh/speechkit_hybrid
После запуска команды будет предложено ввести пароль для закрытого ключа. Если не хотите указывать пароль, нажмите Enter.
-
В директории склонированного репозитория создайте символическую ссылку, которая указывает на публичный SSH-ключ:
ln -s ~/.ssh/<название_ключа>.pub ./keys/ssh-user-id-rsa.pub
В команде передаются:
~/.ssh/<название_ключа>.pub
— файл с публичным SSH-ключом. Если вы создали ключ в предыдущем шаге, укажите~/.ssh/speechkit_hybrid.pub
../keys/ssh-user-id-rsa.pub
— символическая ссылка. Путь указан относительно текущей директории репозитория.
Добавьте переменные для конфигурации Terraform
В директории репозитория yc-speechkit-hybrid-deployment
располагается файл terraform.tfvars.template
. Он представляет собой Terraform-шаблон, по которому задаются переменные окружения. Эти переменные передаются YC CLI и Terraform во время выполнения команд.
Чтобы задать переменные для конфигурации Terraform, выполните следующие действия на локальной машине:
-
Создайте копию Terraform-шаблона в директории репозитория
yc-speechkit-hybrid-deployment
:cp ./terraform.tfvars.template ./terraform.tfvars
-
Укажите значения переменных в файле
terraform.tfvars
:CR_REGISTRY_ID
— идентификатор реестра Container Registry;BILLING_STATIC_API_KEY
— секретная часть API-ключа.
-
(Опционально) Добавьте переменную
NODES_GPU_INTERRUPTIBLE = false
.Конфигурация Terraform в репозитории предполагает создание прерываемой ВМ. Вы можете отключить возможность прерывания с помощью переменной
NODES_GPU_INTERRUPTIBLE
. Ее значение по умолчанию —true
, оно прописано в файлеvariables.tf
в репозиторииyc-speechkit-hybrid-deployment
.
Создайте инфраструктуру с помощью Terraform
Инфраструктура, необходимая для работы со SpeechKit Hybrid, описана в файлах networks.tf
и node-deploy.tf
в репозитории yc-speechkit-hybrid-deployment
. Файл networks.tf
содержит конфигурацию сущностей:
- сеть;
- подсеть;
- внутренняя зона DNS;
- группа безопасности.
Файл node-deploy.tf
содержит конфигурацию ВМ и сервиса SpeechKit Hybrid.
Подробнее о конфигурации сущностей читайте на сайте Terraform
Чтобы создать инфраструктуру, выполните следующие действия на локальной машине:
-
В терминале перейдите в директорию репозитория
yc-speechkit-hybrid-deployment
. -
Получите данные для аутентификации сервисного аккаунта
sk-hybrid-example
. Вы можете добавить данные в переменные окружения или указать эти данные в файлеmain.tf
, в блокеprovider "yandex"
. -
Настройте и инициализируйте провайдеры Terraform.
В репозитории в качестве конфигурационного файла с настройками провайдеров используется файл
main.tf
, поэтому повторно создавать такой файл не нужно. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
-
Создайте инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Организуйте постоянный канал связи с сервером Yandex Cloud
Для работы по модели лицензирования Cloud Billing обпеспечьте сетевую связность между узлом Yandex Cloud Billing billing.datasphere.yandexcloud.net:443
и ВМ, на которой разворачивается сервис SpeechKit Hybrid. Чтобы проверить доступность узла:
-
На локальной машине получите публичный IP-адрес созданной ВМ:
yc compute instance list
Публичный адрес понадобится для подключения к ВМ.
Пример результата:
+-----------+-------------------------------+---------------+---------+-------------+--------------+ | ID | NAME | ZONE ID | STATUS | EXTERNAL IP | INTERNAL IP | +-----------+-------------------------------+---------------+---------+-------------+--------------+ | fhmjvr*** | sk-hybrid-compose-example-*** | ru-central1-a | RUNNING | 158.160.*** | 192.168.*** | | ... | +-----------+-------------------------------+---------------+---------+-------------+--------------+
Публичный адрес указан в поле
EXTERNAL IP
. -
ssh <имя_пользователя>@<публичный_IP-адрес_ВМ>
Здесь
<имя_пользователя>
— имя учетной записи пользователя ВМ. -
Выполните команду:
nc -vz billing.datasphere.yandexcloud.net 443
Если узел доступен по сети, команда возвращает результат:
Connection to billing.datasphere.yandexcloud.net 443 port [tcp/https] succeeded!
Проведите нагрузочное тестирование распознавания и синтеза речи
Чтобы оценить корректность и производительность тестовой инсталляции SpeechKit Hybrid, используйте Docker-контейнеры с утилитой нагрузочного тестирования для распознавания и синтеза речи. Эти контейнеры описаны в файле node-deploy.tf
, они были созданы вместе с инфраструктурой.
Чтобы провести нагрузочное тестирование:
-
Подключитесь к ВМ по SSH.
-
Убедитесь, что порты
8080
и9080
открыты для приема клиентских запросов:telnet <публичный_адрес_ВМ> 8080 && telnet <публичный_адрес_ВМ> 9080
-
Запустите распознавание речи:
docker run --rm --name stt-tools \ --env ENVOY_HOST=<публичный_адрес_ВМ> \ --env ENVOY_PORT=8080 \ --env CONNECTIONS=40 \ cr.yandex/<идентификатор_реестра>/release/tools/stt-tools:0.20
В команде укажите публичный IP-адрес ВМ и идентификатор созданного ранее реестра Container Registry.
Здесь:
ENVOY_HOST
— IP-адрес сервиса распознавания;ENVOY_PORT
— порт сервиса распознавания (по умолчанию8080
);CONNECTIONS
— количество одновременно активных каналов.
-
Запустите синтез речи:
docker run --rm --name tts-tools \ --network=host \ --env ENVOY_HOST=<публичный_адрес_ВМ> \ --env ENVOY_TTS_PORT=9080 \ --env RPS=20 \ cr.yandex/<идентификатор_реестра>/release/tools/tts-tools:0.20
В команде укажите публичный IP-адрес ВМ и идентификатор созданного ранее реестра Container Registry.
Здесь:
ENVOY_HOST
— IP-адрес сервиса синтеза;ENVOY_TTS_PORT
— порт сервиса синтеза (по умолчанию9080
);RPS
— количество запросов синтеза в секунду.
-
Подождите несколько минут, пока проводятся распознавание и синтез речи.
-
Посмотрите результаты тестирования в логах контейнера:
docker logs stt-tools
— для распознавания речи;docker logs tts-tools
— для синтеза речи.
Пока в логах не появится строка
Load finished. Ready to serve requests on 0.0.0.0:17001
, сервисы распознавания и синтеза речи не будут отвечать на запросы. Ожидание может занять 2–10 минут.Далее в логах появится сообщение о том, что компонент Envoy начал прослушивать порт
8080
для распознавания речи и порт9080
для синтеза речи. Это означает, что сервис SpeechKit Hybrid запущен и готов обслуживать клиентские запросы. -
(Опционально) Остановите нагрузочное тестирование.
Во время нагрузочного тестирования команды
docker run
не будут реагировать на сигналы прерывания Ctrl + C. Если вы хотите остановить работу контейнеров, выполните команду:docker stop stt-tools
— для распознавания речи;docker stop tts-tools
— для синтеза речи.