Usare i contenitori del servizio Voce con Kubernetes e Helm
Un'opzione per gestire i contenitori voce in locale consiste nell'usare Kubernetes e Helm. Usando Kubernetes e Helm per definire la voce in testo e testo nelle immagini del contenitore voce, viene creato un pacchetto Kubernetes. Questo pacchetto viene distribuito in un cluster Kubernetes locale. Infine, viene illustrato come testare i servizi distribuiti e varie opzioni di configurazione. Per altre informazioni sull'esecuzione di contenitori Docker senza orchestrazione Kubernetes, vedere Installare ed eseguire contenitori del servizio Voce.
Prerequisiti
I prerequisiti seguenti prima di usare i contenitori voce in locale:
Richiesto | Scopo |
---|---|
Account Azure | Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. |
Accesso al Registro Container | Per consentire a Kubernetes di eseguire il pull delle immagini Docker nel cluster, è necessario accedere al registro contenitori. |
Interfaccia della riga di comando di Kubernetes | L'interfaccia della riga di comando di Kubernetes è necessaria per gestire le credenziali condivise dal registro contenitori. Kubernetes è necessario anche prima di Helm, ovvero la gestione pacchetti Kubernetes. |
Interfaccia della riga di comando di Helm | Installare l'interfaccia della riga di comando helm, usata per installare un grafico Helm (definizione del pacchetto contenitore). |
Risorsa voce | Per usare questi contenitori, è necessario avere: Risorsa voce di Azure per ottenere la chiave di fatturazione associata e l'URI dell'endpoint di fatturazione. Entrambi i valori sono disponibili nelle pagine Panoramica e chiavi della portale di Azure e sono necessari per avviare il contenitore. {API_KEY}: chiave di risorsa {ENDPOINT_URI}: l'esempio di URI dell'endpoint è: https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
Configurazione consigliata del computer host
Fare riferimento ai dettagli del computer host del contenitore del servizio Voce come riferimento. Questo grafico Helm calcola automaticamente i requisiti di CPU e memoria in base al numero di decodifica (richieste simultanee) specificate dall'utente. Inoltre, regola in base all'ottimizzazione per l'input audio/testo configurato come enabled
. Il grafico helm viene impostato per impostazione predefinita, due richieste simultanee e disabilitazione dell'ottimizzazione.
Servizio | CPU/contenitore | Memoria/contenitore |
---|---|---|
riconoscimento vocale | un decodificatore richiede almeno 1.150 millicores. optimizedForAudioFile Se è abilitato, sono necessari 1.950 millicores. (impostazione predefinita: due decodificatori) |
Obbligatorio: 2 GB Limitato: 4 GB |
sintesi vocale | una richiesta simultanea richiede almeno 500 millicores. optimizeForTurboMode Se è abilitato, sono necessari 1.000 millicore. (impostazione predefinita: due richieste simultanee) |
Obbligatorio: 1 GB Limitato: 2 GB |
Connettersi al cluster Kubernetes
Il computer host dovrebbe avere un cluster Kubernetes disponibile. Vedere questa esercitazione sulla distribuzione di un cluster Kubernetes per una conoscenza concettuale della distribuzione di un cluster Kubernetes in un computer host.
Configurare i valori del grafico Helm per la distribuzione
Visitare Microsoft Helm Hub per tutti i grafici Helm disponibili pubblicamente offerti da Microsoft. Nell'hub Microsoft Helm si trova il grafico locale di Riconoscimento vocale di Intelligenza artificiale di Azure. Il riconoscimento vocale di Azure in locale è il grafico installato, ma è prima necessario creare un config-values.yaml
file con configurazioni esplicite. Per iniziare, aggiungere il repository Microsoft all'istanza helm.
helm repo add microsoft https://microsoft.github.io/charts/repo
Successivamente, si configurano i valori del grafico Helm. Copiare e incollare il codice YAML seguente in un file denominato config-values.yaml
. Per altre informazioni sulla personalizzazione del grafico Helm locale di Riconoscimento vocale di Intelligenza artificiale di Azure, vedere Personalizzare i grafici Helm. Sostituire i # {ENDPOINT_URI}
commenti e # {API_KEY}
con i propri valori.
# 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
Se i billing
valori e apikey
non vengono forniti, i servizi scadranno dopo 15 minuti. Analogamente, la verifica avrà esito negativo perché i servizi non saranno disponibili.
Pacchetto Kubernetes (grafico Helm)
Il grafico Helm contiene la configurazione di cui eseguire il pull delle immagini Docker dal mcr.microsoft.com
registro contenitori.
Un grafico Helm è una raccolta di file che descrivono un set correlato di risorse Kubernetes. Un singolo grafico può essere usato per distribuire qualcosa di semplice, ad esempio un pod memcached o qualcosa di complesso, ad esempio uno stack completo di app Web con server HTTP, database, cache e così via.
I grafici Helm forniti eseguono il pull delle immagini Docker del servizio Voce, sia del riconoscimento vocale che del riconoscimento vocale dai mcr.microsoft.com
servizi di registro contenitori.
Installare il grafico Helm nel cluster Kubernetes
Eseguire il helm install
comando per installare il grafico helm, sostituendo con l'argomento <config-values.yaml>
percorso e nome file appropriato. Il microsoft/cognitive-services-speech-onpremise
grafico Helm è disponibile in Microsoft Helm Hub.
helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
--version 0.1.1 \
--values <config-values.yaml>
Di seguito è riportato un output di esempio che potrebbe verificarsi da un'esecuzione dell'installazione riuscita:
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
Il completamento della distribuzione di Kubernetes può richiedere più minuti. Per verificare che i pod e i servizi siano distribuiti correttamente e disponibili, eseguire il comando seguente:
kubectl get all
Dovrebbe essere visualizzato un risultato simile all'output seguente:
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
Verificare la distribuzione Helm con i test Helm
I grafici Helm installati definiscono i test Helm, che fungono da comodità per la verifica. Questi test convalidano l'idoneità del servizio. Per verificare sia la sintesi vocale che le funzionalità di sintesi vocale, viene eseguito il comando di test Helm.
helm test onprem-speech
Importante
Questi test avranno esito negativo se lo stato del POD non Running
è o se la distribuzione non è elencata nella AVAILABLE
colonna . Il completamento di questa operazione può richiedere più di dieci minuti.
Questi test generano vari risultati di stato:
RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test
In alternativa all'esecuzione dei test helm, è possibile raccogliere gli indirizzi IP esterni e le porte corrispondenti dal kubectl get all
comando. Usando l'INDIRIZZO IP e la porta, aprire un Web browser e passare a http://<external-ip>:<port>:/swagger/index.html
per visualizzare le pagine di swagger dell'API.
Personalizzare i grafici Helm
I grafici Helm sono gerarchici. Essendo gerarchico consente l'ereditarietà del grafico, si rivolge anche al concetto di specificità, in cui le impostazioni che sono regole ereditate di override più specifiche.
Riconoscimento vocale (grafico a ombrello)
I valori nel grafico "umbrella" di primo livello sostituiscono i valori corrispondenti del grafico secondario. Di conseguenza, tutti i valori personalizzati locali devono essere aggiunti qui.
Parametro | Descrizione | Default |
---|---|---|
speechToText.enabled |
Indica se il servizio di riconoscimento vocale è abilitato. | true |
speechToText.verification.enabled |
Indica se la funzionalità per il helm test servizio di riconoscimento vocale è abilitata. |
true |
speechToText.verification.image.registry |
Repository di immagini Docker che helm test usa per testare il riconoscimento vocale nel servizio di testo . Helm crea un pod separato all'interno del cluster per il test ed esegue il pull dell'immagine di uso del test da questo registro. |
docker.io |
speechToText.verification.image.repository |
Repository di immagini Docker che helm test usa per testare il riconoscimento vocale nel servizio di testo . Il pod di test Helm usa questo repository per eseguire il pull dell'immagine di uso dei test. |
antsu/on-prem-client |
speechToText.verification.image.tag |
Tag di immagine docker usato con helm test per il servizio di riconoscimento vocale. Il pod di test Helm usa questo tag per eseguire il pull dell'immagine di uso dei test. |
latest |
speechToText.verification.image.pullByHash |
Indica se l'immagine Docker usata dal test viene estratta dall'hash. Se true è necessario aggiungere , speechToText.verification.image.hash con un valore hash dell'immagine valido. |
false |
speechToText.verification.image.arguments |
Argomenti usati per eseguire l'immagine Docker per l'uso di test. Il pod di test Helm passa questi argomenti al contenitore durante l'esecuzione di 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 |
Indica se il servizio di sintesi vocale è abilitato. | true |
textToSpeech.verification.enabled |
Indica se la funzionalità per il helm test servizio di riconoscimento vocale è abilitata. |
true |
textToSpeech.verification.image.registry |
Repository di immagini Docker che helm test usa per testare il riconoscimento vocale nel servizio di testo . Helm crea un pod separato all'interno del cluster per il test ed esegue il pull dell'immagine di uso del test da questo registro. |
docker.io |
textToSpeech.verification.image.repository |
Repository di immagini Docker che helm test usa per testare il riconoscimento vocale nel servizio di testo . Il pod di test Helm usa questo repository per eseguire il pull dell'immagine di uso dei test. |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
Tag di immagine docker usato con helm test per il servizio di riconoscimento vocale. Il pod di test Helm usa questo tag per eseguire il pull dell'immagine di uso dei test. |
latest |
textToSpeech.verification.image.pullByHash |
Indica se l'immagine Docker usata dal test viene estratta dall'hash. Se true è necessario aggiungere , textToSpeech.verification.image.hash con un valore hash dell'immagine valido. |
false |
textToSpeech.verification.image.arguments |
Argomenti da eseguire con l'immagine Docker di test-use . Il pod di test helm passa questi argomenti al contenitore durante l'esecuzione di helm test . |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
Riconoscimento vocale (sottogramma: grafici/speechToText)
Per eseguire l'override del grafico "umbrella", aggiungere il prefisso speechToText.
su qualsiasi parametro per renderlo più specifico. Ad esempio, eseguirà l'override del parametro corrispondente, ad esempio esegue speechToText.numberOfConcurrentRequest
l'override numberOfConcurrentRequest
di .
Parametro | Descrizione | Default |
---|---|---|
enabled |
Indica se il servizio di riconoscimento vocale è abilitato. | false |
numberOfConcurrentRequest |
Numero di richieste simultanee per il servizio di riconoscimento vocale. Questo grafico calcola automaticamente le risorse cpu e memoria, in base a questo valore. | 2 |
optimizeForAudioFile |
Indica se il servizio deve ottimizzare l'input audio tramite file audio. Se true , questo grafico allocherà più risorse CPU al servizio. |
false |
image.registry |
Registro immagini Docker per il riconoscimento vocale . | containerpreview.azurecr.io |
image.repository |
Repository di immagini Docker per il riconoscimento vocale . | microsoft/cognitive-services-speech-to-text |
image.tag |
Tag di immagine Docker per il riconoscimento vocale . | latest |
image.pullSecrets |
Segreti dell'immagine per il pull della voce nell'immagine Docker di testo . | |
image.pullByHash |
Indica se l'immagine Docker viene estratta dall'hash. Se true , image.hash è obbligatorio. |
false |
image.hash |
Hash dell'immagine Docker per il riconoscimento vocale . Usato solo quando image.pullByHash: true . |
|
image.args.eula (obbligatorio) |
Indica che la licenza è stata accettata. L'unico valore valido è accept |
|
image.args.billing (obbligatorio) |
Il valore dell'URI dell'endpoint di fatturazione è disponibile nella pagina Panoramica del riconoscimento vocale di portale di Azure. | |
image.args.apikey (obbligatorio) |
Si usa per rilevare le informazioni di fatturazione. | |
service.type |
Tipo di servizio Kubernetes del servizio di riconoscimento vocale . Per altri dettagli e verificare il supporto del provider di servizi cloud, vedere le istruzioni sui tipi di servizio Kubernetes. | LoadBalancer |
service.port |
Porta del servizio di riconoscimento vocale. | 80 |
service.annotations |
Annotazioni vocali per i metadati del servizio. Le annotazioni sono coppie chiave-valore. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Indica se l'utilità di scalabilità automatica orizzontale dei pod è abilitata. Se true , speech-to-text-autoscaler verrà distribuito nel cluster Kubernetes. |
true |
service.podDisruption.enabled |
Indica se il budget di interruzione dei pod è abilitato. Se true , speech-to-text-poddisruptionbudget verrà distribuito nel cluster Kubernetes. |
true |
Analisi del sentiment (sottogramma: grafici/speechToText)
A partire dalla versione 2.2.0 del contenitore di sintesi vocale e dalla versione 0.2.0 del grafico Helm, i parametri seguenti vengono usati per l'analisi del sentiment usando l'API del servizio di linguaggio.
Parametro | Descrizione | Valori | Default |
---|---|---|---|
textanalytics.enabled |
Indica se il servizio analisi del testo è abilitato | true/false | false |
textanalytics.image.registry |
Registro immagini Docker di Analisi del testo | Registro di sistema di immagini Docker valido | |
textanalytics.image.repository |
Repository di immagini Docker di Analisi del testo | repository di immagini Docker valido | |
textanalytics.image.tag |
Tag di immagine Docker di Analisi del testo | tag di immagine Docker valido | |
textanalytics.image.pullSecrets |
Segreti dell'immagine per il pull dell'immagine Docker di Analisi del testo | nome dei segreti valido | |
textanalytics.image.pullByHash |
Specifica se si esegue il pull dell'immagine Docker in base all'hash. Se yes , image.hash deve avere anche . Se no , impostarlo su 'false'. Il valore predefinito è false . |
true/false | false |
textanalytics.image.hash |
Hash dell'immagine Docker di Analisi del testo. Usarlo solo con image.pullByHash:true . |
hash dell'immagine Docker valido | |
textanalytics.image.args.eula |
Uno degli argomenti richiesti dal contenitore di analisi del testo, che indica che è stata accettata la licenza. Il valore di questa opzione deve essere: accept . |
accept , se si vuole usare il contenitore |
|
textanalytics.image.args.billing |
Uno degli argomenti richiesti dal contenitore di analisi del testo, che specifica l'URI dell'endpoint di fatturazione. Il valore dell'URI dell'endpoint di fatturazione è disponibile nella pagina Panoramica del riconoscimento vocale di portale di Azure. | URI dell'endpoint di fatturazione valido | |
textanalytics.image.args.apikey |
Uno degli argomenti richiesti dal contenitore di analisi del testo, usato per tenere traccia delle informazioni di fatturazione. | apikey valido | |
textanalytics.cpuRequest |
CPU richiesta per il contenitore di analisi del testo | int | 3000m |
textanalytics.cpuLimit |
CPU limitata per il contenitore di analisi del testo | 8000m |
|
textanalytics.memoryRequest |
Memoria richiesta per il contenitore di analisi del testo | 3Gi |
|
textanalytics.memoryLimit |
Memoria limitata per il contenitore di analisi del testo | 8Gi |
|
textanalytics.service.sentimentURISuffix |
Il suffisso URI dell'analisi del sentiment, l'intero URI è in formato "http://<service> :<port> /<sentimentURISuffix> ". |
text/analytics/v3.0-preview/sentiment |
|
textanalytics.service.type |
Tipo di servizio analisi del testo in Kubernetes. Vedere Tipi di servizio Kubernetes | tipo di servizio Kubernetes valido | LoadBalancer |
textanalytics.service.port |
Porta del servizio analisi del testo | int | 50085 |
textanalytics.service.annotations |
Le annotazioni che gli utenti possono aggiungere ai metadati del servizio analisi del testo. Ad esempio: Annotazioni: some/annotation1: value1 some/annotation2: value2 |
annotazioni, una per ogni riga | |
textanalytics.serivce.autoScaler.enabled |
Indica se l'utilità di scalabilità automatica orizzontale dei pod è abilitata. Se abilitata, text-analytics-autoscaler verrà distribuita nel cluster Kubernetes |
true/false | true |
textanalytics.service.podDisruption.enabled |
Indica se il budget di interruzione dei pod è abilitato. Se abilitata, text-analytics-poddisruptionbudget verrà distribuita nel cluster Kubernetes |
true/false | true |
Sintesi vocale (sottogramma: grafici/textToSpeech)
Per eseguire l'override del grafico "umbrella", aggiungere il prefisso textToSpeech.
su qualsiasi parametro per renderlo più specifico. Ad esempio, eseguirà l'override del parametro corrispondente, ad esempio esegue textToSpeech.numberOfConcurrentRequest
l'override numberOfConcurrentRequest
di .
Parametro | Descrizione | Default |
---|---|---|
enabled |
Indica se il servizio di sintesi vocale è abilitato. | false |
numberOfConcurrentRequest |
Numero di richieste simultanee per il servizio di sintesi vocale . Questo grafico calcola automaticamente le risorse cpu e memoria, in base a questo valore. | 2 |
optimizeForTurboMode |
Indica se il servizio deve ottimizzare l'input di testo tramite file di testo. Se true , questo grafico allocherà più risorse CPU al servizio. |
false |
image.registry |
Registro di sistema di immagini Docker per la sintesi vocale . | containerpreview.azurecr.io |
image.repository |
Repository di immagini Docker per la sintesi vocale . | microsoft/cognitive-services-text-to-speech |
image.tag |
Tag di immagine Docker per il riconoscimento vocale . | latest |
image.pullSecrets |
Segreti dell'immagine per il pull del testo nell'immagine Docker vocale . | |
image.pullByHash |
Indica se l'immagine Docker viene estratta dall'hash. Se true , image.hash è obbligatorio. |
false |
image.hash |
Hash dell'immagine Docker per il riconoscimento vocale. Usato solo quando image.pullByHash: true . |
|
image.args.eula (obbligatorio) |
Indica che la licenza è stata accettata. L'unico valore valido è accept |
|
image.args.billing (obbligatorio) |
Il valore dell'URI dell'endpoint di fatturazione è disponibile nella pagina Panoramica del riconoscimento vocale di portale di Azure. | |
image.args.apikey (obbligatorio) |
Si usa per rilevare le informazioni di fatturazione. | |
service.type |
Tipo di servizio Kubernetes del servizio di sintesi vocale . Per altri dettagli e verificare il supporto del provider di servizi cloud, vedere le istruzioni sui tipi di servizio Kubernetes. | LoadBalancer |
service.port |
Porta del servizio di sintesi vocale . | 80 |
service.annotations |
Annotazioni di sintesi vocale per i metadati del servizio. Le annotazioni sono coppie chiave-valore. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Indica se l'utilità di scalabilità automatica orizzontale dei pod è abilitata. Se true , text-to-speech-autoscaler verrà distribuito nel cluster Kubernetes. |
true |
service.podDisruption.enabled |
Indica se il budget di interruzione dei pod è abilitato. Se true , text-to-speech-poddisruptionbudget verrà distribuito nel cluster Kubernetes. |
true |
Passaggi successivi
Per altre informazioni sull'installazione di applicazioni con Helm in servizio Azure Kubernetes (servizio Azure Kubernetes), vedere qui.