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

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 numberOfConcurrentRequestdi .

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 numberOfConcurrentRequestdi .

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.