Formação distribuída de modelos de aprendizagem profunda em Azure

Armazenamento de Blobs
Container Registry
Machine Learning

Esta arquitetura de referência mostra como conduzir formação distribuída de modelos de aprendizagem profunda em grupos de VMs habilitados para GPU. O cenário é a classificação de imagem, mas a solução pode ser generalizada a outros cenários de aprendizagem profunda, como segmentação ou deteção de objetos.

Uma implementação de referência para esta arquitetura está disponível no GitHub.

Arquitetura

Diagrama de arquitetura que mostra aprendizagem profunda distribuída.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de trabalho

Esta arquitetura consiste nos seguintes serviços:

O Azure Machine Learning Compute desempenha o papel central nesta arquitetura, escalando recursos para cima e para baixo de acordo com a necessidade. O Azure Machine Learning Compute é um serviço que ajuda a providenciar e gerir clusters de VMs, agendar empregos, recolher resultados, escalar recursos e lidar com falhas. Suporta VMs ativados por GPU para cargas de trabalho de aprendizagem profunda.

O Armazenamento Blob Standard é utilizado para armazenar os registos e resultados. Premium Blob Storage é utilizado para armazenar os dados de treino e é montado nos nós do cluster de treino utilizando blobfuse. O nível Premium de Blob Storage oferece um melhor desempenho do que o nível Standard e é recomendado para cenários de treino distribuídos. Quando montados usando blobfuse, durante a primeira época, os dados de treino são descarregados para os discos locais do cluster de treino e em cache. Para cada época subsequente, os dados são lidos a partir dos discos locais, que é a opção mais performante.

Azure Container Registry é usado para armazenar a imagem do Docker que o Azure Machine Learning Compute usa para executar o treino.

Componentes

  • O Azure Machine Learning é uma plataforma aberta para gerir o desenvolvimento e implementação de modelos de aprendizagem automática em escala. A plataforma suporta quadros abertos comumente usados e oferece a caracterização automatizada e seleção de algoritmos. Pode utilizar machine learning para implementar modelos para vários alvos, incluindo Azure Container Instances.
  • Armazenamento de Blobs do Azure é um serviço que faz parte do Azure Storage. Blob Storage oferece armazenamento de objetos de nuvem otimizado para grandes quantidades de dados não estruturados.
  • O Registo de Contentores é um serviço de registo privado baseado na nuvem. Você pode usar o registo de contentores para armazenar e gerir imagens privadas de contentores Docker e artefactos relacionados.

Detalhes do cenário

Cenário: Classificar imagens é uma técnica amplamente aplicada na visão computacional, muitas vezes abordada através do treino de uma rede neural convolucional (CNN). Para modelos particularmente grandes com grandes conjuntos de dados, o processo de treino pode levar semanas ou meses numa única GPU. Em algumas situações, os modelos são tão grandes que não é possível encaixar tamanhos razoáveis no lote na GPU. A utilização de formação distribuída nestas situações pode encurtar o tempo de treino.

Neste cenário específico, um modelo ResNet50 CNN é treinado usando Horovod no conjunto de dados ImageNet e em dados sintéticos. A implementação de referência mostra como realizar esta tarefa usando o TensorFlow.

Existem várias formas de treinar um modelo de aprendizagem profunda de forma distribuída, incluindo abordagens paralelos de dados e modelos que se baseiam em atualizações sincronizadas ou assíncronos. Atualmente, o cenário mais comum é o treino paralelo de dados com atualizações sincronizadas. Esta abordagem é a mais fácil de implementar e é suficiente para a maioria dos casos de utilização.

No treino distribuído paralelo a dados com atualizações sincronizadas, o modelo é replicado em dispositivos de hardware n. Um mini-lote de amostras de treino é dividido em n micro-lotes. Cada dispositivo executa passes para a frente e para trás para um micro-lote. Quando um dispositivo termina o processo, partilha as atualizações com os outros dispositivos. Estes valores são utilizados para calcular os pesos atualizados de todo o mini-lote, e os pesos são sincronizados em todos os modelos. Este cenário é abordado no repositório do GitHub associado.

Treino distribuído paralelo a dados.

Esta arquitetura também pode ser usada para atualizações modelo-paralelas e assíncronas. No treino distribuído por modelos paralelos, o modelo é dividido em dispositivos de hardware n , com cada dispositivo a segurar uma parte do modelo. Na implementação mais simples, cada dispositivo detém uma camada da rede, e a informação é transmitida entre dispositivos durante os passes para a frente e para trás. Redes neuronais maiores podem ser treinadas desta forma, mas à custa do desempenho, porque os dispositivos estão constantemente à espera que os outros completem o passe para a frente ou para trás. Algumas técnicas avançadas tentam aliviar parcialmente esta questão usando gradientes sintéticos.

Os passos para a formação são:

  1. Crie scripts que funcionam no cluster e treine o seu modelo.
  2. Escreva dados de treino para o Blob Storage.
  3. Criar um espaço de trabalho de Machine Learning. Este passo também cria uma instância de Registo de Contentores para hospedar as suas imagens Docker.
  4. Crie um cluster com GPU de aprendizagem automática.
  5. Submeta trabalhos de formação. Para cada trabalho com dependências únicas, uma nova imagem do Docker é construída e empurrada para o seu registo de contentores. Durante a execução, a imagem apropriada do Docker executa e executa o seu script.
  6. Todos os resultados e registos estão escritos para o Blob Storage.

Considerações de agrupamento de formação

O Azure fornece vários tipos de VM ativados pela GPU que são adequados para treinar modelos de aprendizagem profunda. Variam de preço e velocidade de baixo a alto da seguinte forma:

Série Azure VM NVIDIA GPU
NC K80
NDs P40
NCsv2 P100
NCsv3 V100
NDv2 8x V100 (NVLink)
ND A100 v4 8x A100 (NVLink)

Recomendamos aumentar o seu treino antes de escalonar. Por exemplo, experimente um único V100 antes de experimentar um aglomerado de K80s. Da mesma forma, considere usar um único NDv2 em vez de oito VMs NCsv3.

O gráfico seguinte mostra as diferenças de desempenho para diferentes tipos de GPU com base em testes de benchmarking realizados com TensorFlow e Horovod. O gráfico mostra a produção de 32 clusters GPU em vários modelos, em diferentes tipos de GPU e versões MPI. Os modelos foram implementados no TensorFlow 1.9

Resultados de produção para modelos TensorFlow em clusters GPU.

Cada série VM mostrada na tabela anterior inclui uma configuração com InfiniBand. Utilize as configurações InfiniBand quando executar treino distribuído, para uma comunicação mais rápida entre nós. A InfiniBand também aumenta a eficiência de escala da formação para os quadros que podem tirar partido dela. Para mais detalhes, consulte a comparação de referência da Infiniband.

Considerações

Estas considerações implementam os pilares do Quadro Well-Architected Azure, que é um conjunto de princípios orientadores que pode utilizar para melhorar a qualidade de uma carga de trabalho. Para mais informações, consulte Microsoft Quadro Well-Architected Azure.

Armazenamento

Quando treina modelos de aprendizagem profunda, um aspeto muitas vezes negligenciado é onde armazenar os dados de treino. Se o armazenamento for demasiado lento para acompanhar as exigências das GPUs, o desempenho do treino pode degradar-se.

O Azure Machine Learning Compute suporta muitas opções de armazenamento. Para melhor desempenho, faça o download dos dados localmente para cada nó. No entanto, este processo pode ser complicado, pois você tem que baixar os dados para cada nó do Blob Storage. Com o conjunto de dados ImageNet, este processo pode demorar um tempo considerável. Por predefinição, a Machine Learning monta o armazenamento de modo a cache os dados localmente. Como resultado, na prática, após a primeira época, os dados são lidos a partir do armazenamento local. Combinado com o Armazenamento Premium Blob, este acordo oferece um bom compromisso entre a facilidade de utilização e o desempenho.

Embora o Azure Machine Learning Compute possa montar o Blob Storage standard usando o adaptador blobfuse , não recomendamos a utilização do nível Standard para treino distribuído, porque o desempenho normalmente não é bom o suficiente para lidar com a produção necessária. Utilize o nível Premium como armazenamento para dados de formação, como mostrado anteriormente no diagrama de arquitetura. Para uma publicação de blog com uma comparação de produção e latência entre os dois níveis, consulte Premium Block Blob Storage - um novo nível de desempenho.

Container Registry

Sempre que um espaço de trabalho de Machine Learning é abastado, um conjunto de recursos dependentes - Blob Storage, Key Vault, Registro de Contentores e Insights de Aplicação - também é a provisionado. Em alternativa, pode utilizar os recursos Azure existentes e associá-los ao novo espaço de trabalho machine learning durante a sua criação.

Por predefinição, o Registo de Contentores de nível básico é abastado. Para uma aprendizagem profunda em larga escala, recomendamos que personalize o seu espaço de trabalho para utilizar o Registo de Contentores de nível Premium. Oferece uma largura de banda significativamente maior que permite-lhe puxar rapidamente imagens do Docker através dos nós do seu cluster de treino.

Formato de dados

Com grandes conjuntos de dados, é frequentemente aconselhável usar formatos de dados como TFRecords ou Petastorm que fornecem um melhor desempenho de I/S do que vários pequenos ficheiros de imagem.

Segurança

A segurança fornece garantias contra ataques deliberados e abuso dos seus valiosos dados e sistemas. Para mais informações, consulte a visão geral do pilar de segurança.

Use um espaço de trabalho com impacto elevado

Em cenários que utilizem dados sensíveis, deve considerar a designação de um espaço de trabalho de Machine Learning como Alto Impacto Empresarial (HBI) ao definir uma bandeira hbi_workspace para ser verdadeira ao criar. Um espaço de trabalho habilitado pelo HBI, entre outros, encripta discos de risco locais de clusters de computação, permite a filtragem IP e reduz a quantidade de dados de diagnóstico que Microsoft recolhe. Para obter mais informações, consulte a encriptação de dados com a Azure Machine Learning.

Criptografe os dados em repouso e em movimento

Criptografe dados sensíveis em repouso, isto é, no armazenamento do blob. De cada vez que os dados se movem de um local para o outro, use o SSL para garantir a transferência de dados. Para mais informações, consulte o guia de segurança do Azure Storage.

Dados seguros numa rede virtual

Para implementações de produção, considere implantar o cluster Machine Learning numa sub-rede de uma rede virtual que especifique. Com esta configuração, os nós de computação no cluster podem comunicar de forma segura com outras máquinas virtuais ou com uma rede no local. Também pode utilizar o serviço ou pontos finais privados para todos os recursos associados para garantir o acesso a partir de uma rede virtual.

Otimização de custos

A otimização de custos tem a ver com formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para mais informações, consulte a visão geral do pilar de otimização de custos.

Utilize a calculadora de preços Azure para estimar o custo de executar a sua carga de trabalho de aprendizagem profunda. Para planeamento de custos e considerações de gestão específicas da Machine Learning, consulte Plano de gestão de custos para a Azure Machine Learning. Para mais informações, consulte a visão geral do pilar de otimização de custos.

Armazenamento Premium Blob

Premium Blob Storage tem um alto custo de armazenamento de dados, mas o custo de transação é inferior ao custo de armazenamento de dados no nível quente do Armazenamento Standard Blob. Assim, o Armazenamento Blob Premium pode ser mais barato para cargas de trabalho com altas taxas de transação. Para mais informações, consulte Armazenamento de Blobs do Azure preços.

Container Registry

O Registo de Contentores oferece níveis básicos, standard e premium. Escolha um nível dependendo do armazenamento de que necessita. Escolha Premium se precisar de replicação geo-de-geo ou produção melhorada para Docker puxa através de nós simultâneos. Além disso, aplicam-se os custos padrão de rede. Para mais informações, consulte Azure Container Registry preços.

Computação do Machine Learning

Nesta arquitetura, a Azure Machine Learning Compute é provavelmente o principal impulsionador de custos. A implementação precisa de um conjunto de nós computacional da GPU. O preço desses nós é determinado pelo seu número e pelo tamanho VM que seleciona. Para obter mais informações sobre os tamanhos VM que incluem GPUs, consulte os tamanhos de máquinas virtuais otimizados pela GPU e o Azure Máquinas Virtuais Preços.

Tipicamente, cargas de trabalho de aprendizagem profunda acompanham o progresso após cada época ou a cada época. Esta prática limita o impacto de interrupções inesperadas no treino. Você pode emparelhar esta prática com o uso de VMs de baixa prioridade para clusters de cálculo machine learning. Os VM de baixa prioridade utilizam a capacidade excedentária do Azure a taxas significativamente reduzidas, mas podem ser preempedidos se as exigências de capacidade aumentarem.

Excelência operacional

A excelência operacional abrange os processos de operação que implementam uma aplicação e a mantêm em funcionamento. Para mais informações, consulte a visão geral do pilar de excelência operacional.

Enquanto dirige o seu trabalho, é importante monitorizar o progresso e garantir que as coisas estão a funcionar como esperado. No entanto, pode ser um desafio monitorizar através de um conjunto de nós ativos.

Machine Learning oferece muitas formas de instrumentar as suas experiências. Os fluxos de stdout e stderr dos seus scripts são automaticamente registados. Estes registos são automaticamente sincronizados com o armazenamento do seu espaço de trabalho. Pode ver estes ficheiros através do portal do Azure, ou descarregá-los ou transmiti-los utilizando o Python SDK ou o Machine Learning CLI. Se registar as suas experiências utilizando o Tensorboard, estes registos são automaticamente sincronizados. Pode acessá-los diretamente ou utilizar o Machine Learning SDK para transmiti-los para uma sessão de tensorboard.

Eficiência de desempenho

Eficiência de desempenho é a capacidade da sua carga de trabalho para dimensionar para satisfazer as exigências que os utilizadores lhe colocam de forma eficiente. Para obter mais informações, consulte a visão geral do pilar de eficiência de desempenho.

A eficiência de escala do treino distribuído é sempre inferior a 100 por cento devido à sobrecarga da rede — sincronizar todo o modelo entre dispositivos torna-se um estrangulamento. Por isso, a formação distribuída é mais adequada para:

  • Grandes modelos que não podem ser treinados usando um tamanho razoável de lote em uma única GPU.
  • Problemas que não podem ser resolvidos distribuindo o modelo de uma forma simples e paralela.

O treino distribuído não é recomendado para fazer pesquisas de hiperparímetros. A eficiência de escala afeta o desempenho e torna uma abordagem distribuída menos eficiente do que treinar várias configurações de modelos separadamente.

Uma forma de aumentar a eficiência de escala é aumentar o tamanho do lote. Mas faça este ajuste com cuidado. Aumentar o tamanho do lote sem ajustar os outros parâmetros pode prejudicar o desempenho final do modelo.

Implementar este cenário

A implementação de referência desta arquitetura está disponível no GitHub. Siga os passos descritos para realizar formação distribuída de modelos de aprendizagem profunda em clusters de VMs habilitados para GPU.

Contribuidores

Este artigo é mantido por Microsoft. Foi originalmente escrito pelos seguintes contribuintes.

Autores principais:

Para ver perfis não públicos do LinkedIn, inscreva-se no LinkedIn.

Passos seguintes

A saída desta arquitetura é um modelo treinado que é guardado para um armazenamento de bolhas. Pode operacionalizar este modelo para pontuação em tempo real ou pontuação em lotes. Para mais informações, consulte as seguintes arquiteturas de referência:

Para arquiteturas que envolvam formação distribuída ou aprendizagem profunda, consulte os seguintes recursos: