PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR, MONITOR AOC, MONITOR 18.5

Implantando o BERT usando o Kubernetes

Introdução

O BERT é um modelo de PNL amplamente usado em PC GAMER no Google. 2019 é considerado o ano do BERT, tendo substituído os sistemas de produção majoritária. O BERT utiliza abordagens baseadas na atenção pessoal, o próprio modelo consiste em blocos de transformadores, que são séries de camadas de atenção pessoal. O BERT demonstra o uso da atenção própria para um desempenho de PC GAMER BARATO muito mais superior em comparação com os modelos baseados em sequência RNN para sequência, particularmente no conjunto de dados de resposta a perguntas de Stanford (SQUAD).

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR, MONITOR AOC, MONITOR 18.5

Ignoramos todos os detalhes teóricos, por exemplo RNN, modelo LSTM, auto-atenção, como eles também cursam no curso do curso de Andrew Ng e posts do blog aqui e aqui (por Jay Alammar). Outro ótimo post fornece os principais modelos baseados em BERT. Observe que os mecanismos de atenção foram inicialmente aplicados para melhorar o desempenho dos modelos baseados em RNN, sequência a sequência. Uma visão geral genérica do mecanismo de atenção também é publicada por Lilian Weng, onde ela explica a arquitetura do transformador. Em particular, os conceitos Chave, Valor e Consulta, onde chave e valor são equivalentes às saídas do codificador, isto é, memória e consulta, são saídas do decodificador, no entanto, como papel original, eles são um pouco abstratos e funcionam em todas as palavras. A razão pela qual eles são mais eficazes e eficientes é explicada por Łukasz Kaiser

Do ponto de vista da implementação, o BERT é um modelo grande de PLACA DE VÍDEO com 110 milhões ou mais de parâmetros e o treinamento desde o início é bastante desafiador, conforme destacado no blog do Google. Requer poder computacional efetivo e a estrutura do modelo deve ser cuidadosamente programada para evitar bugs.

Portanto, para tornar o modelo BERT prontamente utilizável, o Google implementou sua implementação de código aberto, que pode ser ajustada para várias tarefas em ~ 30 minutos. Um exemplo é a tarefa de análise de sentimentos, conforme explicado aqui. Os esforços de pesquisa para limitar o número de parâmetros estão em andamento. No entanto, o ajuste fino do BERT também é uma abordagem amplamente usada.

Objetivo

O objetivo desta publicação é implantar um modelo treinado de BERT para realizar análises de sentimentos em streaming de tweets, como um microsserviço. Este exemplo simples fornece uma exposição aos principais desafios do desenvolvimento de um microsserviço para ML. O objetivo é cobrir os principais conceitos que destacam a necessidade de ferramentas avançadas para treinar e implantar modelos de ML. As principais tarefas abordadas nessas postagens são

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR, MONITOR AOC, MONITOR 18.5

Pré-processamento de dados da PLACA DE VÍDEO QUADRO para streaming de dados (tweets): Os sistemas do mundo real são muito mais complexos em termos de ETL

Inferências usando um modelo BERT treinado (ajustado)
O treinamento do modelo requer consideração adicional para revisão e retenção. Estes seriam discutidos em outro post.
Nossa arquitetura é a seguinte

As tecnologias empregadas são (via API python relevante)
BERT, Tensorflow, Tensorflow, Redis,
Contêineres: contêiner do Docker e kubernetes para orquestração
Informações básicas sobre Docker e kubernetes

Desenvolveríamos microsserviços e os implantaríamos usando contêineres, e usaríamos o K8S para gerenciar esses contêineres. Resumidamente, os contêineres são uma abstração no código e nas dependências desse pacote juntos para serem executados independentemente. Se você não estiver familiarizado com os contêineres, consulte o site da janela de encaixe para obter mais informações e tutoriais. O Kubernetes (K8S) foi desenvolvido pelo Google para gerenciar vários contêineres; ele pode operar em clusters de computação locais ou na nuvem. Todos os principais provedores de nuvem oferecem suporte ao Kubernetes. Os principais conceitos do Kubernetes necessários para esta publicação são os seguintes

PC GAMER, PC GAMER BARATO, PLACA DE VÍDEO, PLACA DE VÍDEO QUADRO, PLACA DE VÍDEO QUADRO P400, GABINETE, GABINETE THERMALTAKE, GABINETE GAMER, MONITOR, MONITOR AOC, MONITOR 18.5

Componentes básicos do kubernetes e arquitetura.
Pods e implantações
Reivindicação de Volume de Persistência e Volume de Persistência
Serviços Kubenetes
Kubectl: o comando empregado para criar recursos. Criamos vários recursos por meio de arquivos yaml
#Criar implantação / pods
kubectl create -f tensorflowServing.yaml
#Excluir implantação / pods
kubectl delete -f tensorflowServing.yaml
#Verificar pods e serviço
kubectl get pods
kubectl get svc
#Verificar volume de persistência e volume de persistência cliam
kubectl get pv
kubectl get pvc

Uma visão geral muito rápida desses conceitos de PLACA DE VÍDEO QUADRO P400 está disponível aqui e aqui, enquanto a lista de reprodução do youtube fornece uma exposição mais detalhada dos conceitos disponíveis. A Microsoft também desenvolveu bons recursos para começar a usar o K8S. Os recursos fornecidos pelo Google são extensos e podem ser um pouco esmagadores inicialmente. Depois de ter uma idéia dos conceitos do K8S, tente “Hello world” aqui. Abrange o processo, precisamos seguir o mesmo processo, algumas vezes !!!
O processo mencionado na documentação é o seguinte
Empacote seu aplicativo em uma imagem do Docker
Execute o contêiner localmente em sua máquina (opcional)
Carregar a imagem em um registro
Crie um cluster de contêineres
Implante seu aplicativo no cluster
Exponha seu aplicativo para fora do cluster por meio de um serviço
Amplie sua implantação
Voltar aos nossos mircoserviços
Nosso primeiro microsserviço executa o BERT usando o serviço tensorflow e o modelo salvo treinado, permite realizar a inferência usando o cliente
O segundo microsserviço executa a análise de sentimentos via “solicitações” para o BERT usando o cliente gRPC e a publica em um canal / pub Redis
Se você estiver usando o GCP, presumimos que você tenha o gcloud, kubectl instalado em sua máquina e esteja conectado ao projeto chamado “kubernetes”, veja aqui para obter mais informações, veja aqui. Para outras configurações, assumimos que há equivalência.
Começamos criando e conectando-se ao cluster kubernetes no GCP via linha de comando

CONECTAR
clusters de contêineres gcloud get-credentials standard-cluster-1 – zone us-central1-a – projeto kubernetes
Para o armazenamento de dados, usamos o disco do Google Cloud, o modelo é o armazenamento em um local separado
os discos de computação beta do gcloud criam redis-disk-gce – projeto = kubernetes – tipo = pd-standard – tamanho = 100 GB – zona = us-central1-a – tamanho do bloco físico = 4096
REDIS
Empregamos redis nesta configuração para se comunicar entre microsserviços. Redis é empregado como pub / sub mensagens. É necessário ter um microsserviço redis robusto em execução no cluster. Um dos problemas que podemos enfrentar é o caso de redis travar.

O Kubernetes é capaz de detectar falhas e cria um novo contêiner, ou seja, uma instância de redis para manter o serviço. No entanto, o novo contêiner pode ter estados diferentes quando o contêiner é recriado. Portanto, para evitar isso, usamos o disco de persistência (um disco de armazenamento dedicado), que vincula esse armazenamento ao nosso contêiner Redis por meio do uso de uma declaração de volume de persistência. Essa configuração é muito simples. No nível corporativo, para atingir a escala, precisamos empregar conjuntos com estado. Uma discussão detalhada pode ser encontrada aqui, enquanto um exemplo de configuração redis está disponível aqui.

Em nossa configuração, temos uma única instância de redis e usamos o disco da nuvem do google para criar um volume de persistência e uma declaração de volume de persistência por meio dos arquivos yaml. Nós os usamos no armazenamento de uso através dos meios de reivindicação de volume de persistência no contêiner redis, conforme descrito nos arquivos ymal. Também expomos os redis para o mundo externo por meio de um serviço kubernetes.

Servindo modelos de tensorflow
Servir um modelo de tensorflow no kubernetes é muito direto, através do uso da API de tensorflow. Os passos são os seguintes
Coletando a lista de variáveis ​​de entrada (“sinputs”) e saída (“soutput”) no gráfico do tensorflow
Criando uma assinatura de previsão antes de salvar o modelo
Salve o modelo usando o formato salvar modelo

Copiamos nosso modelo treinado para o tensorflow que serve a imagem do docker, criamos uma nova imagem do docker com o nosso modelo e a carregamos no registro de contêiner, usando o processo descrito aqui. Nossas imagens do docker são gcr.io/kubernetes-258108/bert. Implantamos esta imagem via implantação kubenetes. Também criamos um serviço kubernetes.

Nota: Use o endereço IP de serviço obtido usando “kubectl” para o lado do cliente fora do nosso cluster para fazer uma solicitação. Para evitar o uso do endereço IP, use o serviço de descoberta kube-dns, isso está bem documentado e um exemplo de python está disponível aqui. Como já configuramos o serviço para o cliente de inferência bert e apenas podemos usar o nome do serviço “bertservice: 8500” 8500 é a porta, pois estamos solicitando dentro do nosso cluster.
O componente de código-chave para fazer solicitações no cliente é o seguinte, com base no exemplo do cliente do google.

O exemplo completo de cliente de inferência está disponível é o seguinte. Consiste no ouvinte de streaming do Tweepy para se inscrever nos tópicos de serviço de mensagens sub / pub de tweets e redis

Cliente de inferência Bert que, usando o cliente de solicitação gRPC

Empacotamos esse cliente em um contêiner de docker usando um arquivo docker e implantamos em nosso cluster kubernetes

Dockerfile a ser criado para contêineres python

Agora podemos começar a observar tweets de streaming com sentimentos via kubectl, conectando-se a redis pods ou usando um assinante python
kubectl exec -it redis-pod-name redis-cli
127.0.0.1:6379> SUBSCREVER STREAM

Nota: não usamos GPU para inferência e, como resultado, uma solicitação de gRPC em um recurso de computação N1 padrão leva cerca de 12 segundos (para um tamanho de lote de 20)

Pensamentos finais

Podemos implantar essa configuração em um cluster GCP por 3 dias sem nenhum incidente. Isso demonstra o poder dos contêineres e o aplicativo simples para ML e pode ser implantado muito rapidamente. No entanto, no mundo real, os cenários são bem diferentes. Por exemplo, o ETL pode ser uma tarefa bastante complexa e pode exigir tecnologias avançadas, como o coelho-MQ, Kafka ou Apache beam, para integrar dados de outras fontes. Podemos precisar re-treinar e re-implantar modelos ML. Estes são capa em outro post do blog. Em combinação, eles devem fornecer uma introdução ao desenvolvimento de microsserviços e destacar a necessidade de outras tecnologias, como Kubeflow, Apache Airflow, Seldon, gráficos de comando para o desenvolvimento de aplicativos de ML usando a infraestrutura kubernetes. Não discutimos como dimensionar nossos microsserviços usando o Kubernetes. Uma abordagem seria fazer uso de replicaSets, mas pode haver algumas considerações dependentes da tarefa e da escala necessárias. Por exemplo, o OpenAI em um documento recente de postagem no blog desafia escalar o kubernetes para 2500 nós.

 

Referência


Relacionamentos Abusivos