Usar contêineres do serviço de Fala com o Kubernetes e o Helm
O Kubernetes e o Helm são opções usadas para gerenciar o local de contêineres de Fala. Criamos um pacote do Kubernetes usando o Kubernetes e o Helm para definir imagens de contêiner de conversão de fala em texto e conversão de texto em fala. Esse pacote é implantado em um cluster do Kubernetes local. Por fim, 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 a orquestração do Kubernetes, confira como instalar e executar contêineres do serviço de Fala.
Pré-requisitos
Use os seguintes pré-requisitos antes de usar o local de contêineres de Fala:
Obrigatório | Finalidade |
---|---|
Conta do Azure | Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar. |
Acesso ao Registro de Contêiner | Para que o Kubernetes possa efetuar pull de imagens no cluster, o Kubernetes precisa acessar o registro de contêiner. |
CLI do Kubernetes | É necessário usar a CLI do Kubernetes para gerenciar as credenciais compartilhadas no registro de contêiner. Também é necessário usar o Kubernetes antes do Helm, que é o gerenciador de pacotes do Kubernetes. |
CLI do Helm | Instale a CLI do Helm, que é usada para instalar um gráfico do Helm (definição do pacote de contêiner). |
Recurso de Fala | Para usar esses contêineres, será necessário ter: Um recurso de Fala do Azure usado para obter a chave de cobrança e o URI de ponto de extremidade associados. Os dois valores estão disponíveis nas páginas de Visão Geral e Chaves de Fala do portal do Azure e são necessários para iniciar o contêiner. {API_KEY} : chave do recurso {ENDPOINT_URI} : o https://eastus.api.cognitive.microsoft.com/sts/v1.0 é um exemplo de URI de ponto de extremidade |
A configuração recomendada do computador host
Use detalhes do computador host de contêiner do serviço de Fala como referência. Este gráfico do Helm calculará de modo automático os requisitos de CPU e memória com base em quantas decodificações (solicitações simultâneas) o usuário especifica. Além disso, se ajusta caso as otimizações de áudio/texto estejam configuradas como enabled
. O gráfico do Helm usa como padrão duas solicitações simultâneas, desabilitando a otimização.
Serviço | CPU/Contêiner | Memória/Contêiner |
---|---|---|
conversão de fala em texto | Um decodificador exige obter no mínimo 1.150 millicores. Caso o optimizedForAudioFile esteja habilitado, será preciso obter 1.950 millicores. (padrão: dois decodificadores) |
Obrigatório: 2 GB Limitado: 4 GB |
conversão de texto em fala | Uma solicitação simultânea exige obter no mínimo 500 millicores. Caso o optimizeForTurboMode esteja habilitado, será preciso obter 1.000 millicores. (padrão: duas solicitações simultâneas) |
Obrigatório: 1 GB Limite: 2 GB |
Conectar-se ao cluster do Kubernetes
O computador host deve ter um cluster do Kubernetes disponível. Confira este tutorial Como implantar um cluster do Kubernetes para obter um entendimento conceitual sobre de que modo implantar um cluster do Kubernetes em um computador host.
Configurar valores do gráfico do Helm para executar uma implantação
Acesse o Hub do Microsoft Helm para obter todos os gráficos do Helm oferecidos pela Microsoft e disponíveis ao público. No Hub do Microsoft Helm, você encontra o Gráfico da Fala de IA do Azure Local. A Fala de IA do Azure Local é o gráfico que instalamos, mas primeiro precisamos criar um arquivo config-values.yaml
com configurações explícitas. Vamos começar adicionando o repositório da Microsoft à nossa instância do Helm.
helm repo add microsoft https://microsoft.github.io/charts/repo
Depois, configuramos os valores do gráfico do Helm. Copie e cole o YAML a seguir em um arquivo chamado config-values.yaml
. Para obter mais informações sobre como personalizar o Gráfico do Helm do Local de Fala de IA do Azure, consulte personalizar gráficos do Helm. Substitua os comentários # {ENDPOINT_URI}
e # {API_KEY}
por seus 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
Caso os valores billing
e apikey
não sejam fornecidos, os serviços vão expirar após 15 minutos. Do mesmo modo, haverá uma falha na verificação, pois os serviços não estarão disponíveis.
Pacote do Kubernetes (gráfico do Helm)
O gráfico do Helm contém a configuração usada para efetuar pull de imagens do Docker do registro de contêiner mcr.microsoft.com
.
Um gráfico do Helm é uma coleção de arquivos que descrevem um conjunto relacionado de recursos do Kubernetes. Será possível usar um gráfico único para implantar algo simples, como um pod de memória em cache ou algo complexo, como uma pilha completa de aplicativos Web com servidores HTTP, bancos de dados, caches e muito mais.
Os gráficos Helm fornecidos efetuam pull das imagens docker do serviço de Fala, tanto na conversão de texto em fala quanto nos serviços de conversão de fala em texto, do registro de contêiner mcr.microsoft.com
.
Instalar o gráfico do Helm no cluster do Kubernetes
Execute o comando helm install
para instalar o gráfico do Helm, substituindo o <config-values.yaml>
pelo caminho apropriado e pelo argumento do nome do arquivo. O gráfico Helm dos microsoft/cognitive-services-speech-onpremise
está disponível no Hub do Microsoft Helm.
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 demorar vários minutos para ser concluída. Para confirmar se os pods e os serviços foram implantados e estão disponíveis de modo adequado, execute o seguinte comando:
kubectl get all
Algo semelhante à seguinte saída deverá ser exibido:
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 usando testes do Helm
Os gráficos do Helm instalados definem os testes do Helm. Eles são convenientes para a verificação. Esses testes validarão a prontidão do serviço. Para verificar os serviços de conversão de fala em texto e de conversão de texto em fala, executamos o comando de teste do Helm.
helm test onprem-speech
Importante
Caso o status do pod não seja Running
nem a implantação esteja listada na coluna AVAILABLE
, haverá uma falha nos testes. Lembramos que a configuração pode levar vários minutos para ser concluída.
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 do Helm, será possível coletar os endereços IP externos e as portas correspondentes do comando kubectl get all
. Com o IP e a porta, abra um navegador da Web e acesse http://<external-ip>:<port>:/swagger/index.html
para ver as páginas de API do Swagger.
Personalizar gráficos do Helm
Os gráficos do Helm são hierárquicos. Ser hierárquico permite usar a herança do gráfico. Isso também atende ao conceito de especificidade, em que as configurações mais específicas substituem as regras herdadas.
Fala (gráfico guarda-chuva)
Os valores no gráfico "guarda-chuva" de nível superior substituem os valores de subgráficos correspondentes. Portanto, todos os valores personalizados locais devem ser adicionados aqui.
Parâmetro | Descrição | Padrão |
---|---|---|
speechToText.enabled |
Se o serviço de conversão de fala em texto está habilitado. | true |
speechToText.verification.enabled |
Se a capacidade helm test do serviço de conversão de fala em texto está habilitada. |
true |
speechToText.verification.image.registry |
O repositório de imagens do docker que usa helm test para testar o serviço de conversão de fala em texto. O Helm cria um pod separado dentro do cluster para teste e efetua pull da imagem de uso de teste desse registro. |
docker.io |
speechToText.verification.image.repository |
O repositório de imagens do docker que usa helm test para testar o serviço de conversão de fala em texto. O pod de teste do Helm usa esse repositório para efetuar pull da imagem de uso de teste. |
antsu/on-prem-client |
speechToText.verification.image.tag |
A marca da imagem do docker usada com helm test para o serviço de conversão de fala em texto. O pod de teste do Helm usa essa marca para efetuar pull da imagem de uso de teste. |
latest |
speechToText.verification.image.pullByHash |
Se é efetuado pull da imagem de uso de teste do Docker por hash. Se true , speechToText.verification.image.hash deve ser adicionado, com um valor de hash de imagem válido. |
false |
speechToText.verification.image.arguments |
Os argumentos usados para executar a imagem do Docker de uso de teste. O pod de teste do Helm passa esses argumentos para o contêiner durante a execução de 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 |
Se o serviço de conversão de texto em fala está habilitado. | true |
textToSpeech.verification.enabled |
Se a capacidade helm test do serviço de conversão de fala em texto está habilitada. |
true |
textToSpeech.verification.image.registry |
O repositório de imagens do docker que usa helm test para testar o serviço de conversão de fala em texto. O Helm cria um pod separado dentro do cluster para teste e efetua pull da imagem de uso de teste desse registro. |
docker.io |
textToSpeech.verification.image.repository |
O repositório de imagens do docker que usa helm test para testar o serviço de conversão de fala em texto. O pod de teste do Helm usa esse repositório para efetuar pull da imagem de uso de teste. |
antsu/on-prem-client |
textToSpeech.verification.image.tag |
A marca da imagem do docker usada com helm test para o serviço de conversão de fala em texto. O pod de teste do Helm usa essa marca para efetuar pull da imagem de uso de teste. |
latest |
textToSpeech.verification.image.pullByHash |
Se é efetuado pull da imagem de uso de teste do Docker por hash. Se true , textToSpeech.verification.image.hash deve ser adicionado, com um valor de hash de imagem válido. |
false |
textToSpeech.verification.image.arguments |
Os argumentos para executar com a imagem do Docker de uso de teste. O pod de teste do Helm passa esses argumentos para o contêiner durante a execução de helm test . |
"./text-to-speech-client" "--input='What's the weather like'" "--host=$(TEXT_TO_SPEECH_HOST)" "--port=$(TEXT_TO_SPEECH_PORT)" |
Conversão de fala em texto (subgráfico: gráficos/conversão de fala em texto)
Para substituir o gráfico "guarda-chuva", adicione o prefixo speechToText.
a 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 | Descrição | Padrão |
---|---|---|
enabled |
Se o serviço de conversão de fala em texto está habilitado. | false |
numberOfConcurrentRequest |
O número de solicitações simultâneas para o serviço de conversão de fala em texto. Este gráfico calcula automaticamente os recursos de CPU e de memória, com base nesse valor. | 2 |
optimizeForAudioFile |
Se o serviço precisa ser otimizado para entrada de áudio por meio de arquivos de áudio. Se true , esse gráfico alocará mais recursos de CPU ao serviço. |
false |
image.registry |
O registro de imagens do docker de conversão de fala em texto. | containerpreview.azurecr.io |
image.repository |
O repositório de imagens do docker de conversão de fala em texto. | microsoft/cognitive-services-speech-to-text |
image.tag |
A marca da imagem docker de conversão de fala em texto. | latest |
image.pullSecrets |
Os segredos da imagem para efetuar pull da imagem do docker de conversão de fala em texto. | |
image.pullByHash |
Se é efetuado pull da imagem do Docker por hash. Se true , image.hash é obrigatório. |
false |
image.hash |
O hash da imagem docker de conversão de fala em texto. Usado somente quando image.pullByHash: true . |
|
image.args.eula (obrigatório) |
Indica que a licença foi aceita. O único valor válido é accept |
|
image.args.billing (obrigatório) |
O valor de URI do ponto de extremidade de cobrança está disponível na página de Visão Geral de Fala do portal do Azure. | |
image.args.apikey (obrigatório) |
Usado para rastrear informações de cobrança. | |
service.type |
O tipo de serviço do Kubernetes do serviço de conversão de fala em 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 conversão de fala em texto. | 80 |
service.annotations |
As anotações da conversão de fala em texto para os metadados do serviço. As anotações são pares chave-valor. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Se a Escala de aumento horizontal do Pod está habilitada. Se true , o speech-to-text-autoscaler será implantado no cluster do 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 do Kubernetes. |
true |
Análise de sentimentos (subgráfico: gráficos/speechToText)
A partir da v2.2.0 do contêiner de conversão de fala em texto e a v0.2.0 do gráfico Helm, os parâmetros a seguir são usados para análise de sentimentos usando a API do serviço de idiomas.
Parâmetro | Descrição | Valores | Padrão |
---|---|---|---|
textanalytics.enabled |
Se o serviço de análise de texto está habilitado | true/false | false |
textanalytics.image.registry |
O registro de imagem do Docker da análise de texto | registro de imagem do Docker válido | |
textanalytics.image.repository |
O repositório de imagem do Docker da análise de texto | repositório de imagens do Docker válido | |
textanalytics.image.tag |
A marca de imagem do Docker da análise de texto | marca de imagem do Docker válida | |
textanalytics.image.pullSecrets |
Os segredos da imagem para efetuar pull da imagem do Docker de análise de texto | nome de segredos válido | |
textanalytics.image.pullByHash |
Especifica se está sendo efetuado pull da imagem do Docker por hash. Se yes , image.hash também deve ser necessário. Se no , defina-o como 'false'. O padrão é false . |
true/false | false |
textanalytics.image.hash |
O hash da imagem do Docker de análise de texto. Use-o apenas com image.pullByHash:true . |
hash de imagem do Docker válida | |
textanalytics.image.args.eula |
Um dos argumentos necessários por contêiner de análise de texto, que indica que aceitou a licença. O valor dessa opção deve ser: accept . |
accept , se desejar usar o contêiner |
|
textanalytics.image.args.billing |
Um dos argumentos necessários por contêiner de análise de texto, que especifica o URI do ponto de extremidade de cobrança. O valor de URI do ponto de extremidade de cobrança está disponível na página de Visão Geral de Fala do portal do Azure. | URI do ponto de extremidade de cobrança válido | |
textanalytics.image.args.apikey |
Um dos argumentos necessários por contêiner de análise de texto, que é usado para rastrear informações de cobrança. | apiKey válida | |
textanalytics.cpuRequest |
A CPU solicitada para o contêiner de análise de texto | INT | 3000m |
textanalytics.cpuLimit |
A CPU limitada para o contêiner de análise de texto | 8000m |
|
textanalytics.memoryRequest |
A memória solicitada para o contêiner de análise de texto | 3Gi |
|
textanalytics.memoryLimit |
A memória limitada para o contêiner de análise de texto | 8Gi |
|
textanalytics.service.sentimentURISuffix |
O sufixo de URI da análise de sentimentos, o URI inteiro 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. Consultar Tipos de serviços do Kubernetes | tipo de serviços do Kubernetes válido | LoadBalancer |
textanalytics.service.port |
A porta do serviço de análise de texto | INT | 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: some/annotation1: value1 some/annotation2: value2 |
anotações, uma para cada linha | |
textanalytics.serivce.autoScaler.enabled |
Se a Escala de aumento horizontal do Pod está habilitada. Se habilitada, text-analytics-autoscaler será implantado no cluster do Kubernetes |
true/false | true |
textanalytics.service.podDisruption.enabled |
Se o Orçamento de interrupção do Pod está habilitado. Se habilitado, text-analytics-poddisruptionbudget será implantado no cluster do Kubernetes |
true/false | true |
Conversão de texto em fala (subgráfico: Charts/TextToSpeech)
Para substituir o gráfico "guarda-chuva", adicione o prefixo textToSpeech.
a 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 | Descrição | Padrão |
---|---|---|
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 de CPU e de memória, com base nesse valor. | 2 |
optimizeForTurboMode |
Se o serviço precisa ser otimizado para entrada de texto por meio de arquivos de texto. Se true , esse gráfico alocará mais recursos de CPU ao serviço. |
false |
image.registry |
O registro de imagens do docker de conversão de texto em fala. | containerpreview.azurecr.io |
image.repository |
O repositório de imagens do docker de conversão de texto em fala. | microsoft/cognitive-services-text-to-speech |
image.tag |
A marca da imagem docker de conversão de texto em fala. | latest |
image.pullSecrets |
Os segredos da imagem para efetuar pull da imagem do docker de conversão de texto em fala. | |
image.pullByHash |
Se é efetuado pull da imagem do Docker por hash. Se true , image.hash é obrigatório. |
false |
image.hash |
O hash da imagem docker de conversão de texto em fala. Usado somente quando image.pullByHash: true . |
|
image.args.eula (obrigatório) |
Indica que a licença foi aceita. O único valor válido é accept |
|
image.args.billing (obrigatório) |
O valor de URI do ponto de extremidade de cobrança está disponível na página de Visão Geral de Fala do portal do Azure. | |
image.args.apikey (obrigatório) |
Usado para rastrear informações de cobrança. | |
service.type |
O tipo de serviço do Kubernetes do serviço de conversão de texto em 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 conversão de texto em fala. | 80 |
service.annotations |
As anotações da conversão de texto em fala para os metadados do serviço. As anotações são pares chave-valor. annotations: some/annotation1: value1 some/annotation2: value2 |
|
service.autoScaler.enabled |
Se a Escala de aumento horizontal do Pod está habilitada. Se true , o text-to-speech-autoscaler será implantado no cluster do 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 do Kubernetes. |
true |
Próximas etapas
Para obter mais detalhes sobre como instalar aplicativos com o Helm no AKS (Serviço de Kubernetes do Azure), clique aqui.