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