Speech Service-containers gebruiken met Kubernetes en Helm

Een optie voor het on-premises beheren van uw Speech-containers is het gebruik van Kubernetes en Helm. Kubernetes en Helm gebruiken om de spraak-naar-tekst- en tekst-naar-spraakcontainerinstallatiekopieën te definiëren, maken we een Kubernetes-pakket. Dit pakket wordt on-premises geïmplementeerd in een Kubernetes-cluster. Ten slotte verkennen we hoe we de geïmplementeerde services en verschillende configuratieopties testen. Zie Speech Service-containers installeren en uitvoeren voor meer informatie over het uitvoeren van Docker-containers zonder Kubernetes-indeling.

Vereisten

De volgende vereisten voordat u on-premises Spraakcontainers gebruikt:

Vereist Doel
Azure-account Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Toegang tot Container Registry Om kubernetes de docker-installatiekopieën naar het cluster te kunnen halen, moet deze toegang hebben tot het containerregister.
Kubernetes CLI De Kubernetes CLI is vereist voor het beheren van de gedeelde referenties uit het containerregister. Kubernetes is ook nodig voor Helm, de Kubernetes-pakketbeheerder.
Helm CLI Installeer de Helm CLI, die wordt gebruikt om een Helm-grafiek (containerpakketdefinitie) te installeren.
Spraakresource Als u deze containers wilt gebruiken, moet u het volgende hebben:

Een Speech Azure-resource om de bijbehorende factureringssleutel en factureringseindpunt-URI op te halen. Beide waarden zijn beschikbaar op de pagina's Spraakoverzicht en Sleutels van Azure Portal en zijn vereist om de container te starten.

{API_KEY}: resourcesleutel

{ENDPOINT_URI}: voorbeeld van eindpunt-URI is: https://eastus.api.cognitive.microsoft.com/sts/v1.0

Raadpleeg de details van de hostcomputer van de Speech-servicecontainer als referentie. In deze Helm-grafiek worden de CPU- en geheugenvereisten automatisch berekend op basis van het aantal decodes (gelijktijdige aanvragen) dat de gebruiker opgeeft. Daarnaast wordt het aangepast op basis van of optimalisaties voor audio-/tekstinvoer zijn geconfigureerd als enabled. De Helm-grafiek is standaard ingesteld op twee gelijktijdige aanvragen en het uitschakelen van optimalisatie.

Service CPU/container Geheugen/container
spraak-naar-tekst voor één decoder is minimaal 1150 millicores vereist. Als de optimizedForAudioFile optie is ingeschakeld, zijn 1950 millicores vereist. (standaard: twee decoders) Vereist: 2 GB
Beperkt: 4 GB
tekst naar spraak voor één gelijktijdige aanvraag is minimaal 500 millicores vereist. Als de optimizeForTurboMode optie is ingeschakeld, zijn 1000 millicores vereist. (standaard: twee gelijktijdige aanvragen) Vereist: 1 GB
Beperkt: 2 GB

Verbinding maken naar het Kubernetes-cluster

Naar verwachting heeft de hostcomputer een beschikbaar Kubernetes-cluster. Zie deze zelfstudie over het implementeren van een Kubernetes-cluster voor een conceptueel begrip van het implementeren van een Kubernetes-cluster op een hostcomputer.

Helm-grafiekwaarden configureren voor implementatie

Bezoek de Microsoft Helm Hub voor alle openbaar beschikbare Helm-grafieken die door Microsoft worden aangeboden. Vanuit de Microsoft Helm Hub vindt u de on-premises grafiek van Azure AI Speech. Azure AI Speech On-Premises is de grafiek die we installeren, maar we moeten eerst een config-values.yaml bestand maken met expliciete configuraties. Laten we beginnen met het toevoegen van de Microsoft-opslagplaats aan ons Helm-exemplaar.

helm repo add microsoft https://microsoft.github.io/charts/repo

Vervolgens configureren we onze Helm-grafiekwaarden. Kopieer en plak de volgende YAML in een bestand met de naam config-values.yaml. Zie Helm-grafieken aanpassen voor meer informatie over het aanpassen van de Azure AI Speech On-Premises Helm-grafiek. Vervang de # {ENDPOINT_URI} en # {API_KEY} opmerkingen door uw eigen waarden.

# 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}

Belangrijk

Als de billing en apikey waarden niet worden verstrekt, verlopen de services na 15 minuten. Verificatie mislukt ook omdat de services niet beschikbaar zijn.

Het Kubernetes-pakket (Helm-grafiek)

De Helm-grafiek bevat de configuratie van welke Docker-installatiekopieën moeten worden opgehaald uit het mcr.microsoft.com containerregister.

Een Helm-grafiek is een verzameling bestanden die een gerelateerde set Kubernetes-resources beschrijven. Een enkele grafiek kan worden gebruikt om iets eenvoudigs te implementeren, zoals een memcached pod, of iets complexs, zoals een volledige web-app-stack met HTTP-servers, databases, caches enzovoort.

De opgegeven Helm-grafieken halen de docker-installatiekopieën van de Speech-service, zowel tekst naar spraak als spraak-naar-tekstservices uit het mcr.microsoft.com containerregister.

De Helm-grafiek installeren in het Kubernetes-cluster

Voer de helm install opdracht uit om de Helm-grafiek te installeren en vervang het <config-values.yaml> door het juiste pad en het argument bestandsnaam. De microsoft/cognitive-services-speech-onpremise Helm-grafiek is beschikbaar op de Microsoft Helm Hub.

helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
    --version 0.1.1 \
    --values <config-values.yaml> 

Hier volgt een voorbeeld van uitvoer die u kunt verwachten van een geslaagde installatie:

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

Het kan enkele minuten duren voordat de Kubernetes-implementatie is voltooid. Voer de volgende opdracht uit om te controleren of zowel pods als services correct zijn geïmplementeerd en beschikbaar zijn:

kubectl get all

U kunt verwachten dat er iets lijkt op de volgende uitvoer:

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

Helm-implementatie verifiëren met Helm-tests

In de geïnstalleerde Helm-grafieken worden Helm-tests gedefinieerd, die handig zijn voor verificatie. Met deze tests wordt de gereedheid van de service gevalideerd. Om zowel spraak-naar-tekst- als tekst-naar-spraakfuncties te controleren, voeren we de Helm-testopdracht uit.

helm test onprem-speech

Belangrijk

Deze tests mislukken als de POD-status niet Running is of als de implementatie niet wordt vermeld onder de AVAILABLE kolom. Wees geduldig omdat dit meer dan tien minuten kan duren.

Deze tests voeren verschillende statusresultaten uit:

RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test

Als alternatief voor het uitvoeren van de Helm-tests kunt u de externe IP-adressen en bijbehorende poorten van de kubectl get all opdracht verzamelen. Open met behulp van het IP-adres en de poort een webbrowser en navigeer naar http://<external-ip>:<port>:/swagger/index.html de API-swagger-pagina('s).

Helm-grafieken aanpassen

Helm-grafieken zijn hiërarchisch. Hiërarchisch zijn maakt overname van grafieken mogelijk, het is ook geschikt voor het concept van specificiteit, waarbij instellingen die meer specifieke overschreven regels zijn.

Spraak (paraplugrafiek)

Waarden in de grafiek op het hoogste niveau 'paraplu' overschrijven de bijbehorende subdiagramwaarden. Daarom moeten alle on-premises aangepaste waarden hier worden toegevoegd.

Parameter Description Standaard
speechToText.enabled Of de spraak-naar-tekstservice is ingeschakeld. true
speechToText.verification.enabled Of de mogelijkheid voor spraak-naar-tekstservice helm test is ingeschakeld. true
speechToText.verification.image.registry De opslagplaats voor docker-installatiekopieën die helm test wordt gebruikt om spraak naar tekstservice te testen. Helm maakt een afzonderlijke pod in het cluster voor het testen en haalt de installatiekopie voor testgebruik op uit dit register. docker.io
speechToText.verification.image.repository De opslagplaats voor docker-installatiekopieën die helm test wordt gebruikt om spraak naar tekstservice te testen. Helm-testpod maakt gebruik van deze opslagplaats om een installatiekopie voor testgebruik op te halen. antsu/on-prem-client
speechToText.verification.image.tag De docker-installatiekopietag die helm test wordt gebruikt voor spraak-naar-tekstservice . Helm-testpod gebruikt deze tag om een installatiekopie voor testgebruik op te halen. latest
speechToText.verification.image.pullByHash Of de docker-installatiekopie voor testgebruik wordt opgehaald met hash. Als true, speechToText.verification.image.hash moet worden toegevoegd, met een geldige hash-waarde voor de installatiekopieën. false
speechToText.verification.image.arguments De argumenten die worden gebruikt om de docker-installatiekopieën voor testgebruik uit te voeren. Helm-testpod geeft deze argumenten door aan de container wanneer deze wordt uitgevoerd 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 Hiermee wordt aangegeven of de tekst-naar-spraakservice is ingeschakeld. true
textToSpeech.verification.enabled Of de mogelijkheid voor spraak-naar-tekstservice helm test is ingeschakeld. true
textToSpeech.verification.image.registry De opslagplaats voor docker-installatiekopieën die helm test wordt gebruikt om spraak naar tekstservice te testen. Helm maakt een afzonderlijke pod in het cluster voor het testen en haalt de installatiekopie voor testgebruik op uit dit register. docker.io
textToSpeech.verification.image.repository De opslagplaats voor docker-installatiekopieën die helm test wordt gebruikt om spraak naar tekstservice te testen. Helm-testpod maakt gebruik van deze opslagplaats om een installatiekopie voor testgebruik op te halen. antsu/on-prem-client
textToSpeech.verification.image.tag De docker-installatiekopietag die helm test wordt gebruikt voor spraak-naar-tekstservice . Helm-testpod gebruikt deze tag om een installatiekopie voor testgebruik op te halen. latest
textToSpeech.verification.image.pullByHash Of de docker-installatiekopie voor testgebruik wordt opgehaald met hash. Als true, textToSpeech.verification.image.hash moet worden toegevoegd, met een geldige hash-waarde voor de installatiekopieën. false
textToSpeech.verification.image.arguments De argumenten die moeten worden uitgevoerd met de docker-installatiekopieën voor testgebruik . De Helm-testpod geeft deze argumenten door aan de container wanneer deze wordt uitgevoerd helm test. "./text-to-speech-client"
"--input='What's the weather like'"
"--host=$(TEXT_TO_SPEECH_HOST)"
"--port=$(TEXT_TO_SPEECH_PORT)"

Spraak-naar-tekst (subgrafiek: grafieken/speechToText)

Als u de paraplugrafiek wilt overschrijven, voegt u het voorvoegsel speechToText. toe aan een parameter om deze specifieker te maken. Zo wordt bijvoorbeeld de bijbehorende parameter overschreven, speechToText.numberOfConcurrentRequest bijvoorbeeld onderdrukkingen numberOfConcurrentRequest.

Parameter Description Standaard
enabled Of de spraak-naar-tekstservice is ingeschakeld. false
numberOfConcurrentRequest Het aantal gelijktijdige aanvragen voor de spraak-naar-tekstservice . In deze grafiek worden automatisch CPU- en geheugenbronnen berekend op basis van deze waarde. 2
optimizeForAudioFile Of de service moet optimaliseren voor audio-invoer via audiobestanden. Als truedit diagram meer CPU-resources aan de service toewijst. false
image.registry Het docker-installatiekopieregister voor spraak-naar-tekst . containerpreview.azurecr.io
image.repository De opslagplaats voor spraak-naar-tekst-docker-installatiekopieën . microsoft/cognitive-services-speech-to-text
image.tag De tag voor de spraak-naar-tekst-docker-installatiekopie . latest
image.pullSecrets De installatiekopiegeheimen voor het ophalen van de spraak-naar-tekst-docker-installatiekopie .
image.pullByHash Of de docker-installatiekopie wordt opgehaald met hash. Als true, image.hash is vereist. false
image.hash De hash van de spraak-naar-tekst-docker-installatiekopie . Alleen gebruikt wanneer image.pullByHash: true.
image.args.eula (vereist) Geeft aan dat u de licentie hebt geaccepteerd. De enige geldige waarde is accept
image.args.billing (vereist) De URI-waarde voor het factureringseindpunt is beschikbaar op de pagina Spraakoverzicht van Azure Portal.
image.args.apikey (vereist) Wordt gebruikt om factureringsgegevens bij te houden.
service.type Het Kubernetes-servicetype van de spraak-naar-tekstservice . Zie de instructies voor kubernetes-servicetypen voor meer informatie en controleer de ondersteuning van cloudproviders. LoadBalancer
service.port De poort van de spraak-naar-tekstservice . 80
service.annotations De spraak-naar-tekstaantekeningen voor de metagegevens van de service. Aantekeningen zijn sleutel-waardeparen.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Of de automatische schaalaanpassing van horizontale pods is ingeschakeld. Als true, wordt de speech-to-text-autoscaler geïmplementeerd in het Kubernetes-cluster. true
service.podDisruption.enabled Of het budget voor podonderbreking is ingeschakeld. Als true, wordt de speech-to-text-poddisruptionbudget geïmplementeerd in het Kubernetes-cluster. true

Sentimentanalyse (subgrafiek: grafieken/speechToText)

Vanaf v2.2.0 van de spraak-naar-tekstcontainer en v0.2.0 van de Helm-grafiek worden de volgende parameters gebruikt voor sentimentanalyse met behulp van de Language-service-API.

Parameter Description Waarden Standaardinstelling
textanalytics.enabled Of de text-analytics-service is ingeschakeld waar/onwaar false
textanalytics.image.registry Het docker-installatiekopieënregister voor text-analytics geldig docker-installatiekopieënregister
textanalytics.image.repository De opslagplaats voor docker-installatiekopieën voor text-analytics geldige opslagplaats voor docker-installatiekopieën
textanalytics.image.tag De tag text-analytics docker-installatiekopieën geldige docker-installatiekopieëntag
textanalytics.image.pullSecrets De installatiekopiegeheimen voor het ophalen van een Docker-installatiekopie voor tekstanalyse geldige geheimennaam
textanalytics.image.pullByHash Hiermee geeft u op of u docker-installatiekopie per hash ophaalt. Als yes, image.hash moet ook hebben. Als no, stel deze in op 'false'. Standaard is false. waar/onwaar false
textanalytics.image.hash De hash van de docker-installatiekopieën voor text-analytics . Gebruik het alleen met image.pullByHash:true. geldige hash van docker-installatiekopieën
textanalytics.image.args.eula Een van de vereiste argumenten per text-analytics-container , wat aangeeft dat u de licentie hebt geaccepteerd. De waarde van deze optie moet zijn: accept. acceptals u de container wilt gebruiken
textanalytics.image.args.billing Een van de vereiste argumenten per text-analytics-container , waarmee de URI van het factureringseindpunt wordt opgegeven. De URI-waarde voor het factureringseindpunt is beschikbaar op de pagina Spraakoverzicht van Azure Portal. geldige URI voor factureringseindpunt
textanalytics.image.args.apikey Een van de vereiste argumenten per text-analytics-container , die wordt gebruikt om factureringsgegevens bij te houden. geldige apikey
textanalytics.cpuRequest De aangevraagde CPU voor text-analytics-container int 3000m
textanalytics.cpuLimit De beperkte CPU voor text-analytics-container 8000m
textanalytics.memoryRequest Het aangevraagde geheugen voor de text-analytics-container 3Gi
textanalytics.memoryLimit Het beperkte geheugen voor de text-analytics-container 8Gi
textanalytics.service.sentimentURISuffix Het achtervoegsel van de sentimentanalyse-URI, de hele URI heeft de indeling 'http://<service>:<port>/<sentimentURISuffix>'. text/analytics/v3.0-preview/sentiment
textanalytics.service.type Het type text-analytics-service in Kubernetes. Kubernetes-servicetypen bekijken geldig Kubernetes-servicetype LoadBalancer
textanalytics.service.port De poort van de text-analytics-service int 50085
textanalytics.service.annotations De aantekeningen die gebruikers kunnen toevoegen aan metagegevens van de Text Analytics-service . Bijvoorbeeld:
Aantekeningen:
some/annotation1: value1
some/annotation2: value2
aantekeningen, één per regel
textanalytics.serivce.autoScaler.enabled Of horizontale automatische schaalaanpassing van pods is ingeschakeld. Indien ingeschakeld, text-analytics-autoscaler wordt deze geïmplementeerd in het Kubernetes-cluster waar/onwaar true
textanalytics.service.podDisruption.enabled Of podonderbrekingsbudget is ingeschakeld. Indien ingeschakeld, text-analytics-poddisruptionbudget wordt deze geïmplementeerd in het Kubernetes-cluster waar/onwaar true

Tekst naar spraak (subgrafiek: grafieken/textToSpeech)

Als u de paraplugrafiek wilt overschrijven, voegt u het voorvoegsel textToSpeech. toe aan een parameter om deze specifieker te maken. Zo wordt bijvoorbeeld de bijbehorende parameter overschreven, textToSpeech.numberOfConcurrentRequest bijvoorbeeld onderdrukkingen numberOfConcurrentRequest.

Parameter Description Standaard
enabled Hiermee wordt aangegeven of de tekst-naar-spraakservice is ingeschakeld. false
numberOfConcurrentRequest Het aantal gelijktijdige aanvragen voor de tekst-naar-spraakservice . In deze grafiek worden automatisch CPU- en geheugenbronnen berekend op basis van deze waarde. 2
optimizeForTurboMode Of de service moet optimaliseren voor tekstinvoer via tekstbestanden. Als truedit diagram meer CPU-resources aan de service toewijst. false
image.registry De tekst naar het docker-installatiekopieregister voor spraak . containerpreview.azurecr.io
image.repository De tekst naar spraak-docker-installatiekopieopslagplaats . microsoft/cognitive-services-text-to-speech
image.tag De tag tekst naar spraak-docker-installatiekopie . latest
image.pullSecrets De installatiekopiegeheimen voor het ophalen van de tekst naar de docker-installatiekopie van spraak .
image.pullByHash Of de docker-installatiekopie wordt opgehaald met hash. Als true, image.hash is vereist. false
image.hash De hash van de tekst naar spraak-Docker-installatiekopie . Alleen gebruikt wanneer image.pullByHash: true.
image.args.eula (vereist) Geeft aan dat u de licentie hebt geaccepteerd. De enige geldige waarde is accept
image.args.billing (vereist) De URI-waarde voor het factureringseindpunt is beschikbaar op de pagina Spraakoverzicht van Azure Portal.
image.args.apikey (vereist) Wordt gebruikt om factureringsgegevens bij te houden.
service.type Het Kubernetes-servicetype van de tekst-naar-spraakservice . Zie de instructies voor kubernetes-servicetypen voor meer informatie en controleer de ondersteuning van cloudproviders. LoadBalancer
service.port De poort van de tekst naar spraakservice . 80
service.annotations De tekst naar spraakaantekeningen voor de metagegevens van de service. Aantekeningen zijn sleutel-waardeparen.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Of de automatische schaalaanpassing van horizontale pods is ingeschakeld. Als true, wordt de text-to-speech-autoscaler geïmplementeerd in het Kubernetes-cluster. true
service.podDisruption.enabled Of het budget voor podonderbreking is ingeschakeld. Als true, wordt de text-to-speech-poddisruptionbudget geïmplementeerd in het Kubernetes-cluster. true

Volgende stappen

Ga hier voor meer informatie over het installeren van toepassingen met Helm in Azure Kubernetes Service (AKS).