Использование контейнера службы "Речь" в Kubernetes и Helm

Одним из вариантов управления контейнерами службы "Речь" в локальной среде является использование Kubernetes и Helm. С помощью Kubernetes и Helm для определения речи для текста и текста в образы контейнеров речи мы создадим пакет Kubernetes. Этот пакет развертывается в локальном кластере Kubernetes. Наконец, мы рассмотрим, как протестировать развернутые службы и различные параметры конфигурации. Дополнительные сведения о работе Docker-контейнеров без оркестрации Kubernetes см. в статье Установка и запуск контейнеров службы "Речь".

Необходимые компоненты

Перед использованием локальных речевых контейнеров должны быть выполнены следующие требования:

Обязательное поле Характер использования
Учетная запись Azure Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Доступ к реестру контейнеров Чтобы Kubernetes вытащил образы Docker в кластер, он должен получить доступ к реестру контейнеров.
Интерфейс командной строки Kubernetes Интерфейс командной строки Kubernetes требуется для управления общими учетными данными из реестра контейнеров. Также для Helm, который является диспетчером пакетов Kubernetes, требуется Kubernetes.
Интерфейс командной строки Helm Установите Интерфейс командной строки Helm, который используется для установки чарта Helm (определение пакета контейнера).
Ресурс речи Для использования контейнеров необходимо следующее:

Ресурс службы Azure Речь, чтобы получить связанный ключ выставления счетов и URI конечной точки выставления счетов. Оба значения доступны на страницах "Обзор" и "Ключи" службы Речь на портале Azure и необходимы для запуска контейнера.

{API_KEY}. Ключ ресурса.

{BILLING_ENDPOINT_URI}. Примером URI конечной точки может служить:https://eastus.api.cognitive.microsoft.com/sts/v1.0

См. документ Сведения о главном компьютере контейнера службы "Речь". Эта диаграмма Helm автоматически рассчитывает требования к ЦП и памяти в зависимости от того, сколько декодированных (параллельных запросов) указывает пользователь. Кроме того, он настраивается в зависимости от того, настроены enabledли оптимизации для ввода звука и текста. По умолчанию в диаграмме Helm два параллельных запроса и отключена оптимизация.

Service ЦП или контейнер Память или контейнер
речь в тексте для одного декодера требуется не менее 1150 миллиядер. Если optimizedForAudioFile включен, требуется 1950 миллиядер. (по умолчанию: два декодера) Требуется: 2 ГБ
Ограничено: 4 ГБ
текст для речи для одного одновременного запроса требуется минимум 500 миллиядер. Если optimizeForTurboMode включен, требуется 1000 миллиядер. (по умолчанию: два одновременных запроса) Требуется: 1 ГБ
Ограничено: 2 ГБ

Подключение к кластеру Kubernetes

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

Настройка значений диаграммы Helm для развертывания

Посетите Центр Microsoft Helm, чтобы посмотреть все общедоступные диаграммы Helm, предлагаемые корпорацией Майкрософт. В Центре Microsoft Helm вы найдете локальную диаграмму службы "Речь искусственного интеллекта Azure". Локальная среда службы "Речь ИИ Azure" — это установленная диаграмма, но сначала необходимо создать config-values.yaml файл с явными конфигурациями. Начнем с добавления репозитория Майкрософт в экземпляр Helm.

helm repo add microsoft https://microsoft.github.io/charts/repo

Затем мы настроим значения диаграммы Helm. Скопируйте и вставьте следующий код YAML в файл с именем config-values.yaml. Дополнительные сведения о настройке локальной диаграммы Helm службы "Речь ИИ Azure" см. в разделе "Настройка диаграмм helm". Замените комментарии # {ENDPOINT_URI} и # {API_KEY} своими собственными значениями.

# These settings are deployment specific and users can provide customizations
# speech to text configurations
speechToText:
  enabled: true
  numberOfConcurrentRequest: 3
  optimizeForAudioFile: true
  image:
    registry: mcr.microsoft.com
    repository: azure-cognitive-services/speechservices/speech-to-text
    tag: latest
    pullSecrets:
      - mcr # Or an existing secret
    args:
      eula: accept
      billing: # {ENDPOINT_URI}
      apikey: # {API_KEY}

# text to speech configurations
textToSpeech:
  enabled: true
  numberOfConcurrentRequest: 3
  optimizeForTurboMode: true
  image:
    registry: mcr.microsoft.com
    repository: azure-cognitive-services/speechservices/neural-text-to-speech
    tag: latest
    pullSecrets:
      - mcr # Or an existing secret
    args:
      eula: accept
      billing: # {ENDPOINT_URI}
      apikey: # {API_KEY}

Внимание

Если не указать значения billing и apikey, срок действия служб истечет через 15 минут. Аналогичным образом, проверка завершится ошибкой, так как службы будут недоступны.

Пакет Kubernetes (диаграмма Helm)

Диаграмма Helm содержит конфигурацию образов Docker, которые необходимо извлечь из реестра контейнеров mcr.microsoft.com.

Диаграмма Helm представляет подборку файлов, описывающих связанный с ними набор ресурсов Kubernetes. Это однорядная диаграмма, которую можно использовать как для развертывания чего-то простого, например модуля pod memcached, так и сложного, например полноценного стека веб-приложений с HTTP-серверами, базами данных, кэшами и т. д.

Предоставленные диаграммы Helm извлекут образы docker службы "Речь", как текст для речи, так и речь в текстовых службах из mcr.microsoft.com реестра контейнеров.

Установка диаграммы Helm в кластере Kubernetes

helm install Выполните команду, чтобы установить диаграмму helm, заменив <config-values.yaml> соответствующий аргумент пути и имени файла. Диаграмма microsoft/cognitive-services-speech-onpremise Helm доступна в Центре Microsoft Helm.

helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
    --version 0.1.1 \
    --values <config-values.yaml> 

Ниже приведен пример выходных данных, которые вы можете ожидать от успешного выполнения установки:

NAME:   onprem-speech
LAST DEPLOYED: Tue Jul  2 12:51:42 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Pod(related)
NAME                             READY  STATUS             RESTARTS  AGE
speech-to-text-7664f5f465-87w2d  0/1    Pending            0         0s
speech-to-text-7664f5f465-klbr8  0/1    ContainerCreating  0         0s
neural-text-to-speech-56f8fb685b-4jtzh  0/1    ContainerCreating  0         0s
neural-text-to-speech-56f8fb685b-frwxf  0/1    Pending            0         0s

==> v1/Service
NAME            TYPE          CLUSTER-IP    EXTERNAL-IP  PORT(S)       AGE
speech-to-text  LoadBalancer  10.0.252.106  <pending>    80:31811/TCP  1s
neural-text-to-speech  LoadBalancer  10.0.125.187  <pending>    80:31247/TCP  0s

==> v1beta1/PodDisruptionBudget
NAME                                MIN AVAILABLE  MAX UNAVAILABLE  ALLOWED DISRUPTIONS  AGE
speech-to-text-poddisruptionbudget  N/A            20%              0                    1s
neural-text-to-speech-poddisruptionbudget  N/A            20%              0                    1s

==> v1beta2/Deployment
NAME            READY  UP-TO-DATE  AVAILABLE  AGE
speech-to-text  0/2    2           0          0s
neural-text-to-speech  0/2    2           0          0s

==> v2beta2/HorizontalPodAutoscaler
NAME                       REFERENCE                  TARGETS        MINPODS  MAXPODS  REPLICAS  AGE
speech-to-text-autoscaler  Deployment/speech-to-text  <unknown>/50%  2        10       0         0s
neural-text-to-speech-autoscaler  Deployment/neural-text-to-speech  <unknown>/50%  2        10       0         0s


NOTES:
cognitive-services-speech-onpremise has been installed!
Release is named onprem-speech

Для полного развертывания Kubernetes может потребоваться несколько минут. Для подтверждения наличия модулей Pod и служб, а также корректности их развертывания выполните следующую команду:

kubectl get all

Должен отобразиться результат, аналогичный следующему:

NAME                                  READY     STATUS    RESTARTS   AGE
pod/speech-to-text-7664f5f465-87w2d   1/1       Running   0          34m
pod/speech-to-text-7664f5f465-klbr8   1/1       Running   0          34m
pod/neural-text-to-speech-56f8fb685b-4jtzh   1/1       Running   0          34m
pod/neural-text-to-speech-56f8fb685b-frwxf   1/1       Running   0          34m

NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
service/kubernetes       ClusterIP      10.0.0.1       <none>           443/TCP        3h
service/speech-to-text   LoadBalancer   10.0.252.106   52.162.123.151   80:31811/TCP   34m
service/neural-text-to-speech   LoadBalancer   10.0.125.187   65.52.233.162    80:31247/TCP   34m

NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/speech-to-text   2         2         2            2           34m
deployment.apps/neural-text-to-speech   2         2         2            2           34m

NAME                                        DESIRED   CURRENT   READY     AGE
replicaset.apps/speech-to-text-7664f5f465   2         2         2         34m
replicaset.apps/neural-text-to-speech-56f8fb685b   2         2         2         34m

NAME                                                            REFERENCE                   TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/speech-to-text-autoscaler   Deployment/speech-to-text   1%/50%    2         10        2          34m
horizontalpodautoscaler.autoscaling/neural-text-to-speech-autoscaler   Deployment/neural-text-to-speech   0%/50%    2         10        2          34m

Проверка развертывания Helm с помощью тестов Helm

Установленные диаграммы Helm используют Тесты Helm, которые используются для удобной проверки. Эти тесты проверяют готовность службы. Чтобы проверить как речь, так и текст в функции речи, мы выполняем тестовую команду Helm.

helm test onprem-speech

Внимание

Эти тесты выдают ошибку, если состояние POD не равно Running или если в столбце AVAILABLE не указано развертывание. Наберитесь терпения, так как это может занять более десяти минут.

Эти тесты выводить различные результаты состояния:

RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test

В качестве альтернативы выполнению тестов Helm можно получить внешние IP-адреса и соответствующие порты из команды kubectl get all. Используя IP-адрес и порт, откройте веб-браузер и перейдите к http://<external-ip>:<port>:/swagger/index.html, чтобы просмотреть страницы Swagger API.

Настройка диаграмм Helm

Диаграммы Helm являются иерархическими. Иерархия обеспечивает наследование диаграммы, и также относится к концепции особенностей, где параметры, которые являются более специфичными, переопределяют унаследованные правила.

Речь (диаграмма umbrella)

Значения на диаграмме "umbrella" верхнего уровня переопределяют соответствующие значения во вспомогательной диаграмме. Поэтому нужно добавить все локальные настраиваемые значения.

Параметр Описание По умолч.
speechToText.enabled Включена ли речь в текстовой службе. true
speechToText.verification.enabled helm test Включена ли возможность преобразования речи в текстовую службу. true
speechToText.verification.image.registry Репозиторий образов Docker, который helm test используется для тестирования речи в текстовой службе. Helm создает отдельный модуль pod внутри кластера для тестирования и вытягивает из этого реестра образ тестового использования. docker.io
speechToText.verification.image.repository Репозиторий образов Docker, который helm test используется для тестирования речи в текстовой службе. Модуль pod тестирования Helm использует этот репозиторий для вытягивания образа тестового использования. antsu/on-prem-client
speechToText.verification.image.tag Тег изображения Docker, используемый для helm test преобразования речи в текстовую службу. Модуль pod тестирования Helm использует этот тег для вытягивания образа тестового использования. latest
speechToText.verification.image.pullByHash Определение того, получен ли образ Docker тестового использования с помощью хэша. Если задано значение true, speechToText.verification.image.hash необходимо добавить с допустимым значением хэша изображения. false
speechToText.verification.image.arguments Аргументы, используемые для выполнения образа Docker тестового использования. Модуль pod тестирования Helm передает эти аргументы в контейнер при запуске helm test. "./speech-to-text-client"
"./audio/whatstheweatherlike.wav"
"--expect=What's the weather like"
"--host=$(SPEECH_TO_TEXT_HOST)"
"--port=$(SPEECH_TO_TEXT_PORT)"
textToSpeech.enabled Включена ли служба преобразования текста в речь. true
textToSpeech.verification.enabled helm test Включена ли возможность преобразования речи в текстовую службу. true
textToSpeech.verification.image.registry Репозиторий образов Docker, который helm test используется для тестирования речи в текстовой службе. Helm создает отдельный модуль pod внутри кластера для тестирования и вытягивает из этого реестра образ тестового использования. docker.io
textToSpeech.verification.image.repository Репозиторий образов Docker, который helm test используется для тестирования речи в текстовой службе. Модуль pod тестирования Helm использует этот репозиторий для вытягивания образа тестового использования. antsu/on-prem-client
textToSpeech.verification.image.tag Тег изображения Docker, используемый для helm test преобразования речи в текстовую службу. Модуль pod тестирования Helm использует этот тег для вытягивания образа тестового использования. latest
textToSpeech.verification.image.pullByHash Определение того, получен ли образ Docker тестового использования с помощью хэша. Если задано значение true, textToSpeech.verification.image.hash необходимо добавить с допустимым значением хэша изображения. false
textToSpeech.verification.image.arguments Аргументы для выполнения с помощью образа docker.. Модуль pod тестирования Helm передает эти аргументы в контейнер при выполнении helm test. "./text-to-speech-client"
"--input='What's the weather like'"
"--host=$(TEXT_TO_SPEECH_HOST)"
"--port=$(TEXT_TO_SPEECH_PORT)"

Речь к тексту (подграмма: диаграммы/speechToText)

Чтобы переопределить диаграмму "umbrella", добавьте префикс speechToText. к любому параметру, чтобы сделать его более конкретным. Он переопределит соответствующий параметр, например speechToText.numberOfConcurrentRequest переопределяет numberOfConcurrentRequest.

Параметр Описание По умолч.
enabled Включена ли речь в текстовой службе. false
numberOfConcurrentRequest Количество одновременных запросов для службы преобразования речи в текстовую службу. На этой диаграмме автоматически вычисляются ресурсы ЦП и памяти на основе данного значения. 2
optimizeForAudioFile Определение того, нуждается ли служба в оптимизации звуковых входных данных с помощью звуковых файлов. Если задано значение true, диаграмма выделит больше ресурсов ЦП для службы. false
image.registry Речь в реестре образов Docker для текста . containerpreview.azurecr.io
image.repository Речь в репозитории изображений Docker для текста . microsoft/cognitive-services-speech-to-text
image.tag Речь в теге изображения Docker для текста . latest
image.pullSecrets Секреты изображения для извлечения речи на текстовый образ Docker.
image.pullByHash Определение того, получен ли образ Docker с помощью хэша. Если задано значение true, требуется image.hash. false
image.hash Хэш изображения docker для текста . Используется, только если image.pullByHash: true.
image.args.eula (обязательно) Указывает, что вы приняли условия лицензии. Единственное допустимое значение — accept
image.args.billing (обязательно) Значение URI конечной точки выставления счетов доступно на странице обзора службы "Речь" на портале Azure.
image.args.apikey (обязательно) Используется для отслеживания данных для выставлении счетов.
service.type Тип службы Kubernetes службы преобразования речи в текстовую службу. Ознакомьтесь с инструкциями по типам службы Kubernetes, а также проверьте поддержку поставщика облачных служб. LoadBalancer
service.port Порт службы преобразования речи в текстовую службу. 80
service.annotations Речь в текстовых заметках для метаданных службы. Заметки — это пары "ключ — значение".
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Определяет, включено ли средство горизонтального автомасштабирования pod. Если задано значение true, speech-to-text-autoscaler будет развернут в кластере Kubernetes. true
service.podDisruption.enabled Определяет, включен ли бюджет неработоспособности pod. Если задано значение true, speech-to-text-poddisruptionbudget будет развернут в кластере Kubernetes. true

Анализ тональности (вспомогательная диаграмма: диаграммы/speechToText)

Начиная с версии 2.2.0 преобразования речи в текстовый контейнер и v0.2.0 диаграммы Helm, следующие параметры используются для анализа тональности с помощью API службы языка.

Параметр Описание Values По умолчанию.
textanalytics.enabled Определяет, включена ли служба text-analytics true/false false
textanalytics.image.registry Реестр образа Docker для text-analytics. допустимый реестр образа Docker
textanalytics.image.repository Репозиторий образа Docker для text-analytics. допустимый репозиторий образа Docker
textanalytics.image.tag Тег образа Docker для text-analytics. допустимый тег образа Docker
textanalytics.image.pullSecrets Секреты образа для получения образа Docker text-analytics допустимое имя секретов
textanalytics.image.pullByHash Указывает на то, получен ли образ Docker с помощью хэша. Если задано значение yes, значение для image.hash также необходимо указать. Если задано значение no, задайте для него значение false. По умолчанию — false. true/false false
textanalytics.image.hash Хэш образа Docker для text-analytics. Используйте его только с image.pullByHash:true. допустимый хэш образа Docker
textanalytics.image.args.eula Один из обязательных аргументов контейнера text-analytics, который указывает, что вы приняли условия лицензии. Для этого параметра следует задать значение: accept. accept, если необходимо использовать контейнер
textanalytics.image.args.billing Один из обязательных аргументов контейнера text-analytics, который указывает URI конечной точки выставления счетов. Значение URI конечной точки выставления счетов доступно на странице обзора службы "Речь" на портале Azure. допустимый URI конечной точки выставления счетов
textanalytics.image.args.apikey Один из обязательных аргументов контейнера text-analytics, который используется для отслеживания данных о выставлении счетов. допустимый ключ API
textanalytics.cpuRequest Запрошенный ЦП для контейнера text-analytics. INT 3000m
textanalytics.cpuLimit Ограничение доступа к ЦП для контейнера text-analytics. 8000m
textanalytics.memoryRequest Запрошенная память для контейнера text-analytics. 3Gi
textanalytics.memoryLimit Ограниченная память для контейнера text-analytics. 8Gi
textanalytics.service.sentimentURISuffix Суффикс URI анализа тональности, полный URI имеет формат "http:// <service>:<port>/<sentimentURISuffix>". text/analytics/v3.0-preview/sentiment
textanalytics.service.type Тип службы text-analytics в Kubernetes. Ознакомьтесь с типами службы Kubernetes. допустимый тип службы Kubernetes LoadBalancer
textanalytics.service.port Порт службы text-analytics. INT 50085
textanalytics.service.annotations Заметки, которые пользователи могут добавлять к метаданным службы text-analytics. Например:
заметки:
some/annotation1: value1
some/annotation2: value2
по одной заметке на каждую строчку
textanalytics.serivce.autoScaler.enabled Определяет, включено ли средство горизонтального автомасштабирования pod. Если он включен, то text-analytics-autoscaler будет развернут в кластере Kubernetes true/false true
textanalytics.service.podDisruption.enabled Определяет, включен ли бюджет неработоспособности pod. Если он включен, то text-analytics-poddisruptionbudget будет развернут в кластере Kubernetes true/false true

Текст в речь (подграмма: диаграммы или textToSpeech)

Чтобы переопределить диаграмму "umbrella", добавьте префикс textToSpeech. к любому параметру, чтобы сделать его более конкретным. Он переопределит соответствующий параметр, например textToSpeech.numberOfConcurrentRequest переопределяет numberOfConcurrentRequest.

Параметр Описание По умолч.
enabled Включена ли служба преобразования текста в речь. false
numberOfConcurrentRequest Количество одновременных запросов для службы преобразования текста в речь . На этой диаграмме автоматически вычисляются ресурсы ЦП и памяти на основе данного значения. 2
optimizeForTurboMode Определяет, нуждается ли служба в оптимизации ввода текста с помощью текстовых файлов. Если задано значение true, диаграмма выделит больше ресурсов ЦП для службы. false
image.registry Текст для реестра образов Docker для речи. containerpreview.azurecr.io
image.repository Текст для репозитория образов Docker для речи . microsoft/cognitive-services-text-to-speech
image.tag Текст для тега изображения Docker для речи. latest
image.pullSecrets Секреты изображения для извлечения текста в изображение docker.
image.pullByHash Определение того, получен ли образ Docker с помощью хэша. Если задано значение true, требуется image.hash. false
image.hash Хэш изображения docker для речи . Используется, только если image.pullByHash: true.
image.args.eula (обязательно) Указывает, что вы приняли условия лицензии. Единственное допустимое значение — accept
image.args.billing (обязательно) Значение URI конечной точки выставления счетов доступно на странице обзора службы "Речь" на портале Azure.
image.args.apikey (обязательно) Используется для отслеживания данных для выставлении счетов.
service.type Тип службы Kubernetes для службы преобразования текста в речь . Ознакомьтесь с инструкциями по типам службы Kubernetes, а также проверьте поддержку поставщика облачных служб. LoadBalancer
service.port Порт службы преобразования текста в речь . 80
service.annotations Текст для речевых заметок для метаданных службы. Заметки — это пары "ключ — значение".
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Определяет, включено ли средство горизонтального автомасштабирования pod. Если задано значение true, text-to-speech-autoscaler будет развернут в кластере Kubernetes. true
service.podDisruption.enabled Определяет, включен ли бюджет неработоспособности pod. Если задано значение true, text-to-speech-poddisruptionbudget будет развернут в кластере Kubernetes. true

Следующие шаги

Дополнительные сведения об установке приложений с помощью Helm в Службе Kubernetes Azure (AKS) см. здесь.