Utiliser les conteneurs du service Speech avec Kubernetes et Helm

L’une des options permettant de gérer vos conteneurs vocaux en local consiste à utiliser Kubernetes et Helm. À l’aide de Kubernetes et de Helm pour définir les images conteneur de reconnaissance vocale et de synthèse vocale, nous créons un package Kubernetes. Ce package est déployé sur un cluster Kubernetes local. Enfin, nous explorons comment tester les services déployés et diverses options de configuration. Pour plus d’informations sur l’exécution des conteneurs Docker sans orchestration Kubernetes, consultez Installer et exécuter des conteneurs Speech.

Prérequis

L’utilisation locale des conteneurs Speech est soumise aux prérequis suivants :

Obligatoire Objectif
Compte Azure. Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Accès à Container Registry Pour que Kubernetes puisse extraire les images docker dans le cluster, il a besoin d’accéder au registre de conteneurs.
Kubernetes CLI L’interface Kubernetes CLI est requise pour gérer les informations d’identification partagées à partir du registre de conteneurs. Kubernetes est également nécessaire avant Helm, qui est le gestionnaire de package de Kubernetes.
Helm CLI Installez l’interface de ligne de commande Helm, utilisée pour installer un graphique Helm (définition de package de conteneur).
Ressource Speech Pour pouvoir utiliser ces conteneurs, vous devez avoir :

Ressource Azure de Speech permettant d’obtenir la clé de facturation et l’URI du point de terminaison de facturation associés. Les deux valeurs, disponibles dans les pages Vue d’ensemble de Speech et Clés du portail Azure, sont nécessaires au démarrage du conteneur.

{API_KEY} : clé de ressource

{ENDPOINT_URI} : exemple d’URI de point de terminaison : https://eastus.api.cognitive.microsoft.com/sts/v1.0

Reportez-vous aux informations concernant l’ordinateur hôte du conteneur du service Speech comme référence. Ce graphique Helm calcule automatiquement les besoins en ressources processeur et mémoire en fonction du nombre de décodages (demandes simultanées) que l’utilisateur spécifie. De plus, il s’ajuste en fonction des optimisations des entrées audio/texte selon si elles sont configurées comme enabled ou non. Par défaut, le graphique Helm considère deux demandes simultanées et l’optimisation désactivée.

Service Processeur/conteneur Mémoire/conteneur
reconnaissance vocale un décodeur nécessite un minimum de 1 150 millicores. Si optimizedForAudioFile est activé, 1 950 millicores sont requis. (par défaut : deux décodeurs) Requis : 2 Go
Limité : 4 Go
synthèse vocale une demande simultanée nécessite un minimum de 500 millicores. Si optimizeForTurboMode est activé, 1 000 millicores sont requis. (par défaut : deux demandes simultanées) Requis : 1 Go
Limité : 2 Go

Se connecter au cluster Kubernetes

L’ordinateur hôte doit avoir un cluster Kubernetes disponible. Consultez ce didacticiel sur le déploiement d’un cluster Kubernetes pour des informations conceptuelles sur la façon de déployer un cluster Kubernetes sur un ordinateur hôte.

Configurer les valeurs du graphique Helm pour le déploiement

Visitez le hub Microsoft Helm pour accéder à tous les graphiques Helm publiquement offerts par Microsoft. Dans le hub Microsoft Helm, vous trouverez le graphique Azure AI Speech local. Le graphique Azure AI Speech local est celui que nous installons, mais nous devons tout d’abord créer un fichier config-values.yaml avec des configurations explicites. Commençons par ajouter le référentiel Microsoft à notre instance Helm.

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

Ensuite, nous configurons nos valeurs de graphique Helm. Copiez et collez la configuration YAML suivante dans un fichier nommé config-values.yaml. Pour plus d’informations sur la personnalisation du graphique Helm pour Azure AI Speech local, consultez Personnaliser les graphiques Helm. Remplacez les commentaires # {ENDPOINT_URI} et # {API_KEY} par vos propres valeurs.

# 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}

Important

Si les valeurs billing et apikey ne sont pas fournies, les services expireront après 15 minutes. De même, la vérification échouera, car les services ne seront pas disponibles.

Le package Kubernetes (graphique Helm)

Le graphique Helm contient la configuration de la ou des images docker à extraire du registre de conteneurs mcr.microsoft.com.

Un graphique Helm est une collection de fichiers qui décrivent un ensemble de ressources Kubernetes. Un graphique unique peut être utilisé pour déployer quelque chose de simple comme un pod mis en cache, ou quelque chose de complexe, comme une pile d’application web complète avec des serveurs HTTP, des bases de données, des caches et ainsi de suite.

Les graphiques Helm fournis tirent (pull) les images Docker du service Speech (à la fois les services de synthèse et de reconnaissance vocale) à partir du registre de conteneurs mcr.microsoft.com.

Installer le graphique Helm sur le cluster Kubernetes

Exécutez la commande helm install pour installer le graphique Helm en remplaçant <config-values.yaml> par l’argument de chemin et de nom de fichier approprié. Le graphique Helm microsoft/cognitive-services-speech-onpremise est disponible sur le hub Microsoft Helm.

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

Voici un exemple de sortie que vous pouvez vous attendre à voir pour une exécution d’installation réussie :

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

Le déploiement de Kubernetes peut prendre plusieurs minutes. Pour vérifier que les pods et les services sont correctement déployés et disponibles, exécutez la commande suivante :

kubectl get all

Vous devriez obtenir un graphique similaire à la sortie suivante :

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

Vérifier le déploiement de Helm avec des tests Helm

Les graphiques Helm installés définissent les tests Help, qui sont proposés à des fins pratiques pour la vérification. Ces tests valident la disponibilité du service. Pour vérifier les fonctions de conversion de parole en texte et de texte par synthèse vocale, nous exécutons la commande de test Helm.

helm test onprem-speech

Important

Ces tests échouent si l’état du pod n’est pas Running ou si le déploiement n’est pas répertorié sous la colonne AVAILABLE. Soyez patient, car cela peut prendre plus de dix minutes.

Ces tests génèrent différents résultats d’état :

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

Comme alternative à l’exécution des tests Help, vous pouvez recueillir les adresses IP externes et ports correspondants avec la commande kubectl get all. En utilisant l’adresse IP et le port, ouvrez un navigateur web et accédez à http://<external-ip>:<port>:/swagger/index.html pour voir la ou les pages Swagger de l’API.

Personnaliser des graphiques Helm

Les graphiques Helm sont hiérarchiques. Cette hiérarchie permet l’héritage de graphiques ainsi que le concept de spécificité, où les paramètres plus spécifiques remplacent les règles héritées.

Speech (graphique en parapluie)

Les valeurs dans le graphique en parapluie de niveau supérieur remplacent les valeurs du sous-graphique. Par conséquent, toutes les valeurs locales personnalisées doivent être ajoutées ici.

Paramètre Description Default
speechToText.enabled Indique si la reconnaissance vocale est activée ou non. true
speechToText.verification.enabled Indique si la fonctionnalité helm test pour la reconnaissance vocale est activée ou non. true
speechToText.verification.image.registry Le référentiel d’images docker que helm test utilise pour tester le service de reconnaissance vocale. Helm crée un pod distinct au sein du cluster pour le test, et extrait l’image test-use à partir de ce registre. docker.io
speechToText.verification.image.repository Le référentiel d’images docker que helm test utilise pour tester le service de reconnaissance vocale. Le pod de test Helm utilise ce référentiel pour extraire l’image test-use. antsu/on-prem-client
speechToText.verification.image.tag La balise d’image docker utilisée avec helm test pour le service de reconnaissance vocale. Le pod de test Helm utilise cette balise pour extraire l’image test-use. latest
speechToText.verification.image.pullByHash Indique si l’image docker test-use est extraite par hachage. Si true, speechToText.verification.image.hash doit être ajouté, avec une valeur de hachage d’image valide. false
speechToText.verification.image.arguments Les arguments utilisés pour exécuter l’image docker test-use. Le pod de test Helm passe ces arguments au conteneur lors de l’exécution de 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 Indique si le service de synthèse vocale est activé ou non. true
textToSpeech.verification.enabled Indique si la fonctionnalité helm test pour la reconnaissance vocale est activée ou non. true
textToSpeech.verification.image.registry Le référentiel d’images docker que helm test utilise pour tester le service de reconnaissance vocale. Helm crée un pod distinct au sein du cluster pour le test, et extrait l’image test-use à partir de ce registre. docker.io
textToSpeech.verification.image.repository Le référentiel d’images docker que helm test utilise pour tester le service de reconnaissance vocale. Le pod de test Helm utilise ce référentiel pour extraire l’image test-use. antsu/on-prem-client
textToSpeech.verification.image.tag La balise d’image docker utilisée avec helm test pour le service de reconnaissance vocale. Le pod de test Helm utilise cette balise pour extraire l’image test-use. latest
textToSpeech.verification.image.pullByHash Indique si l’image docker test-use est extraite par hachage. Si true, textToSpeech.verification.image.hash doit être ajouté, avec une valeur de hachage d’image valide. false
textToSpeech.verification.image.arguments Les arguments à exécuter avec l’image docker test-use. Le pod de test Helm passe ces arguments au conteneur lors de l’exécution de helm test. "./text-to-speech-client"
"--input='What's the weather like'"
"--host=$(TEXT_TO_SPEECH_HOST)"
"--port=$(TEXT_TO_SPEECH_PORT)"

Reconnaissance vocale (sous-graphique : charts/speechToText)

Pour remplacer le graphique en parapluie, ajoutez le préfixe speechToText. à n’importe quel paramètre pour le rendre plus spécifique. Il remplacera le paramètre correspondant. Par exemple, speechToText.numberOfConcurrentRequest remplace numberOfConcurrentRequest.

Paramètre Description Default
enabled Indique si la reconnaissance vocale est activée ou non. false
numberOfConcurrentRequest Le nombre de requêtes simultanées pour le service de reconnaissance vocale. Ce graphique calcule automatiquement les ressources processeur et mémoire en fonction de cette valeur. 2
optimizeForAudioFile Indique si le service doit optimiser pour l’entrée audio via des fichiers audio. Si true, ce graphique alloue plus de ressources processeur au service. false
image.registry Le registre d’images docker pour la reconnaissance vocale. containerpreview.azurecr.io
image.repository Le référentiel d’images docker pour la reconnaissance vocale. microsoft/cognitive-services-speech-to-text
image.tag La balise d’image docker pour la reconnaissance vocale. latest
image.pullSecrets Les secrets de l’image pour l’extraction de l’image docker de reconnaissance vocale.
image.pullByHash Indique si l’image docker est extraite par hachage. Si true, image.hash est requis. false
image.hash Le hachage d’image docker pour la reconnaissance vocale. Utilisé uniquement si image.pullByHash: true.
image.args.eula (requis) Indique que vous avez accepté la licence. La seule valeur valide est accept
image.args.billing (requis) La valeur de l’URI de point de terminaison de facturation est disponible dans la page Vue d’ensemble de Speech du portail Azure.
image.args.apikey (requis) Utilisé pour le suivi des informations de facturation.
service.type Le type de service Kubernetes du service de reconnaissance vocale. Consultez les Instructions relatives aux types de service Kubernetes pour plus d’informations et pour vérifier la prise en charge des fournisseurs cloud. LoadBalancer
service.port Le port du service de reconnaissance vocale. 80
service.annotations Les annotations de reconnaissance vocale pour les métadonnées du service. Les annotations sont des paires clé-valeur.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Indique si l’Autoscaler de pods élastique est activé. Si true, le speech-to-text-autoscaler sera déployé dans le cluster Kubernetes. true
service.podDisruption.enabled Indique si le Budget de perturbation de pod est activé. Si true, le speech-to-text-poddisruptionbudget sera déployé dans le cluster Kubernetes. true

Analyse des sentiments (sous-graphique : charts/speechToText)

À compter de la version 2.2.0 du conteneur de reconnaissance vocale en texte et de la version 0.2.0 du graphique Helm, les paramètres suivants sont utilisés pour l’analyse des sentiments à l’aide de l’API de service linguistique.

Paramètre Description Valeurs Default
textanalytics.enabled Indique si le service d’analyse de texte est activé ou non true/false false
textanalytics.image.registry Le registre d’images Docker pour l’analyse de texte registre d’images Docker valide
textanalytics.image.repository Le dépôt d’images Docker pour l’analyse de texte dépôt d’images Docker valide
textanalytics.image.tag La balise d’image Docker pour l’analyse de texte balise d’image Docker valide
textanalytics.image.pullSecrets Les secrets de l’image pour l’extraction de l’image Docker de l’analyse de texte noms de secrets valides
textanalytics.image.pullByHash Spécifie si vous extrayez l’image Docker par hachage. Si la valeur est yes, image.hash doit également avoir cette valeur. Si la valeur est no, affectez-lui la valeur « false ». La valeur par défaut est false. true/false false
textanalytics.image.hash Le hachage d’image Docker pour l’analyse de texte. Utilisez-le uniquement avec image.pullByHash:true. hachage d’image Docker valide
textanalytics.image.args.eula Un des arguments exigés par le conteneur d’analyse de texte, qui indique que vous avez accepté la licence. La valeur de cette option doit être : accept. accept si vous voulez utiliser le conteneur
textanalytics.image.args.billing Un des arguments exigés par le conteneur d’analyse de texte, qui spécifie l’URI du point de terminaison de facturation. La valeur de l’URI de point de terminaison de facturation est disponible dans la page Vue d’ensemble de Speech du portail Azure. URI de point de terminaison de facturation valide
textanalytics.image.args.apikey Un des arguments exigés par le conteneur d’analyse de texte, est utilisé pour effectuer le suivi des informations de facturation. valeur apikey valide
textanalytics.cpuRequest UC demandée pour le conteneur d’analyse de texte int 3000m
textanalytics.cpuLimit UC limitée pour le conteneur d’analyse de texte 8000m
textanalytics.memoryRequest Mémoire demandée pour le conteneur d’analyse de texte 3Gi
textanalytics.memoryLimit Mémoire limitée pour le conteneur d’analyse de texte 8Gi
textanalytics.service.sentimentURISuffix Suffixe d’URI d’analyse des sentiments. Le format de l’URI complet est « http://<service>:<port>/<sentimentURISuffix> ». text/analytics/v3.0-preview/sentiment
textanalytics.service.type Type de service d’analyse de texte dans Kubernetes. Consultez Types de service Kubernetes type de service Kubernetes valide LoadBalancer
textanalytics.service.port Port du service d’analyse de texte int 50085
textanalytics.service.annotations Annotations que les utilisateurs peuvent ajouter aux métadonnées du service d’analyse de texte. Exemple :
Annotations :
some/annotation1: value1
some/annotation2: value2
annotations, une par ligne
textanalytics.serivce.autoScaler.enabled Indique si l’option Autoscaler de pods élastique est activée. Si c’est le cas, text-analytics-autoscaler, est déployé dans le cluster Kubernetes true/false true
textanalytics.service.podDisruption.enabled Indique si l’option Budget de perturbation de pod est activée. Si c’est le cas, text-analytics-poddisruptionbudget, est déployé dans le cluster Kubernetes true/false true

Synthèse vocale (sous-graphique : charts/textToSpeech)

Pour remplacer le graphique en parapluie, ajoutez le préfixe textToSpeech. à n’importe quel paramètre pour le rendre plus spécifique. Il remplacera le paramètre correspondant. Par exemple, textToSpeech.numberOfConcurrentRequest remplace numberOfConcurrentRequest.

Paramètre Description Default
enabled Indique si le service de synthèse vocale est activé ou non. false
numberOfConcurrentRequest Le nombre de requêtes simultanées pour le service de synthèse vocale. Ce graphique calcule automatiquement les ressources processeur et mémoire en fonction de cette valeur. 2
optimizeForTurboMode Indique si le service doit optimiser pour l’entrée texte via des fichiers texte. Si true, ce graphique alloue plus de ressources processeur au service. false
image.registry Le registre d’images docker pour la synthèse vocale. containerpreview.azurecr.io
image.repository Le référentiel d’images docker pour la synthèse vocale. microsoft/cognitive-services-text-to-speech
image.tag La balise d’image docker pour la synthèse vocale. latest
image.pullSecrets Les secrets de l’image pour l’extraction de l’image docker de synthèse vocale.
image.pullByHash Indique si l’image docker est extraite par hachage. Si true, image.hash est requis. false
image.hash Le hachage d’image docker pour la synthèse vocale. Utilisé uniquement si image.pullByHash: true.
image.args.eula (requis) Indique que vous avez accepté la licence. La seule valeur valide est accept
image.args.billing (requis) La valeur de l’URI de point de terminaison de facturation est disponible dans la page Vue d’ensemble de Speech du portail Azure.
image.args.apikey (requis) Utilisé pour le suivi des informations de facturation.
service.type Le type de service Kubernetes du service de synthèse vocale. Consultez les Instructions relatives aux types de service Kubernetes pour plus d’informations et pour vérifier la prise en charge des fournisseurs cloud. LoadBalancer
service.port Le port du service de synthèse vocale. 80
service.annotations Les annotations de synthèse vocale pour les métadonnées du service. Les annotations sont des paires clé-valeur.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Indique si l’Autoscaler de pods élastique est activé. Si true, le text-to-speech-autoscaler sera déployé dans le cluster Kubernetes. true
service.podDisruption.enabled Indique si le Budget de perturbation de pod est activé. Si true, le text-to-speech-poddisruptionbudget sera déployé dans le cluster Kubernetes. true

Étapes suivantes

Pour plus d’informations sur l’installation d’applications avec Helm dans Azure Kubernetes Service (AKS), consultez ceci.