Delen via


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. We definiëren de spraak-naar-tekst- en tekst-naar-spraak containerafbeeldingen met Kubernetes en Helm, en maken zo 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 Docker-afbeeldingen naar het cluster te laten halen door Kubernetes, moet Kubernetes 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.
Spraakbron 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 verzoeken en het uitschakelen van optimalisatie.

Dienst 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 gelijktijdig verzoek is een minimum van 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 met 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-chartinstellingen. 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-charts halen de docker-images van de Speech-service, zowel de tekst-naar-spraakservice als de spraak-naar-tekstservice, van het mcr.microsoft.com containerregister.

De Helm-grafiek installeren in het Kubernetes-cluster

Voer de helm install opdracht uit om de helm chart te installeren en vervang de <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 de uitvoer vergelijkbaar is met het volgende.

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 naar de API Swagger-pagina('s).

Helm-grafieken aanpassen

Helm-grafieken zijn hiërarchisch. Hiërarchisch zijn maakt het erven van grafieken mogelijk, het ondersteunt ook het concept van specificiteit, waarbij specifiekere instellingen de geërfde regels overschrijven.

Spraak (overzichtsgrafiek)

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

Parameter Beschrijving 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 gebruikt om de spraak-naar-tekst-service 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-afbeeldingen die helm test gebruikt om de spraak-naar-tekstservice te testen. Helm-testpod gebruikt deze opslagplaats om de test-use image op te halen. antsu/on-prem-client
speechToText.verification.image.tag De Docker-imagetag die wordt gebruikt met helm test voor de spraak-naar-tekst-service. Helm-testpod gebruikt deze tag om de test-use afbeelding op te halen. latest
speechToText.verification.image.pullByHash Of de docker-installatiekopie voor testgebruik wordt opgehaald met hash. Als true, moet speechToText.verification.image.hash worden toegevoegd met een geldige hashwaarde voor afbeeldingen. 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 bij het uitvoeren ervan 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-images die door helm test gebruikt wordt om de spraak-naar-tekst-service te testen. Helm maakt een afzonderlijke pod in het cluster voor het testen en haalt de afbeelding voor testdoeleinden uit deze registry. docker.io
textToSpeech.verification.image.repository De opslagplaats voor docker-installatiekopieën die helm test wordt gebruikt om spraak naar tekstservice te testen. Helm test pod gebruikt deze repository om de test-image op te halen. antsu/on-prem-client
textToSpeech.verification.image.tag De docker image-tag die wordt gebruikt met helm test voor de spraak-naar-tekst-service. Helm-testpod gebruikt deze tag om de test-use image te pullen. latest
textToSpeech.verification.image.pullByHash Of de docker-installatiekopie voor testdoeleinden wordt opgehaald op basis van de hash. Als true, moet textToSpeech.verification.image.hash worden toegevoegd, met een geldige afbeeldingshashwaarde. false
textToSpeech.verification.image.arguments De argumenten om uit te voeren met de test-use docker-image. 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 (deelgrafiek: grafieken/speechToText)

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

Parameter Beschrijving 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 true gebeurt, zal dit diagram meer CPU-resources aan de service toewijzen. false
image.registry Het spraak-naar-tekst docker-imageregister. containerpreview.azurecr.io
image.repository De opslagplaats voor spraak-naar-tekst-docker-installatiekopieën . microsoft/cognitive-services-speech-to-text
image.tag De spraak-naar-tekst-docker-image-tag. latest
image.pullSecrets De geheimen van de afbeelding voor het ophalen van de spraak-naar-tekst docker afbeelding.
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-tekst-service. 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: diagrammen/spraakNaarTekst)

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 Beschrijving Waarden Standaard
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 Docker-images-opslagplaats
textanalytics.image.tag De text-analytics docker image tag geldige docker-imagetag
textanalytics.image.pullSecrets De geheimen van het trekken van de Docker-image voor texanalyses geldige geheimennaam
textanalytics.image.pullByHash Hiermee geeft u op of u een docker-afbeelding per hash ophaalt. Als yes, moet image.hash ook hebben. Als no, stel het in op 'onwaar'. Standaard is false. waar/onwaar false
textanalytics.image.hash De hash van de text-analytics docker-afbeelding. Gebruik het alleen met image.pullByHash:true. geldige docker-image hash
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 API-sleutel
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, waarbij de hele URI de structuur heeft van 'http://<service>:<port>/<sentimentURISuffix>'. text/analytics/v3.0-preview/sentiment
textanalytics.service.type Het type tekstanalysedienst in Kubernetes. Kubernetes-servicetypen bekijken geldig Kubernetes-servicetype LoadBalancer
textanalytics.service.port De poort van de tekstanalyse-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 overschrijft het bijvoorbeeld de bijbehorende parameter, textToSpeech.numberOfConcurrentRequest overschrijft numberOfConcurrentRequest.

Parameter Beschrijving 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 true wijst dit diagram meer CPU-resources toe aan de dienstverlening. false
image.registry De tekst-naar-spraak docker-image registry. containerpreview.azurecr.io
image.repository De tekst-naar-spraak docker image-repository. microsoft/cognitive-services-text-to-speech
image.tag De tekst-naar-spraak docker afbeeldingstag. latest
image.pullSecrets De afbeeldinggeheimen voor het opvragen van de text-to-speech Docker-image.
image.pullByHash Of de Docker-image wordt opgehaald met behulp van een hash. Als true, image.hash is vereist. false
image.hash De hash van de tekst-naar-spraak-Docker-image. 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-spraak-annotaties van de servicemetagegevens. 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 de Pod Disruption Budget 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).