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

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.