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

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.