Usare contenitori del servizio Voce con Kubernetes e Helm
Un'opzione per gestire i contenitori voce in locale consiste nell'usare Kubernetes e Helm. Utilizzando Kubernetes ed Helm per definire le immagini dei contenitori riconoscimento vocale e sintesi vocale, 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
Prima di usare i contenitori voce in locale, è necessario soddisfare i prerequisiti seguenti:
Richiesto | Scopo |
---|---|
Account Azure | Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare. |
Accesso al registro contenitori | 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, che è il gestore dei 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: Una risorsa di Voce di Azure per ottenere la chiave di fatturazione associata e l'URI dell'endpoint di fatturazione. Entrambi i valori sono disponibili nelle pagine delle chiavi e della panoramica di Voce nel portale di Azure e sono necessarie per avviare il contenitore. {API_KEY}: chiave della risorsa {ENDPOINT_URI} : un 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, si adatta in base al fatto che le ottimizzazioni per l'input audio/testo siano configurate come enabled
. Il grafico helm ha come impostazione predefinita due richieste simultanee e la disattivazione dell'ottimizzazione.
Servizio | CPU/contenitore | Memoria/contenitore |
---|---|---|
conversione della voce in testo scritto | un decodificatore richiede almeno 1.150 millicore. Se optimizedForAudioFile è abilitato, sono necessari 1.950 millicore. (impostazione predefinita: due decodificatori) |
Obbligatorio: 2 GB Limitato: 4 GB |
sintesi vocale | una richiesta simultanea richiede almeno 500 millicore. Se optimizeForTurboMode è 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 file config-values.yaml
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 commenti # {ENDPOINT_URI}
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 valori billing
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 registro contenitori mcr.microsoft.com
.
Un grafico Helm è una raccolta di file che descrivono un set correlato di risorse Kubernetes. È possibile usare un singolo grafico 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 della sintesi vocale che del riconoscimento vocale dal registro contenitori mcr.microsoft.com
.
Installare il grafico Helm nel cluster Kubernetes
Eseguire il comando helm install
per installare il grafico Helm, sostituendo <config-values.yaml>
con il percorso e l'argomento nome file appropriati. Il grafico Helm microsoft/cognitive-services-speech-onpremise
è disponibile nell’Hub Microsoft Helm.
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
Si dovrebbe visualizzare una schermata 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 test Helm, che fungono da comodità per la verifica. Questi test convalidano l'idoneità del servizio. Per verificare le funzionalità di riconoscimento vocale e sintesi vocale, viene eseguito il comando Helm test.
helm test onprem-speech
Importante
Questi test avranno esito negativo se lo stato del POD non è Running
o se la distribuzione non è elencata nella colonna AVAILABLE
. 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 comando kubectl get all
. 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 gerarchici consentono l'ereditarietà dei grafici e tengono conto del concetto di specificità, in cui le impostazioni più specifiche eseguono l'override delle regole ereditate.
Riconoscimento vocale (grafico a ombrello)
I valori nel grafico "a ombrello" 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 è abilitata la funzionalità di helm test per il servizio riconoscimento vocale. |
true |
speechToText.verification.image.registry |
Il repository di immagini Docker usato da helm test per testare il servizio riconoscimento vocale. 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 |
Il repository di immagini Docker usato da helm test per testare il servizio riconoscimento vocale. Il pod di test Helm usa questo repository per eseguire il pull dell'immagine di uso del 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 del test. |
latest |
speechToText.verification.image.pullByHash |
Indica se l'immagine Docker di uso del 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 è abilitata la funzionalità di helm test per il servizio riconoscimento vocale. |
true |
textToSpeech.verification.image.registry |
Il repository di immagini Docker usato da helm test per testare il servizio riconoscimento vocale. 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 |
Il repository di immagini Docker usato da helm test per testare il servizio riconoscimento vocale. Il pod di test Helm usa questo repository per eseguire il pull dell'immagine di uso del 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 del test. |
latest |
textToSpeech.verification.image.pullByHash |
Indica se l'immagine Docker di uso del 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 uso di test. 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 (sotto-cartella: grafici/speechToText)
Per eseguire l'override del grafico "a ombrello", aggiungere il prefisso speechToText.
su qualsiasi parametro per renderlo più specifico. Ad esempio, eseguirà l'override del parametro corrispondente, ad esempio speechToText.numberOfConcurrentRequest
esegue l'override di numberOfConcurrentRequest
.
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 dell'immagine Docker di riconoscimento 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. Si usa soltanto 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 della panoramica di Voce del 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 del riconoscimento vocale i metadati del servizio. Le annotazioni sono coppie chiave-valore. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Indica se il ridimensionamento automatico orizzontale dei pod è abilitato. 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 (sottocartella: grafici/speechToText)
A partire dalla versione 2.2.0 del contenitore di riconoscimento vocale e dalla versione 0.2.0 del grafico Helm, vengono usati i parametri seguenti per l'analisi del sentiment usando l'API del servizio di linguaggio.
Parametro | Descrizione | Valori | Default |
---|---|---|---|
textanalytics.enabled |
Indica se il servizio di 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 , è necessario avere anche image.hash . 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 della panoramica di Voce del 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 di analisi del testo in Kubernetes. Vedere Tipi di servizio di Kubernetes | tipo di servizio Kubernetes valido | LoadBalancer |
textanalytics.service.port |
Porta del servizio di 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 il ridimensionamento automatico orizzontale dei pod è abilitato. Se abilitato, text-analytics-autoscaler verrà distribuito nel cluster Kubernetes |
true/false | true |
textanalytics.service.podDisruption.enabled |
Indica se il budget di interruzione dei pod è abilitato. Se abilitato, text-analytics-poddisruptionbudget verrà distribuito nel cluster Kubernetes |
true/false | true |
Sintesi vocale (sottocartella: grafici/textToSpeech)
Per eseguire l'override del grafico "a ombrello", aggiungere il prefisso textToSpeech.
su qualsiasi parametro per renderlo più specifico. Ad esempio, eseguirà l'override del parametro corrispondente, ad esempio textToSpeech.numberOfConcurrentRequest
esegue l'override di numberOfConcurrentRequest
.
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 la sintesi vocale. | latest |
image.pullSecrets |
Segreti dell'immagine per il pull dell'immagine Docker di sintesi 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 la sintesi vocale. Si usa soltanto 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 della panoramica di Voce del 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 il ridimensionamento automatico orizzontale dei pod è abilitato. 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 nel servizio Azure Kubernetes, vedere qui.