Usar contêineres de serviço de fala com Kubernetes e Helm
Uma opção para gerenciar seus contêineres de fala no local é usar o Kubernetes e o Helm. Usando o Kubernetes e o Helm para definir as imagens de contêiner de fala para texto e texto para fala, criamos um pacote Kubernetes. Este pacote é implantado em um cluster Kubernetes local. Finalmente, exploramos como testar os serviços implantados e várias opções de configuração. Para obter mais informações sobre como executar contêineres do Docker sem orquestração do Kubernetes, consulte instalar e executar contêineres do serviço de fala.
Pré-requisitos
Os seguintes pré-requisitos antes de usar contêineres de fala no local:
Necessário | Propósito |
---|---|
Conta do Azure | Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar. |
Acesso ao Registo de Contentores | Para que o Kubernetes puxe as imagens do docker para o cluster, ele precisa acessar o registro do contêiner. |
Kubernetes CLI | A CLI do Kubernetes é necessária para gerenciar as credenciais compartilhadas do registro do contêiner. O Kubernetes também é necessário antes do Helm, que é o gerenciador de pacotes do Kubernetes. |
Leme CLI | Instale a CLI Helm, que é usada para instalar um gráfico de leme (definição de pacote de contêiner). |
Recurso de fala | Para utilizar estes contentores, deve ter: Um recurso do Azure de Fala para obter a chave de cobrança associada e o URI do ponto de extremidade de cobrança. Ambos os valores estão disponíveis nas páginas Visão Geral de Fala e Chaves do portal do Azure e são necessários para iniciar o contêiner. {API_KEY}: chave de recurso {ENDPOINT_URI}: exemplo de URI do ponto de extremidade é: https://eastus.api.cognitive.microsoft.com/sts/v1.0 |
A configuração recomendada do computador host
Consulte os detalhes do computador host do contêiner do serviço de fala como referência. Este gráfico de leme calcula automaticamente os requisitos de CPU e memória com base em quantas decodificações (solicitações simultâneas) o usuário especifica. Além disso, ele se ajusta com base em se as otimizações para entrada de áudio/texto estão configuradas como enabled
. O gráfico de leme assume como padrão duas solicitações simultâneas e desabilita a otimização.
Serviço | CPU / Contentor | Memória / Contentor |
---|---|---|
fala para texto | Um descodificador requer um mínimo de 1.150 milinúcleos. Se o optimizedForAudioFile estiver ativado, serão necessários 1.950 milinúcleos. (padrão: dois decodificadores) |
Necessário: 2 GB Limitado: 4 GB |
conversão de texto em fala | Uma solicitação simultânea requer um mínimo de 500 milinúcleos. Se o optimizeForTurboMode estiver ativado, serão necessários 1.000 milinúcleos. (padrão: duas solicitações simultâneas) |
Necessário: 1 GB Limitado: 2 GB |
Conectar-se ao cluster do Kubernetes
Espera-se que o computador host tenha um cluster Kubernetes disponível. Consulte este tutorial sobre como implantar um cluster Kubernetes para obter uma compreensão conceitual de como implantar um cluster Kubernetes em um computador host.
Configurar valores de gráfico de leme para implantação
Visite o Microsoft Helm Hub para obter todos os gráficos de leme disponíveis publicamente oferecidos pela Microsoft. No Microsoft Helm Hub, você encontra o Gráfico Local de Fala da IA do Azure. O Azure AI Speech On-Premises é o gráfico que instalamos, mas primeiro devemos criar um config-values.yaml
arquivo com configurações explícitas. Vamos começar adicionando o repositório da Microsoft à nossa instância Helm.
helm repo add microsoft https://microsoft.github.io/charts/repo
Em seguida, configuramos nossos valores de gráfico de leme. Copie e cole o seguinte YAML em um arquivo chamado config-values.yaml
. Para obter mais informações sobre como personalizar o Gráfico de Leme Local de Fala do Azure AI, consulte Personalizar gráficos de leme. Substitua os comentários e # {API_KEY}
pelos # {ENDPOINT_URI}
seus próprios valores.
# 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 os billing
e apikey
valores não forem fornecidos, os serviços expirarão após 15 min. Da mesma forma, a verificação falhará, pois os serviços não estarão disponíveis.
O pacote Kubernetes (gráfico Helm)
O gráfico Helm contém a configuração da(s) imagem(ns) docker a ser extraída(s) do mcr.microsoft.com
registro do contêiner.
Um gráfico Helm é uma coleção de arquivos que descrevem um conjunto relacionado de recursos do Kubernetes. Um único gráfico pode ser usado para implantar algo simples, como um pod memcached, ou algo complexo, como uma pilha completa de aplicativos Web com servidores HTTP, bancos de dados, caches e assim por diante.
Os gráficos Helm fornecidos extraem as imagens do docker do serviço de Fala, tanto de texto para fala quanto de fala para serviços de texto do registro de mcr.microsoft.com
contêiner.
Instalar o gráfico Helm no cluster do Kubernetes
Execute o helm install
comando para instalar o gráfico de leme, substituindo o <config-values.yaml>
pelo caminho apropriado e o argumento de nome de arquivo. O microsoft/cognitive-services-speech-onpremise
gráfico Helm está disponível no Microsoft Helm Hub.
helm install onprem-speech microsoft/cognitive-services-speech-onpremise \
--version 0.1.1 \
--values <config-values.yaml>
Aqui está um exemplo de saída que você pode esperar ver de uma execução de instalação bem-sucedida:
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
A implantação do Kubernetes pode levar mais de alguns minutos para ser concluída. Para confirmar se ambos os pods e serviços estão corretamente implantados e disponíveis, execute o seguinte comando:
kubectl get all
Você deve esperar ver algo semelhante à seguinte saída:
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
Verificar a implantação do Helm com testes do Helm
Os gráficos Helm instalados definem os testes Helm, que servem como uma conveniência para verificação. Esses testes validam a prontidão do serviço. Para verificar os recursos de fala para texto e texto para fala, executamos o comando Helm test.
helm test onprem-speech
Importante
Esses testes falharão se o status POD não Running
for ou se a implantação não estiver listada AVAILABLE
na coluna. Seja paciente, pois isso pode levar mais de dez minutos para ser concluído.
Esses testes produzem vários resultados de status:
RUNNING: speech to text-readiness-test
PASSED: speech to text-readiness-test
RUNNING: text to speech-readiness-test
PASSED: text to speech-readiness-test
Como alternativa à execução dos testes de leme, você pode coletar os endereços IP externos e as portas correspondentes do kubectl get all
comando. Usando o IP e a porta, abra um navegador da Web e navegue até http://<external-ip>:<port>:/swagger/index.html
para visualizar a(s) página(s) de swagger da API.
Personalizar gráficos de leme
Os gráficos de leme são hierárquicos. Sendo hierárquico permite a herança de gráficos, ele também atende ao conceito de especificidade, onde configurações mais específicas substituem regras herdadas.
Discurso (gráfico guarda-chuva)
Os valores no gráfico "guarda-chuva" de nível superior substituem os valores correspondentes do subgráfico. Portanto, todos os valores personalizados locais devem ser adicionados aqui.
Parâmetro | Description | Predefinido |
---|---|---|
speechToText.enabled |
Se o serviço de fala para texto está habilitado. | true |
speechToText.verification.enabled |
Se o helm test recurso para o serviço de fala para texto está habilitado. |
true |
speechToText.verification.image.registry |
O repositório de imagens do docker que helm test usa para testar o serviço de fala para texto . O Helm cria um pod separado dentro do cluster para teste e extrai a imagem de uso de teste deste registro. |
docker.io |
speechToText.verification.image.repository |
O repositório de imagens do docker que helm test usa para testar o serviço de fala para texto . O pod de teste Helm usa esse repositório para extrair imagens de uso de teste. |
antsu/on-prem-client |
speechToText.verification.image.tag |
A tag de imagem do docker usada com helm test o serviço de fala para texto . O pod de teste Helm usa essa tag para extrair a imagem de uso de teste. |
latest |
speechToText.verification.image.pullByHash |
Se a imagem do docker test-use é solicitada por hash. Se true , deverá ser adicionado speechToText.verification.image.hash , com um valor hash de imagem válido. |
false |
speechToText.verification.image.arguments |
Os argumentos usados para executar a imagem docker de uso de teste. O pod de teste Helm passa esses argumentos para o contêiner durante a execução helm test do . |
"./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 |
Se o serviço de conversão de texto em fala está habilitado. | true |
textToSpeech.verification.enabled |
Se o helm test recurso para o serviço de fala para texto está habilitado. |
true |
textToSpeech.verification.image.registry |
O repositório de imagens do docker que helm test usa para testar o serviço de fala para texto . O Helm cria um pod separado dentro do cluster para teste e extrai a imagem de uso de teste deste registro. |
docker.io |
textToSpeech.verification.image.repository |
O repositório de imagens do docker que helm test usa para testar o serviço de fala para texto . O pod de teste Helm usa esse repositório para extrair imagens de uso de teste. |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
A tag de imagem do docker usada com helm test o serviço de fala para texto . O pod de teste Helm usa essa tag para extrair a imagem de uso de teste. |
latest |
textToSpeech.verification.image.pullByHash |
Se a imagem do docker test-use é solicitada por hash. Se true , deverá ser adicionado textToSpeech.verification.image.hash , com um valor hash de imagem válido. |
false |
textToSpeech.verification.image.arguments |
Os argumentos a serem executados com a imagem docker de uso de teste. O pod de teste do leme passa esses argumentos para o contêiner durante a execução helm test do . |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
Conversão de voz em texto (subgráfico: gráficos/speechToText)
Para substituir o gráfico "guarda-chuva", adicione o prefixo speechToText.
em qualquer parâmetro para torná-lo mais específico. Por exemplo, ele substituirá o parâmetro correspondente, por exemplo, speechToText.numberOfConcurrentRequest
substitui numberOfConcurrentRequest
.
Parâmetro | Description | Predefinido |
---|---|---|
enabled |
Se o serviço de fala para texto está habilitado. | false |
numberOfConcurrentRequest |
O número de solicitações simultâneas para o serviço de fala para texto . Este gráfico calcula automaticamente os recursos da CPU e da memória, com base nesse valor. | 2 |
optimizeForAudioFile |
Se o serviço precisa otimizar a entrada de áudio através de arquivos de áudio. Se true , este gráfico irá alocar mais recursos de CPU para o serviço. |
false |
image.registry |
O registro de imagem do docker de fala para texto . | containerpreview.azurecr.io |
image.repository |
O repositório de imagens do docker de fala para texto . | microsoft/cognitive-services-speech-to-text |
image.tag |
A tag de imagem do docker de fala para texto . | latest |
image.pullSecrets |
Os segredos da imagem para puxar a fala para a imagem do docker de texto . | |
image.pullByHash |
Se a imagem do docker é solicitada por hash. Se true , image.hash é necessário. |
false |
image.hash |
O hash de imagem do docker de fala para texto . Utilizado apenas quando image.pullByHash: true . |
|
image.args.eula (obrigatório) |
Indica que aceitou a licença. O único valor válido é accept |
|
image.args.billing (obrigatório) |
O valor do URI do ponto de extremidade de cobrança está disponível na página Visão Geral de Fala do portal do Azure. | |
image.args.apikey (obrigatório) |
Usado para rastrear informações de faturamento. | |
service.type |
O tipo de serviço Kubernetes do serviço de fala para texto . Consulte as instruções de tipos de serviço do Kubernetes para obter mais detalhes e verificar o suporte ao provedor de nuvem. | LoadBalancer |
service.port |
A porta do serviço de fala para texto. | 80 |
service.annotations |
As anotações de fala para texto para os metadados do serviço. As anotações são pares de valores-chave. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Se o Horizontal Pod Autoscaler está ativado. Se true , o speech-to-text-autoscaler será implantado no cluster Kubernetes. |
true |
service.podDisruption.enabled |
Se o Orçamento de Interrupção do Pod está habilitado. Se true , o speech-to-text-poddisruptionbudget será implantado no cluster Kubernetes. |
true |
Análise de sentimento (subgráfico: charts/speechToText)
A partir da v2.2.0 do contêiner de fala para texto e da v0.2.0 do gráfico Helm, os parâmetros a seguir são usados para análise de sentimento usando a API do serviço de linguagem.
Parâmetro | Description | Valores | Predefinição |
---|---|---|---|
textanalytics.enabled |
Se o serviço de análise de texto está habilitado | verdadeiro/falso | false |
textanalytics.image.registry |
O registro de imagem docker de análise de texto | Registro de imagem válido do Docker | |
textanalytics.image.repository |
O repositório de imagens docker de análise de texto | Repositório de imagens válido do Docker | |
textanalytics.image.tag |
A tag de imagem do docker de análise de texto | Tag de imagem válida do Docker | |
textanalytics.image.pullSecrets |
Os segredos da imagem para extrair imagem docker de análise de texto | nome de segredos válidos | |
textanalytics.image.pullByHash |
Especifica se está a obter a imagem do docker por hash. Se yes , image.hash é necessário ter também. Se no , defina-o como 'false'. A predefinição é false . |
verdadeiro/falso | false |
textanalytics.image.hash |
O hash da imagem do docker de análise de texto. Use-o apenas com image.pullByHash:true . |
Um hash da imagem do docker válido | |
textanalytics.image.args.eula |
Um dos argumentos necessários por contêiner de análise de texto, que indica que você aceitou a licença. O valor desta opção deve ser: accept . |
accept , se pretender utilizar o contentor |
|
textanalytics.image.args.billing |
Um dos argumentos necessários pelo contêiner de análise de texto, que especifica o URI do ponto de extremidade de faturamento. O valor do URI do ponto de extremidade de cobrança está disponível na página Visão Geral de Fala do portal do Azure. | URI de ponto de extremidade de faturamento válido | |
textanalytics.image.args.apikey |
Um dos argumentos necessários pelo contêiner de análise de texto, que é usado para rastrear informações de faturamento. | apikey válido | |
textanalytics.cpuRequest |
A CPU solicitada para contêiner de análise de texto | número inteiro | 3000m |
textanalytics.cpuLimit |
A CPU limitada para contêiner de análise de texto | 8000m |
|
textanalytics.memoryRequest |
A memória solicitada para contêiner de análise de texto | 3Gi |
|
textanalytics.memoryLimit |
A memória limitada para contêiner de análise de texto | 8Gi |
|
textanalytics.service.sentimentURISuffix |
O sufixo URI de análise de sentimento, todo o URI está no formato "http://<service> :<port> /<sentimentURISuffix> ". |
text/analytics/v3.0-preview/sentiment |
|
textanalytics.service.type |
O tipo de serviço de análise de texto no Kubernetes. Consulte Tipos de serviço do Kubernetes | tipo de serviço Kubernetes válido | LoadBalancer |
textanalytics.service.port |
A porta do serviço de análise de texto | número inteiro | 50085 |
textanalytics.service.annotations |
As anotações que os usuários podem adicionar aos metadados do serviço de análise de texto. Por exemplo: anotações: alguns/anotação1: valor1 alguns/anotação2: valor2 |
anotações, uma por cada linha | |
textanalytics.serivce.autoScaler.enabled |
Se o Horizontal Pod Autoscaler está ativado. Se habilitado, text-analytics-autoscaler será implantado no cluster Kubernetes |
verdadeiro/falso | true |
textanalytics.service.podDisruption.enabled |
Se o Orçamento de Interrupção do Pod está ativado. Se habilitado, text-analytics-poddisruptionbudget será implantado no cluster Kubernetes |
verdadeiro/falso | true |
Conversão de texto em fala (subgráfico: gráficos/textToSpeech)
Para substituir o gráfico "guarda-chuva", adicione o prefixo textToSpeech.
em qualquer parâmetro para torná-lo mais específico. Por exemplo, ele substituirá o parâmetro correspondente, por exemplo, textToSpeech.numberOfConcurrentRequest
substitui numberOfConcurrentRequest
.
Parâmetro | Description | Predefinido |
---|---|---|
enabled |
Se o serviço de conversão de texto em fala está habilitado. | false |
numberOfConcurrentRequest |
O número de solicitações simultâneas para o serviço de conversão de texto em fala . Este gráfico calcula automaticamente os recursos da CPU e da memória, com base nesse valor. | 2 |
optimizeForTurboMode |
Se o serviço precisa otimizar a entrada de texto através de arquivos de texto. Se true , este gráfico irá alocar mais recursos de CPU para o serviço. |
false |
image.registry |
O registro de imagem docker de texto para fala . | containerpreview.azurecr.io |
image.repository |
O repositório de imagens docker de texto para fala . | microsoft/cognitive-services-text-to-speech |
image.tag |
A tag de imagem do docker de texto para fala . | latest |
image.pullSecrets |
Os segredos da imagem para puxar o texto para a imagem do docker de fala . | |
image.pullByHash |
Se a imagem do docker é solicitada por hash. Se true , image.hash é necessário. |
false |
image.hash |
O hash de imagem do docker de texto para fala . Utilizado apenas quando image.pullByHash: true . |
|
image.args.eula (obrigatório) |
Indica que aceitou a licença. O único valor válido é accept |
|
image.args.billing (obrigatório) |
O valor do URI do ponto de extremidade de cobrança está disponível na página Visão Geral de Fala do portal do Azure. | |
image.args.apikey (obrigatório) |
Usado para rastrear informações de faturamento. | |
service.type |
O tipo de serviço Kubernetes do serviço de texto para fala . Consulte as instruções de tipos de serviço do Kubernetes para obter mais detalhes e verificar o suporte ao provedor de nuvem. | LoadBalancer |
service.port |
A porta do serviço de texto para fala . | 80 |
service.annotations |
As anotações de texto em fala para os metadados do serviço. As anotações são pares de valores-chave. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Se o Horizontal Pod Autoscaler está ativado. Se true , o text-to-speech-autoscaler será implantado no cluster Kubernetes. |
true |
service.podDisruption.enabled |
Se o Orçamento de Interrupção do Pod está habilitado. Se true , o text-to-speech-poddisruptionbudget será implantado no cluster Kubernetes. |
true |
Próximos passos
Para obter mais detalhes sobre como instalar aplicativos com o Helm no Serviço Kubernetes do Azure (AKS), visite aqui.