Uso de contenedores del servicio de voz con Kubernetes y Helm
Una opción para administrar los contenedores de Speech locales es usar Kubernetes y Helm. Mediante el empleo de Kubernetes y Helm para definir las imágenes de contenedor de conversión de voz en texto y de texto a voz, crearemos un paquete de Kubernetes. Este paquete se implementa en un clúster de Kubernetes en el entorno local. Por último, exploramos cómo probar los servicios implementados y diversas opciones de configuración. Para más información sobre cómo ejecutar contenedores de Docker sin orquestación de Kubernetes, consulte Instalación y ejecución de contenedores de servicio de voz.
Requisitos previos
Requisitos previos para poder usar los contenedores de Voz en el entorno local:
Obligatorio | Propósito |
---|---|
Cuenta de Azure | Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar. |
Acceso a Container Registry | Para incorporar las imágenes de Docker al clúster, Kubernetes necesita acceso al registro de contenedor. |
CLI de Kubernetes | La CLI de Kubernetes es necesaria para administrar las credenciales compartidas desde el registro de contenedor. Kubernetes también se necesita antes que Helm, que es el administrador de paquetes de Kubernetes. |
CLI de Helm | Instale la CLI de Helm, que se usa para instalar un gráfico de Helm (definición de paquete de contenedor). |
Recurso de Voz | Para usar estos contenedores, debe tener: Un recurso de Voz de Azure para obtener la clave de facturación asociada y el URI del punto de conexión de facturación. Ambos valores están disponibles en las páginas de claves y de introducción de Voz de Azure Portal y son necesarios para iniciar el contenedor. {API_KEY} : clave de recurso {ENDPOINT_URI} : el ejemplo de URI de punto de conexión es: https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
Configuración de equipo host recomendada
Vea los detalles del equipo host del contenedor del servicio de voz como referencia. En este gráfico de Helm se calculan automáticamente los requisitos de CPU y memoria en función de cuántas descodificaciones (solicitudes simultáneas) especifica el usuario. Además, se ajusta en función de si las optimizaciones de entrada de audio o texto están configuradas como enabled
. Los valores predeterminados del gráfico de Helm son dos solicitudes simultáneas y la deshabilitación de la optimización.
Servicio | CPU o contenedor | Memoria o contenedor |
---|---|---|
conversión de voz en texto | un descodificador requiere un mínimo de 1150 milésimas de núcleo. Si optimizedForAudioFile está habilitado, se requieren 1950 milésimas de núcleo. (valor predeterminado: dos descodificadores) |
Requerido: 2 GB Limitado: 4 GB |
texto a voz | una solicitud simultánea requiere un mínimo de 500 milésimas de núcleo. Si optimizeForTurboMode está habilitado, se requieren 1000 milésimas de núcleo. (valor predeterminado: dos solicitudes simultáneas) |
Requerido: 1 GB Limitado: 2 GB |
Conectar al clúster de Kubernetes
Se espera que el equipo host tenga un clúster de Kubernetes disponible. Vea este tutorial sobre la implementación de un clúster de Kubernetes para lograr un reconocimiento conceptual de cómo implementar un clúster de Kubernetes en un equipo host.
Configuración de los valores del gráfico de Helm para la implementación
Visite Microsoft Helm Hub para ver todos los gráficos de Helm disponibles públicamente que ofrece Microsoft. En Microsoft Helm Hub encontrará el gráfico local de Voz de Azure AI. Voz de Azure AI local es el gráfico que vamos a instalar, aunque primero debemos crear un archivo config-values.yaml
con configuraciones explícitas. Vamos a comenzar por agregar el repositorio de Microsoft a la instancia de Helm.
helm repo add microsoft https://microsoft.github.io/charts/repo
Luego vamos a configurar los valores de nuestro gráfico de Helm. Copie y pegue el siguiente YAML en un archivo denominado config-values.yaml
. Para obtener más información sobre la personalización del gráfico de Helm Voz de Azure AI local, vea Personalizar gráficos de Helm. Reemplace los comentarios # {ENDPOINT_URI}
y # {API_KEY}
por sus propios valores.
# 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}
Importante
Si no se proporcionan los valores billing
y apikey
, los servicios expiran pasados 15 minutos. Del mismo modo, se produce un error de comprobación, ya que los servicios no están disponibles.
Paquete de Kubernetes (gráfico de Helm)
El gráfico de Helm contiene la configuración de las imágenes de Docker que se van a extraer del registro de contenedor mcr.microsoft.com
.
Un gráfico de Helm es una colección de archivos que describen un conjunto relacionado de recursos de Kubernetes. Un solo gráfico se podría usar para implementar algo sencillo, como un pod almacenado en memoria, o complejo, como una pila de aplicación web completa con servidores HTTP, bases de datos, memorias caché, etc.
Los gráficos de Helm proporcionados extraen las imágenes de Docker del servicio de voz, los servicios de conversión de texto en voz y de voz en texto desde el registro de contenedor mcr.microsoft.com
.
Instalación del gráfico de Helm en el clúster de Kubernetes
Para instalar el gráfico de Helm, se debe ejecutar el comando helm install
, reemplazando <config-values.yaml>
por el argumento de ruta de acceso y nombre de archivo adecuado. El gráfico de Helm microsoft/cognitive-services-speech-onpremise
está disponible en Microsoft Helm Hub.
helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
--version 0.1.1 \
--values <config-values.yaml>
Este es el resultado de ejemplo que se puede ver tras una ejecución de instalación correcta:
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
La implementación de Kubernetes puede tardar varios minutos en completarse. Para confirmar que los pods y los servicios se han implementado correctamente y están disponibles, ejecute el siguiente comando:
kubectl get all
Debería ver algo parecido al resultado siguiente:
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
Comprobación de la implementación de Helm con pruebas de Helm
Los gráficos de Helm instalados definen pruebas de Helm, que resultan cómodas para la comprobación. Estas pruebas validan la disponibilidad del servicio. Para comprobar las características de conversión de voz en texto y texto en voz, ejecutamos el comando Helm test.
helm test onprem-speech
Importante
Se produce un error en estas pruebas si el estado de POD no es Running
o si la implementación no aparece en la columna AVAILABLE
. Tenga paciencia, ya que esto puede tardar más de diez minutos en completarse.
Estas pruebas generan distintos resultados de estado:
RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test
Como alternativa a la ejecución de pruebas de Helm, puede recopilar las direcciones IP externas y los puertos correspondientes desde el comando kubectl get all
. Con la dirección IP y el puerto, abra un explorador web y vaya a http://<external-ip>:<port>:/swagger/index.html
para ver las páginas de Swagger de API.
Personalizar gráficos de Helm
Los gráficos de Helm son jerárquicos. La jerarquía permite la herencia de gráficos y, además, proporciona el concepto de especificidad, que consiste en que los valores más específicos invalidan las reglas heredadas.
Speech (gráfico de nivel superior)
Los valores del gráfico de nivel superior reemplazan a los valores de los gráficos secundarios correspondientes. Por lo tanto, todos los valores locales personalizados se deben agregar aquí.
Parámetro | Descripción | Valor predeterminado |
---|---|---|
speechToText.enabled |
Si el servicio de conversión de voz en texto está habilitado. | true |
speechToText.verification.enabled |
Si la funcionalidad helm test del servicio speech-to-text está habilitada. |
true |
speechToText.verification.image.registry |
El repositorio de imágenes de Docker que helm test usa para probar el servicio speech-to-text. Helm crea un pod independiente dentro del clúster para realizar pruebas y extrae la imagen test-use de este Registro. |
docker.io |
speechToText.verification.image.repository |
El repositorio de imágenes de Docker que helm test usa para probar el servicio speech-to-text. El pod de prueba de Helm usa este repositorio para extraer la imagen test-use. |
antsu/on-prem-client |
speechToText.verification.image.tag |
La etiqueta de la imagen de Docker usada con helm test para el servicio de conversión de voz en texto. El pod de prueba de Helm usa esta etiqueta para extraer la imagen test-use. |
latest |
speechToText.verification.image.pullByHash |
Si la imagen de Docker test-use se extrae mediante hash. Si true , debería agregarse speechToText.verification.image.hash con un valor de Hash de imagen válido. |
false |
speechToText.verification.image.arguments |
Los argumentos usados para ejecutar la imagen de Docker test-use. El pod de prueba de Helm pasa estos argumentos al contenedor cuando se ejecuta 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 |
Si el servicio de conversión de texto en voz está habilitado. | true |
textToSpeech.verification.enabled |
Si la funcionalidad helm test del servicio speech-to-text está habilitada. |
true |
textToSpeech.verification.image.registry |
El repositorio de imágenes de Docker que helm test usa para probar el servicio speech-to-text. Helm crea un pod independiente dentro del clúster para realizar pruebas y extrae la imagen test-use de este Registro. |
docker.io |
textToSpeech.verification.image.repository |
El repositorio de imágenes de Docker que helm test usa para probar el servicio speech-to-text. El pod de prueba de Helm usa este repositorio para extraer la imagen test-use. |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
La etiqueta de la imagen de Docker usada con helm test para el servicio de conversión de voz en texto. El pod de prueba de Helm usa esta etiqueta para extraer la imagen test-use. |
latest |
textToSpeech.verification.image.pullByHash |
Si la imagen de Docker test-use se extrae mediante hash. Si true , debería agregarse textToSpeech.verification.image.hash con un valor de Hash de imagen válido. |
false |
textToSpeech.verification.image.arguments |
Los argumentos que se ejecutarán con la imagen de Docker test-use. El pod de prueba de Helm pasa estos argumentos al contenedor cuando se ejecuta helm test . |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
Conversión de voz en texto (gráfico secundario: charts/speechToText)
Para reemplazar al gráfico de nivel superior, agregue el prefijo speechToText.
a todos los parámetros para que sean más específicos. Se reemplazará el parámetro correspondiente, por ejemplo speechToText.numberOfConcurrentRequest
reemplaza a numberOfConcurrentRequest
.
Parámetro | Descripción | Valor predeterminado |
---|---|---|
enabled |
Si el servicio de conversión de voz en texto está habilitado. | false |
numberOfConcurrentRequest |
Número de solicitudes simultáneas del servicio de conversión de voz en texto. Este gráfico calcula automáticamente los recursos de CPU y memoria en función de este valor. | 2 |
optimizeForAudioFile |
Si el servicio necesita optimizar la entrada de audio a través de archivos de audio. Si true , este gráfico asignará más recursos de CPU al servicio. |
false |
image.registry |
Registro de la imagen de Docker de conversión de voz en texto. | containerpreview.azurecr.io |
image.repository |
Repositorio de la imagen de Docker de conversión de voz en texto. | microsoft/cognitive-services-speech-to-text |
image.tag |
Etiqueta de la imagen de Docker de conversión de voz en texto. | latest |
image.pullSecrets |
Secretos de la imagen para extraer la imagen de Docker de conversión de voz en texto. | |
image.pullByHash |
Si la imagen de Docker se extrae mediante hash. Si true , image.hash es obligatorio. |
false |
image.hash |
Hash de la imagen de Docker de conversión de voz en texto. Solo se usa con image.pullByHash: true . |
|
image.args.eula (obligatorio) |
Indica que ha aceptado la licencia. El único valor válido es accept . |
|
image.args.billing (obligatorio) |
El valor de URI del punto de conexión de facturación está disponible en Azure Portal, en la página de Información general de Información general del servicio de voz. | |
image.args.apikey (obligatorio) |
Se usa para realizar un seguimiento de la información de facturación. | |
service.type |
Tipo de servicio de Kubernetes del servicio de conversión de voz en texto. Consulte las instrucciones de los tipos de servicio de Kubernetes para obtener más información y comprobar la compatibilidad con los proveedores de nube. | LoadBalancer |
service.port |
Puerto del servicio de conversión de voz en texto. | 80 |
service.annotations |
Anotaciones de conversión de voz en texto para los metadatos del servicio. Las anotaciones son pares de clave-valor. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Si Horizontal Pod Autoscaler está habilitado. Si true , speech-to-text-autoscaler se implementará en el clúster de Kubernetes. |
true |
service.podDisruption.enabled |
Si Pod Disruption Budget está habilitado. Si true , speech-to-text-poddisruptionbudget se implementará en el clúster de Kubernetes. |
true |
Análisis de sentimiento (sub-chart: charts/speechToText)
A partir de la versión 2.2.0 del contenedor de conversión de voz en texto y la versión 0.2.0 del gráfico de Helm, se usan los siguientes parámetros para el análisis de sentimiento mediante la API del servicio de lenguaje.
Parámetro | Descripción | Valores | Valor predeterminado |
---|---|---|---|
textanalytics.enabled |
Si está habilitado el servicio text-analytics. | true/false | false |
textanalytics.image.registry |
El registro de la imagen de Docker text-analytics. | registro de imagen de Docker válido | |
textanalytics.image.repository |
El repositorio de la imagen de Docker text-analytics. | repositorio de imágenes de Docker válido | |
textanalytics.image.tag |
La etiqueta de la imagen de Docker text-analytics. | etiqueta de imagen de Docker válida | |
textanalytics.image.pullSecrets |
Los secretos de imagen para extraer la imagen de Docker text-analytics. | nombre de secreto válido | |
textanalytics.image.pullByHash |
Especifica si se va a extraer la imagen de Docker por hash. Si yes , image.hash también se requiere. Si no , establézcalo como "false". El valor predeterminado es false . |
true/false | false |
textanalytics.image.hash |
El hash de la imagen de Docker text-analytics. Úselo solo con image.pullByHash:true . |
hash de imagen de Docker válido | |
textanalytics.image.args.eula |
Uno de los argumentos necesarios en el contenedor text-analytics, que indica que ha aceptado la licencia. El valor de esta opción debe establecerse en accept . |
accept , si desea utilizar el contenedor. |
|
textanalytics.image.args.billing |
Uno de los argumentos necesarios en el contenedor text-analytics, que especifica el identificador URI del punto de conexión de facturación. El valor de URI del punto de conexión de facturación está disponible en Azure Portal, en la página de Información general de Información general del servicio de voz. | identificador URI del punto de conexión de facturación | |
textanalytics.image.args.apikey |
Uno de los argumentos necesarios en el contenedor text-analytics, que se usa para realizar un seguimiento de la información de facturación. | apiKey válido | |
textanalytics.cpuRequest |
La CPU solicitada para el contenedor text-analytics. | int | 3000m |
textanalytics.cpuLimit |
La CPU limitada del contenedor text-analytics. | 8000m |
|
textanalytics.memoryRequest |
La memoria solicitada del contenedor text-analytics. | 3Gi |
|
textanalytics.memoryLimit |
La memoria limitada del contenedor text-analytics. | 8Gi |
|
textanalytics.service.sentimentURISuffix |
El sufijo URI de análisis de sentimiento, el identificador URI completo tiene el formato "http://<service> :<port> /<sentimentURISuffix> ". |
text/analytics/v3.0-preview/sentiment |
|
textanalytics.service.type |
El tipo de servicio text-analytics de Kubernetes. Consulte los tipos de servicio de Kubernetes. | tipo de servicio Kubernetes válido | LoadBalancer |
textanalytics.service.port |
El puerto del servicio text-analytics. | int | 50085 |
textanalytics.service.annotations |
Las anotaciones que los usuarios pueden agregar a los metadatos del servicio text-analytics. Por ejemplo: anotaciones: some/annotation1: value1 some/annotation2: value2 |
anotaciones, una por cada línea | |
textanalytics.serivce.autoScaler.enabled |
Si Horizontal Pod Autoscaler está habilitado. Si está habilitado, text-analytics-autoscaler se implementará en el clúster de Kubernetes. |
true/false | true |
textanalytics.service.podDisruption.enabled |
Si Pod Disruption Budget está habilitado. Si está habilitado, text-analytics-poddisruptionbudget se implementará en el clúster de Kubernetes. |
true/false | true |
Conversión de texto en voz (gráfico secundario: charts/textToSpeech)
Para reemplazar al gráfico de nivel superior, agregue el prefijo textToSpeech.
a todos los parámetros para que sean más específicos. Se reemplazará el parámetro correspondiente, por ejemplo textToSpeech.numberOfConcurrentRequest
reemplaza a numberOfConcurrentRequest
.
Parámetro | Descripción | Valor predeterminado |
---|---|---|
enabled |
Si el servicio de conversión de texto en voz está habilitado. | false |
numberOfConcurrentRequest |
Número de solicitudes simultáneas del servicio de conversión de texto en voz. Este gráfico calcula automáticamente los recursos de CPU y memoria en función de este valor. | 2 |
optimizeForTurboMode |
Si el servicio necesita optimizar la entrada de texto a través de archivos de texto. Si true , este gráfico asignará más recursos de CPU al servicio. |
false |
image.registry |
Registro de la imagen de Docker de conversión de texto en voz. | containerpreview.azurecr.io |
image.repository |
Repositorio de la imagen de Docker de conversión de texto en voz. | microsoft/cognitive-services-text-to-speech |
image.tag |
Etiqueta de la imagen de Docker de conversión de texto en voz. | latest |
image.pullSecrets |
Secretos de la imagen para extraer la imagen de Docker de conversión de texto en voz. | |
image.pullByHash |
Si la imagen de Docker se extrae mediante hash. Si true , image.hash es obligatorio. |
false |
image.hash |
Hash de la imagen de Docker de conversión de texto en voz. Solo se usa con image.pullByHash: true . |
|
image.args.eula (obligatorio) |
Indica que ha aceptado la licencia. El único valor válido es accept . |
|
image.args.billing (obligatorio) |
El valor de URI del punto de conexión de facturación está disponible en Azure Portal, en la página de Información general de Información general del servicio de voz. | |
image.args.apikey (obligatorio) |
Se usa para realizar un seguimiento de la información de facturación. | |
service.type |
Tipo de servicio de Kubernetes del servicio de conversión de texto en voz. Consulte las instrucciones de los tipos de servicio de Kubernetes para obtener más información y comprobar la compatibilidad con los proveedores de nube. | LoadBalancer |
service.port |
El puerto del servicio de conversión de texto en voz. | 80 |
service.annotations |
Las anotaciones de conversión de texto en voz para los metadatos del servicio. Las anotaciones son pares de clave-valor. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Si Horizontal Pod Autoscaler está habilitado. Si true , text-to-speech-autoscaler se implementará en el clúster de Kubernetes. |
true |
service.podDisruption.enabled |
Si Pod Disruption Budget está habilitado. Si true , text-to-speech-poddisruptionbudget se implementará en el clúster de Kubernetes. |
true |
Pasos siguientes
Para obtener más información sobre la instalación de aplicaciones con Helm en Azure Kubernetes Service (AKS), visite esta página.