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 |
La configuration d’ordinateur hôte recommandée
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.