Поделиться через


Использование контейнера службы "Речь" в 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}: ключ ресурса

{ENDPOINT_URI}: пример URI конечной точки: https://eastus.api.cognitive.microsoft.com/sts/v1.0

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

Услуга ЦП или контейнер Память или контейнер
речь в тексте для одного декодера требуется не менее 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 Chart сервиса Azure AI Speech см. в настройке Helm Charts. Замените комментарии # {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-onpremiseHelm доступна в Центре 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 Включена ли возможность для службы преобразования речи в текст. true
speechToText.verification.image.registry Репозиторий образов Docker, который helm test используется для тестирования службы распознавания речи в текст. Helm создает отдельный pod в кластере для тестирования и загружает образ test-use из этого реестра. 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 Аргументы, используемые для запуска test-use образа 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 в кластере для тестирования и извлекает образ test-use из этого реестра. 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-образом test-use. Модуль 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 Disruption Budget? Если задано значение true, speech-to-text-poddisruptionbudget будет развернут в кластере Kubernetes. true

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

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

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

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

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