Använda Speech-tjänstcontainrar med Kubernetes och Helm

Ett alternativ för att hantera dina Speech-containrar lokalt är att använda Kubernetes och Helm. Med Kubernetes och Helm för att definiera tal till text och text till talcontaineravbildningar skapar vi ett Kubernetes-paket. Det här paketet distribueras till ett Lokalt Kubernetes-kluster. Slutligen utforskar vi hur du testar de distribuerade tjänsterna och olika konfigurationsalternativ. Mer information om hur du kör Docker-containrar utan Kubernetes-orkestrering finns i installera och köra Speech-tjänstcontainrar.

Förutsättningar

Följande förutsättningar innan du använder Speech-containrar lokalt:

Obligatoriskt Syfte
Azure-konto Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Åtkomst till containerregistret För att Kubernetes ska kunna hämta Docker-avbildningarna till klustret behöver det åtkomst till containerregistret.
Kubernetes CLI Kubernetes CLI krävs för att hantera delade autentiseringsuppgifter från containerregistret. Kubernetes behövs också före Helm, som är Kubernetes-pakethanteraren.
Helm CLI Installera Helm CLI, som används för att installera ett helm-diagram (containerpaketdefinition).
Talresurs För att kunna använda dessa containrar måste du ha:

En Speech Azure-resurs för att hämta den associerade faktureringsnyckeln och faktureringsslutpunktens URI. Båda värdena är tillgängliga på azure-portalens talöversikts- och nyckelsidor och krävs för att starta containern.

{API_KEY}: resursnyckel

{ENDPOINT_URI}: Slutpunkts-URI-exemplet är: https://eastus.api.cognitive.microsoft.com/sts/v1.0

Se information om värddatorn för Speech Service-containern som referens. Det här helm-diagrammet beräknar automatiskt processor- och minneskraven baserat på hur många avkodningar (samtidiga begäranden) som användaren anger. Dessutom justeras den baserat på om optimeringar för ljud-/textindata har konfigurerats som enabled. Helm-diagrammet är som standard två samtidiga begäranden och inaktiverar optimering.

Tjänst CPU/container Minne/container
tal till text en avkodare kräver minst 1 150 millicores. Om är optimizedForAudioFile aktiverat krävs 1 950 millicores. (standard: två avkodare) Krävs: 2 GB
Begränsad: 4 GB
text till tal en samtidig begäran kräver minst 500 millicores. Om är optimizeForTurboMode aktiverat krävs 1 000 millicores. (standard: två samtidiga begäranden) Krävs: 1 GB
Begränsad: 2 GB

Anslut till Kubernetes-klustret

Värddatorn förväntas ha ett tillgängligt Kubernetes-kluster. Se den här självstudien om hur du distribuerar ett Kubernetes-kluster för en konceptuell förståelse av hur du distribuerar ett Kubernetes-kluster till en värddator.

Konfigurera Helm-diagramvärden för distribution

Besök Microsoft Helm Hub för alla offentligt tillgängliga helm-diagram som erbjuds av Microsoft. Från Microsoft Helm Hub hittar du det lokala Azure AI Speech-diagrammet. Azure AI Speech On-Premises är det diagram vi installerar, men vi måste först skapa en config-values.yaml fil med explicita konfigurationer. Vi börjar med att lägga till Microsoft-lagringsplatsen i vår Helm-instans.

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

Därefter konfigurerar vi våra Helm-diagramvärden. Kopiera och klistra in följande YAML i en fil med namnet config-values.yaml. Mer information om hur du anpassar Det lokala Helm-diagrammet för Azure AI-tal finns i anpassa helm-diagram. # {ENDPOINT_URI} Ersätt kommentarerna och # {API_KEY} med dina egna värden.

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

Viktigt!

billing Om värdena och apikey inte tillhandahålls upphör tjänsterna att gälla efter 15 minuter. På samma sätt misslyckas verifieringen eftersom tjänsterna inte är tillgängliga.

Kubernetes-paketet (Helm-diagram)

Helm-diagrammet innehåller konfigurationen av vilka Docker-avbildningar som ska hämtas från mcr.microsoft.com containerregistret.

Ett Helm-diagram är en samling filer som beskriver en relaterad uppsättning Kubernetes-resurser. Ett enda diagram kan användas för att distribuera något enkelt, till exempel en memcached-podd eller något komplext, till exempel en fullständig webbappsstack med HTTP-servrar, databaser, cacheminnen och så vidare.

De angivna Helm-diagrammen hämtar Docker-avbildningarna av Speech-tjänsten, både text till tal och tal till texttjänster från mcr.microsoft.com containerregistret.

Installera Helm-diagrammet i Kubernetes-klustret

helm install Kör kommandot för att installera helm-diagrammet och ersätt <config-values.yaml> med rätt sökväg och filnamnsargument. Helm-diagrammet microsoft/cognitive-services-speech-onpremise är tillgängligt på Microsoft Helm Hub.

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

Här är ett exempel på utdata som du kan förvänta dig från en lyckad installationskörning:

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

Kubernetes-distributionen kan ta över flera minuter att slutföra. Kontrollera att både poddar och tjänster är korrekt distribuerade och tillgängliga genom att köra följande kommando:

kubectl get all

Du bör förvänta dig att se något som liknar följande utdata:

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

Verifiera Helm-distribution med Helm-tester

De installerade Helm-diagrammen definierar Helm-tester som fungerar som en bekvämlighet för verifiering. Dessa tester validerar tjänstens beredskap. För att verifiera både tal till text och text till tal-funktioner kör vi Helm-testkommandot .

helm test onprem-speech

Viktigt!

Dessa tester misslyckas om POD-statusen inte Running är eller om distributionen inte visas under AVAILABLE kolumnen. Ha tålamod eftersom det kan ta över tio minuter att slutföra.

Dessa tester ger olika statusresultat:

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

Som ett alternativ till att köra helm-testerna kan du samla in externa IP-adresser och motsvarande portar från kubectl get all kommandot. Med hjälp av IP och port öppnar du en webbläsare och navigerar till http://<external-ip>:<port>:/swagger/index.html för att visa API swagger-sidan(erna).

Anpassa Helm-diagram

Helm-diagram är hierarkiska. Eftersom hierarkisk möjliggör arv av diagram tillgodoser det även begreppet specificitet, där inställningar som är mer specifika åsidosätter ärvda regler.

Tal (paraplydiagram)

Värden i toppnivådiagrammet "paraply" åsidosätter motsvarande underdiagramsvärden. Därför bör alla lokala anpassade värden läggas till här.

Parameter Description Standard
speechToText.enabled Om tal till text-tjänsten är aktiverad. true
speechToText.verification.enabled Om funktionen helm test för tal till text-tjänsten är aktiverad. true
speechToText.verification.image.registry Docker-avbildningslagringsplatsen som helm test använder för att testa tal till text-tjänsten . Helm skapar en separat podd i klustret för testning och hämtar testanvändningsavbildningen från det här registret. docker.io
speechToText.verification.image.repository Docker-avbildningslagringsplatsen som helm test använder för att testa tal till text-tjänsten . Helm-testpodden använder den här lagringsplatsen för att hämta testanvändningsbilden . antsu/on-prem-client
speechToText.verification.image.tag Docker-avbildningstaggen som används med helm test för tal till text-tjänsten . Helm-testpodden använder den här taggen för att hämta testanvändningsbilden . latest
speechToText.verification.image.pullByHash Om docker-avbildningen för testanvändning hämtas av hash- Om true, speechToText.verification.image.hash ska läggas till, med giltigt värde för avbildningshash. false
speechToText.verification.image.arguments Argumenten som används för att köra docker-avbildningen test-use . Helm-testpodden skickar dessa argument till containern när du kör 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 Om text till tal-tjänsten är aktiverad. true
textToSpeech.verification.enabled Om funktionen helm test för tal till text-tjänsten är aktiverad. true
textToSpeech.verification.image.registry Docker-avbildningslagringsplatsen som helm test använder för att testa tal till text-tjänsten . Helm skapar en separat podd i klustret för testning och hämtar testanvändningsavbildningen från det här registret. docker.io
textToSpeech.verification.image.repository Docker-avbildningslagringsplatsen som helm test använder för att testa tal till text-tjänsten . Helm-testpodden använder den här lagringsplatsen för att hämta testanvändningsbilden . antsu/on-prem-client
textToSpeech.verification.image.tag Docker-avbildningstaggen som används med helm test för tal till text-tjänsten . Helm-testpodden använder den här taggen för att hämta testanvändningsbilden . latest
textToSpeech.verification.image.pullByHash Om docker-avbildningen för testanvändning hämtas av hash- Om true, textToSpeech.verification.image.hash ska läggas till, med giltigt värde för avbildningshash. false
textToSpeech.verification.image.arguments Argumenten som ska köras med docker-avbildningen test-use . Helm-testpodden skickar dessa argument till containern när du kör helm test. "./text-to-speech-client"
"--input='What's the weather like'"
"--host=$(TEXT_TO_SPEECH_HOST)"
"--port=$(TEXT_TO_SPEECH_PORT)"

Tal till text (underdiagram: diagram/speechToText)

Om du vill åsidosätta "paraplydiagrammet" lägger du till prefixet speechToText. på valfri parameter för att göra det mer specifikt. Den åsidosätter till exempel motsvarande parameter, speechToText.numberOfConcurrentRequest till exempel åsidosättningar numberOfConcurrentRequest.

Parameter Description Standard
enabled Om tal till text-tjänsten är aktiverad. false
numberOfConcurrentRequest Antalet samtidiga begäranden för tal till text-tjänsten . Det här diagrammet beräknar automatiskt processor- och minnesresurser baserat på det här värdet. 2
optimizeForAudioFile Om tjänsten behöver optimera för ljudinmatning via ljudfiler. Om trueallokerar det här diagrammet mer CPU-resurs till tjänsten. false
image.registry Avbildningsregistret för tal till text docker. containerpreview.azurecr.io
image.repository Lagringsplatsen för tal till text docker-avbildning. microsoft/cognitive-services-speech-to-text
image.tag Taggen speech to text docker image . latest
image.pullSecrets Bildhemligheterna för att hämta tal till text docker-avbildning.
image.pullByHash Om docker-avbildningen hämtas med hash. Om true, image.hash krävs. false
image.hash Hash för tal till text docker-avbildning. Används endast när image.pullByHash: true.
image.args.eula (krävs) Anger att du har godkänt licensen. Det enda giltiga värdet är accept
image.args.billing (krävs) URI-värdet för faktureringsslutpunkten är tillgängligt på sidan Talöversikt i Azure-portalen.
image.args.apikey (krävs) Används för att spåra faktureringsinformation.
service.type Kubernetes-tjänsttypen för tal till text-tjänsten . Mer information och verifiera molnleverantörens support finns i anvisningarna för Kubernetes-tjänsttyper. LoadBalancer
service.port Porten för tal till text-tjänsten . 80
service.annotations Tal till text-anteckningar för tjänstens metadata. Anteckningar är nyckelvärdepar.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Om autoskalning av vågrät podd är aktiverad. speech-to-text-autoscaler Om truedistribueras den i Kubernetes-klustret. true
service.podDisruption.enabled Om poddstörningsbudgeten är aktiverad. speech-to-text-poddisruptionbudget Om truedistribueras den i Kubernetes-klustret. true

Attitydanalys (underdiagram: diagram/speechToText)

Från och med v2.2.0 i tal till textcontainer och v0.2.0 i Helm-diagrammet används följande parametrar för attitydanalys med hjälp av Api:et för språktjänsten.

Parameter Description Värden Standardvärde
textanalytics.enabled Om textanalystjänsten är aktiverad sant/falskt false
textanalytics.image.registry Docker-avbildningsregistret för textanalys giltigt Docker-avbildningsregister
textanalytics.image.repository Docker-avbildningslagringsplatsen för textanalys giltig docker-avbildningslagringsplats
textanalytics.image.tag Docker-avbildningstaggen för textanalys giltig docker-avbildningstagg
textanalytics.image.pullSecrets Bildhemligheterna för att hämta docker-avbildning för textanalys giltigt namn på hemligheter
textanalytics.image.pullByHash Anger om du hämtar docker-avbildningen med hash. Om yes, image.hash måste också ha. Om noanger du det som "false". Standard är false. sant/falskt false
textanalytics.image.hash Docker-avbildningshashen för textanalys . Använd den endast med image.pullByHash:true. giltig docker-avbildningshash
textanalytics.image.args.eula Ett av de argument som krävs av textanalyscontainern , vilket indikerar att du har godkänt licensen. Värdet för det här alternativet måste vara: accept. accept, om du vill använda containern
textanalytics.image.args.billing Ett av de argument som krävs av textanalyscontainern , som anger faktureringsslutpunktens URI. URI-värdet för faktureringsslutpunkten är tillgängligt på sidan Talöversikt i Azure-portalen. giltig URI för faktureringsslutpunkt
textanalytics.image.args.apikey Ett av de argument som krävs av textanalyscontainern , som används för att spåra faktureringsinformation. giltig apikey
textanalytics.cpuRequest Begärd CPU för textanalyscontainer heltal 3000m
textanalytics.cpuLimit Den begränsade CPU:en för textanalyscontainer 8000m
textanalytics.memoryRequest Det begärda minnet för textanalyscontainern 3Gi
textanalytics.memoryLimit Det begränsade minnet för textanalyscontainern 8Gi
textanalytics.service.sentimentURISuffix Attitydanalysens URI-suffix, hela URI:n är i formatet "http://<service>:<port>/<sentimentURISuffix>". text/analytics/v3.0-preview/sentiment
textanalytics.service.type Typen av textanalystjänst i Kubernetes. Se Kubernetes-tjänsttyper giltig Kubernetes-tjänsttyp LoadBalancer
textanalytics.service.port Porten för textanalystjänsten heltal 50085
textanalytics.service.annotations Anteckningarna som användare kan lägga till i metadata för textanalystjänsten . Till exempel:
Anteckningar:
some/annotation1: value1
some/annotation2: value2
anteckningar, en per rad
textanalytics.serivce.autoScaler.enabled Om vågrät autoskalning av poddar är aktiverat. Om aktiverad text-analytics-autoscaler , kommer att distribueras i Kubernetes-klustret sant/falskt true
textanalytics.service.podDisruption.enabled Om poddstörningsbudget är aktiverad. Om aktiverad text-analytics-poddisruptionbudget , kommer att distribueras i Kubernetes-klustret sant/falskt true

Text till tal (underdiagram: diagram/textToSpeech)

Om du vill åsidosätta "paraplydiagrammet" lägger du till prefixet textToSpeech. på valfri parameter för att göra det mer specifikt. Den åsidosätter till exempel motsvarande parameter, textToSpeech.numberOfConcurrentRequest till exempel åsidosättningar numberOfConcurrentRequest.

Parameter Description Standard
enabled Om text till tal-tjänsten är aktiverad. false
numberOfConcurrentRequest Antalet samtidiga begäranden för text till tal-tjänsten . Det här diagrammet beräknar automatiskt processor- och minnesresurser baserat på det här värdet. 2
optimizeForTurboMode Om tjänsten behöver optimera för textinmatning via textfiler. Om trueallokerar det här diagrammet mer CPU-resurs till tjänsten. false
image.registry Avbildningsregistret text till tal docker. containerpreview.azurecr.io
image.repository Lagringsplatsen för text till tal docker-avbildning. microsoft/cognitive-services-text-to-speech
image.tag Taggen text till tal docker-avbildning. latest
image.pullSecrets Bildhemligheterna för att hämta texten till tal docker-avbildningen.
image.pullByHash Om docker-avbildningen hämtas med hash. Om true, image.hash krävs. false
image.hash Hash för text till tal docker-avbildning. Används endast när image.pullByHash: true.
image.args.eula (krävs) Anger att du har godkänt licensen. Det enda giltiga värdet är accept
image.args.billing (krävs) URI-värdet för faktureringsslutpunkten är tillgängligt på sidan Talöversikt i Azure-portalen.
image.args.apikey (krävs) Används för att spåra faktureringsinformation.
service.type Kubernetes-tjänsttypen för text till tal-tjänsten . Mer information och verifiera molnleverantörens support finns i anvisningarna för Kubernetes-tjänsttyper. LoadBalancer
service.port Porten för text till taltjänsten . 80
service.annotations Text till tal-anteckningar för tjänstens metadata. Anteckningar är nyckelvärdepar.
annotations:
  some/annotation1: value1
  some/annotation2: value2
service.autoScaler.enabled Om autoskalning av vågrät podd är aktiverad. text-to-speech-autoscaler Om truedistribueras den i Kubernetes-klustret. true
service.podDisruption.enabled Om poddstörningsbudgeten är aktiverad. text-to-speech-poddisruptionbudget Om truedistribueras den i Kubernetes-klustret. true

Nästa steg

Mer information om hur du installerar program med Helm i Azure Kubernetes Service (AKS) finns här.