Partilhar via


Considerações bem arquitetadas para cargas de trabalho de IA na infraestrutura do Azure (IaaS)

Considerações bem arquitetadas para IA na infraestrutura do Azure envolvem práticas recomendadas que otimizam a confiabilidade, a segurança, a eficiência operacional, o gerenciamento de custos e o desempenho das soluções de IA. Esses princípios garantem implantação robusta, tratamento seguro de dados, operação de modelo eficiente e infraestrutura escalável na plataforma IaaS do Azure. A aplicação desses princípios permite que as organizações criem modelos de IA resilientes, seguros e econômicos que atendam às necessidades de negócios.

Fiabilidade

A confiabilidade envolve minimizar o tempo de inatividade e garantir um desempenho consistente para aplicativos de IA na infraestrutura do Azure. Garantir operações confiáveis em máquinas virtuais distribuídas (VMs) e manter o desempenho durante alterações na infraestrutura evita interrupções de serviço. Essas práticas são importantes porque garantem a disponibilidade contínua do modelo e melhoram a experiência do usuário.

  • Distribua VMs entre zonas de disponibilidade. Minimize o tempo de inatividade devido a falhas de hardware ou eventos de manutenção usando zonas de disponibilidade. Eles distribuem VMs entre domínios de falha e atualização para garantir a operação contínua do aplicativo.

  • Configure o monitoramento de integridade com o Azure Monitor. Rastreie o desempenho da CPU, da memória e da rede em suas VMs usando o Azure Monitor e configure alertas para notificá-lo sobre degradação do desempenho ou falhas na infraestrutura que dá suporte aos seus modelos. Para obter mais informações, consulte Azure Monitor VM Insights.

  • Automatize patches e atualizações com instâncias contínuas. Use o Azure Update Management para aplicar patches de forma contínua, permitindo que uma instância seja atualizada enquanto outras continuam a servir o tráfego, evitando tempo de inatividade durante a manutenção.

  • Projeto para degradação graciosa durante falhas parciais. Garanta que a funcionalidade principal permaneça disponível, servindo modelos de IA menos complexos ou limitando recursos específicos quando algumas VMs ficam indisponíveis, permitindo que os usuários acessem serviços essenciais mesmo durante interrupções.

  • Implemente backups regulares para os principais ativos. Faça backup regularmente de dados de modelo, conjuntos de dados de treinamento e configurações para permitir uma restauração rápida em caso de falha, protegendo o progresso e os dados valiosos.

Segurança

A segurança abrange medidas de proteção para proteger modelos, dados e infraestrutura de IA contra acesso não autorizado e ameaças. Implemente atualizações, monitore a integridade do modelo e controle o acesso para evitar vulnerabilidades que possam comprometer informações confidenciais. Essas etapas são essenciais para manter a privacidade dos dados e a confiabilidade das soluções de IA em ambientes de produção.

  • Agende atualizações para recursos do Azure. Use configurações de manutenção para definir agendas de atualização específicas para VMs e extensões, reduzindo as janelas de vulnerabilidade.

  • Corrija máquinas virtuais e imagens de contêiner regularmente. Habilite a aplicação automática de patches de convidado para VMs e dimensione conjuntos para manter a segurança contra novas ameaças. Para obter mais informações, consulte Visão geral de atualizações de convidado e manutenção de host.

  • Monitore o desvio do modelo e garanta a integridade. Garanta a integridade do modelo implementando mecanismos de segurança, como assinaturas digitais ou verificações de hash para arquivos de modelo, para evitar modificações não autorizadas. Use o Azure Monitor para rastrear as principais métricas de desempenho e identificar desvios de modelo, que podem indicar possíveis vulnerabilidades de segurança ou mudanças de dados. Você pode definir métricas personalizadas (precisão, pontuação F1 e distribuição de dados em seus modelos) em seu código usando o SDK de Métricas do Azure Monitor. O SDK de Métricas do Azure Monitor permite que você envie as estatísticas de desempenho e as medições de desvio de dados do seu modelo para o Azure Monitor. O monitoramento de alterações de desempenho ao longo do tempo pode ajudar a detetar quando o comportamento de um modelo se desvia, potencialmente sinalizando um ataque ou uma necessidade de retreinamento. Essa abordagem proativa ajuda a proteger a integridade do modelo e a manter a conformidade de segurança.

  • Implemente logs de auditoria e acesso. Use o Azure Monitor e o Log Analytics para registrar o acesso a modelos e VMs, ajudando a identificar acesso não autorizado ou padrões de uso incomuns. Para obter mais informações, consulte Logs de atividade no Azure Monitor.

  • Use o controle de versão para arquivos de modelo. Armazene arquivos de modelo no Armazenamento do Azure (Blob, Arquivo ou Disco) com controle de versão para controlar alterações, garantindo uma trilha de auditoria clara para identificar e reverter modificações prejudiciais. Usar o Azure DevOps para controle de versão aprimora a segurança gerenciando o acesso a alterações de código e aplicando práticas recomendadas em revisões de código. Essa abordagem em camadas reduz os riscos de alterações não autorizadas e fornece responsabilidade. Para obter mais informações, consulte Controle de versão de Blob no Armazenamento do Azure.

  • Configure a deteção de anomalias para saídas do modelo. Use o Azure Monitor para acompanhar as métricas de saída de seus modelos e configurar alertas para comportamentos incomuns. Por exemplo, monitorar as respostas da API do seu modelo pode ajudar a detetar saídas anormais. Você pode definir a deteção de anomalias em uma métrica como a precisão da previsão para detetar automaticamente quando ela cai fora de um intervalo esperado. Para obter mais informações, consulte Criar e gerenciar alertas métricos com limites dinâmicos.

  • Aplique políticas de acesso ao modelo. Use o controle de acesso baseado em função (RBAC) do Azure e a ID do Microsoft Entra para proteger o acesso a VMs e arquivos de modelo, limitando o acesso apenas a usuários autorizados.

  • Revalide regularmente os modelos com base em dados atualizados. A implementação da revalidação periódica do seu modelo usando scripts ou fluxos de trabalho automatizados em suas VMs garante que o modelo permaneça preciso e eficaz em relação aos conjuntos de dados atuais, reduzindo os riscos de previsões desatualizadas ou imprecisas. Ao agendar essas tarefas com a Automação do Azure ou os Aplicativos Lógicos do Azure, você pode manter a conformidade com os padrões de dados e aprimorar a segurança geral do modelo. Essa abordagem proativa ajuda a identificar vulnerabilidades precocemente, garantindo a melhoria contínua e a proteção contra ameaças potenciais. Você pode agendar seus fluxos de trabalho de automação para acionar periodicamente tarefas de revalidação. Comece com um runbook de Automação do Azure, execute na máquina virtual, crie uma agenda apropriada para obter resultados de validação.

  • Rastreie alterações de linhagem de dados e arquivos de modelo. Habilite o controle de versão no Armazenamento de Blobs do Azure e rastreie os dados usados em treinamento e inferência, garantindo que nenhum dado não autorizado afete os resultados do modelo.

  • Aplique cotas de recursos e limites de taxa. Implemente limites de taxa e cotas para suas APIs de modelo por meio do Gerenciamento de API do Azure para evitar uso excessivo ou abuso, o que pode levar a vulnerabilidades do sistema ou interrupções de serviço. Essa estratégia garante que o sistema permaneça responsivo durante o tráfego intenso e reduza os riscos associados a ataques de negação de serviço. Ao controlar o acesso, você pode manter o desempenho e proteger dados confidenciais contra possíveis cotas e limites de gerenciamento de API.

  • Realize verificações regulares de vulnerabilidades. Use a verificação de vulnerabilidades do Microsoft Defender para realizar avaliações de vulnerabilidade de suas VMs e recursos relacionados. Verifique regularmente se há problemas de segurança ou configurações incorretas na configuração da VM que possam expor seus modelos. Análise de vulnerabilidades do Microsoft Defender.

Otimização de custos

A otimização de custos envolve alinhar o uso de recursos com os requisitos de carga de trabalho para evitar despesas desnecessárias. O dimensionamento correto de VMs, a confirmação de instâncias reservadas e a configuração do dimensionamento automático ajudam a gerenciar custos sem comprometer o desempenho. Controlar os custos na infraestrutura do Azure é vital para a sustentabilidade a longo prazo e a escalabilidade das implantações de IA.

  • Confirme-se em instâncias reservadas. Economize nos custos da máquina virtual (VM) comprometendo-se com um prazo de um ou três anos, que oferece taxas com desconto.

  • Use os Conjuntos de Escala de Máquina Virtual do Azure para dimensionamento automático. Dimensionar automaticamente Instâncias de VM baseadas em métricas como o uso da CPU, pagando apenas pelo que você precisa e evitando o provisionamento excessivo.

  • Defina desligamentos automáticos para instâncias ociosas. Evite custos de recursos não utilizados habilitando o desligamento automático, especialmente para ambientes de desenvolvimento e teste.

  • Utilize os Planos de Poupança do Azure para uma utilização previsível. Reduza os custos em comparação com os preços pré-pagos, comprometendo-se com o uso consistente em todos os tamanhos e regiões de VM.

  • Use instâncias spot do Azure para cargas de trabalho tolerantes a falhas. Obtenha descontos substanciais na capacidade ociosa para cargas de trabalho que podem tolerar interrupções.

  • Selecione a solução de armazenamento correta. Equilibre custo e desempenho com base nas necessidades de carga de trabalho. Escolha Azure Managed Lustre (AMLFS) para aplicativos de alta taxa de transferência e grande escala e Arquivos NetApp do Azure (ANF) para gerenciamento avançado de dados e confiabilidade.

Excelência operacional

A excelência operacional envolve a otimização da configuração e do gerenciamento de recursos do Azure para melhorar a funcionalidade de aplicativos de IA. A alocação eficiente de recursos, o ajuste de desempenho e o treinamento distribuído oferecem suporte à operação suave e à adaptabilidade a demandas variáveis. Esse foco na eficiência operacional garante que os modelos de IA tenham o desempenho pretendido, sem uso excessivo de recursos.

  • Otimize a alocação de recursos. Analise regularmente os tamanhos e configurações de VM do Azure com base no uso real de recursos para corresponder às necessidades de carga de trabalho. Use o Azure Advisor para obter recomendações sobre dimensionamento e dimensionamento ideais.

  • Configure o dimensionamento automático para eficiência. Configure o dimensionamento automático para VMs ou contêineres para lidar com demandas de carga de trabalho sem provisionamento excessivo. Use os Conjuntos de Escala de Máquina Virtual do Azure para ajustar recursos dinamicamente com base na demanda. Para obter mais informações, consulte Conjuntos de escala de máquina virtual do Azure.

  • Realizar ajustes regulares de desempenho. Crie continuamente o perfil do aplicativo para identificar e resolver gargalos de desempenho. Use o Application Insights Profiler para analisar o código do modelo e o uso de recursos.

  • Implementar treinamento distribuído para eficiência. Use técnicas de treinamento distribuído, se aplicável, para reduzir o tempo de treinamento usando várias VMs. Estruturas como Horovod e PyTorch suportam treinamento distribuído no Azure.

  • Salve pontos de verificação no Armazenamento de Blobs do Azure. Salve estados, pesos e configurações do modelo periodicamente no Armazenamento de Blobs do Azure. Você pode usar SDKs do Azure ou bibliotecas disponíveis na linguagem de programação que está usando para o LLM. Armazene os pontos de verificação em um formato estruturado, como arquivos de ponto de verificação TensorFlow SavedModel ou PyTorch. Modifique seu código de treinamento ou inferência para incluir a lógica de ponto de verificação. Comece definindo intervalos (após cada época ou algumas iterações) para salvar o estado do modelo. Use uma convenção de nomenclatura consistente para arquivos de ponto de verificação para rastrear facilmente o estado mais recente.

  • Projeto para recuperação de estado. Certifique-se de que seu aplicativo possa se recuperar de um ponto de verificação salvo. Implemente a lógica para carregar o estado do modelo do Armazenamento de Blobs do Azure quando o aplicativo for iniciado. Ele inclui a verificação de pontos de verificação existentes e o carregamento do ponto de verificação mais recente, se disponível, permitindo que o aplicativo seja retomado sem perder o progresso.

Eficiência de desempenho

A eficiência de desempenho refere-se à maximização do poder de processamento da infraestrutura do Azure para atender às demandas do modelo de IA. Você deve ajustar as configurações da GPU, otimizar os processos de entrada/saída (E/S) e executar testes de benchmarking para melhorar a velocidade computacional e a capacidade de resposta. Garantir alto desempenho suporta a execução de modelos complexos de IA em escala, o que aumenta a satisfação do usuário e reduz a latência.

Ajuste de GPU

Aumente a taxa de clock de uma unidade de processamento gráfico (GPU) para melhorar o desempenho, especialmente para tarefas que exigem alto processamento gráfico ou cálculos complexos. Velocidades de clock mais altas permitem que a GPU execute mais operações em um determinado período de tempo, melhorando a eficiência geral. Use este script de otimização de GPU para definir as frequências de clock da GPU para seus valores máximos.

  • Habilite a rede acelerada. A Rede Acelerada é uma tecnologia de aceleração de hardware que permite que máquinas virtuais usem virtualização de E/S de raiz única (SR-IOV) em tipos de máquinas virtuais suportados. Ele fornece menor latência, desvios reduzidos e menor utilização da CPU. Habilitar rede acelerada oferece melhorias substanciais no desempenho da rede front-end.

Ajuste de E/S

  • Otimize o armazenamento de riscos. O Scratch precisa ter alta taxa de transferência e baixa latência. O trabalho de treinamento requer a leitura de dados, o processamento e o uso desse local de armazenamento como espaço de trabalho enquanto o trabalho é executado. Idealmente, você usaria o SSD local diretamente em cada VM. Se você precisar de um sistema de arquivos compartilhado para o zero, combinar todos os SSDs NVMe para criar um PFS (Parallel File System) pode ser uma ótima opção em termos de custo e desempenho, supondo que ele tenha capacidade suficiente. Um método é usar o Azure Managed Lustre. Se o Azure Managed Lustre não for adequado, você poderá explorar opções de armazenamento como Arquivos NetApp do Azure ou Qumulo Nativo do Azure.

  • Implemente o armazenamento de pontos de verificação. Grandes trabalhos de treinamento de aprendizado profundo podem ser executados por semanas, dependendo do número de VMs usadas. Assim como qualquer cluster HPC, você pode encontrar falhas, como problemas de InfiniBand, falhas de módulo de memória em linha dupla (DIMM), erros de ode de correção de erros (ECC) na memória da GPU. É fundamental ter uma estratégia de checkpoint. Conheça o intervalo de pontos de verificação (quando os dados são salvos). Entenda a quantidade de dados que é transferida de cada vez. Tenha uma solução de armazenamento que atenda aos requisitos de capacidade e desempenho. Use o Armazenamento de Blob, se ele atender às necessidades de desempenho.

Testes de avaliação comparativa

Os testes de benchmarking ajudam a avaliar e melhorar o desempenho do treinamento distribuído de aprendizado profundo em GPUs, especialmente para modelos de grande escala. Esses testes medem a eficiência da comunicação da GPU entre nós, com o objetivo de reduzir os gargalos de transferência de dados durante o treinamento distribuído. Os três testes discutidos incluem:

  • Estrutura Megatron: Suporta modelos de linguagem em larga escala melhorando a eficiência do treinamento distribuído.
  • Os testes NVIDIA Collective Communications Library (NCCL) e ROCm Communication Collectives Library (RCCL): avalie o desempenho e a precisão na comunicação multi-GPU usando bibliotecas NCCL ou RCCL, testando padrões como redução total e dispersão.

Esses testes garantem escalabilidade e desempenho ideal para LLMs, com o Megatron se concentrando no treinamento de modelos e NCCL/RCCL na comunicação de GPU.

Teste NVIDIA Megatron-LM

NVIDIA Megatron-LM é uma estrutura de código aberto para treinar grandes modelos de linguagem. Ele permite que os desenvolvedores criem redes neurais massivas para tarefas de PNL, com recursos incluindo:

  • Paralelismo: Suporta paralelismo de modelo, dados e pipeline para modelos de bilhões de parâmetros.
  • Escalabilidade: Dimensiona em várias GPUs e nós para um treinamento eficiente de modelos grandes.
  • Flexibilidade: Permite a configuração da arquitetura do modelo, carregamento de dados e estratégias de treinamento.
  • Otimizações: Usa otimizações de GPU NVIDIA para ganhos de desempenho.

O Megatron-LM implanta na infraestrutura HPC do Azure e usa a escalabilidade do Azure para modelos de linguagem grandes sem exigir hardware local.

Configuração do teste Megatron-LM

A implantação do Megatron-LM requer software e hardware específicos.

  • Escolha as opções de implantação corretas. Use o CycleCloud Workspace for Slurm para simplificar a implantação. Escolha SKUs da série NC ou da série ND para a partição da GPU. Para treinamento de vários nós, os SKUs da série ND são recomendados para suporte a RDMA. As imagens do mercado de HPC do Azure geralmente incluem esses drivers e bibliotecas. Se a personalização for necessária, o repositório azhpc-images pode garantir a compatibilidade.

  • Use a imagem certa. Os requisitos de software para o projeto incluem um sistema operacional baseado em Linux, normalmente Ubuntu. Para comunicação multi-GPU e multi-node, é essencial ter bibliotecas de comunicação como NCCL e MPI. Além disso, drivers NVIDIA apropriados devem ser instalados para garantir a aceleração da GPU. As imagens do mercado HPC do Azure vêm com esses drivers e bibliotecas pré-instalados. No entanto, se a personalização for necessária, o repositório azhpc-images pode ser usado para garantir a compatibilidade.

Uso do teste Megatron-LM

Você deve executar o Megatron-LM usando a versão mais recente do contêiner PyTorch da NGC. Para executar o contêiner em um cluster HPC tradicional baseado em Slurm, você precisa instalar e configurar esses outros componentes no cluster:

  • enroot: uma ferramenta que permite aos usuários executar aplicativos em contêineres em clusters HPC sem exigir privilégios de raiz ou modificar o sistema host.
  • pyxis: um plugin para Slurm que permite a integração perfeita de enroot com Slurm, permitindo que os usuários enviem trabalhos em contêineres para filas Slurm e os executem em nós HPC.

Ambos os componentes estão incluídos no CycleCloud Workspace for Slurm , mas atualmente não estão incluídos nos clusters do Slurm criados via CycleCloud. Você pode introduzir esses componentes extras via cluster-init com projetos CycleCloud. Com esses requisitos atendidos, você pode usar o Megatron-LM para treinamento LLM ao:

  • Verificando o desempenho do cluster: identifique possíveis problemas de hardware antes de executar sua carga de trabalho com as Verificações de Integridade do Nó. Use testes NCCL para verificar o desempenho distribuído do cluster.
  • Selecionando seus dados de treinamento: use o modelo codeParrot como ponto de partida para validar seu fluxo de trabalho.
  • Pré-processamento de seus dados: Use o script preprocess_data.py dentro do repositório Megatron-LM para converter seus dados para um formato compatível com Megatron-LM.
  • Treinamento com Megatron-LM: Use os exemplos dentro do Megatron-LM como referência para configurar o Megatron para treinamento.

Essa configuração garante a implantação e o treinamento eficientes de modelos de linguagem grandes na infraestrutura do Azure.

Teste de largura de banda NCCL

Para verificar e otimizar a comunicação da GPU entre nós, execute o teste de largura de banda NCCL. O teste de largura de banda NCCL é uma ferramenta especializada dentro da NCCL, uma biblioteca que facilita a comunicação de alta velocidade entre GPUs. O NCCL suporta operações coletivas, incluindo all-reduce, all-gather, reduce, broadcast e reduce-scatter, em nós de GPU única ou múltipla, e alcança o desempenho ideal em plataformas com PCIe, NVLink, NVswitch ou configurações de rede como InfiniBand ou TCP/IP. Para obter mais informações, consulte Testes NVIDIA/NCCL.

Métricas de desempenho NCCL

Use o teste de largura de banda NCCL para avaliar as principais métricas, incluindo tempo e largura de banda. O "tempo" (em milissegundos) mede a sobrecarga ou latência nas operações, tornando-o útil para avaliar operações com tamanhos de dados pequenos. "Largura de banda" (em GB/s) avalia a eficiência da operação ponto a ponto, como Enviar/Receber. A "largura de banda do barramento" reflete a eficiência do uso do hardware, contabilizando a velocidade de comunicação entre GPUs e gargalos em componentes como NVLink ou PCI. Cálculos para várias operações coletivas são fornecidos, como AllReduce, ReduceScatter, AllGather, Broadcast e Reduce.

Início do teste NCCL

Para iniciar esses testes em uma implantação do CycleCloud, conecte-se ao nó do agendador via SSH e acesse um nó de computação equipado com GPU. Clone o repositório Git para testes NCCL, navegue até o nccl-tests diretório e crie um arquivo host listando os nós para teste. Obtenha o endereço IP do nó do agendador no aplicativo Web do CycleCloud.

Argumentos do teste NCCL

Antes de executar testes, especifique diferentes argumentos, como o número de GPUs por thread (-g), intervalo de tamanho de dados (-bpara bytes mínimos e -e máximos), incremento de etapa (-i ou -f), tipo de operação de redução (-o), tipo de dados (-d), dispositivo raiz (-r), contagem de iteração (-n), contagem de aquecimento (-w) e configurações de gráfico CUDA (-G). Consulte a documentação de teste NCCL para obter uma lista completa de parâmetros ajustáveis.

Testes RCCL

A ROCm Communication Collectives Library (RCCL) é uma biblioteca especializada projetada para comunicação eficiente entre GPUs AMD. Ele fornece operações coletivas, como all-reduce, all-gather, broadcast e reduce, suportando comunicação de GPU intra e entre nós. Otimizado para plataformas que usam PCIe e tecnologias de rede como InfiniBand, o RCCL garante a transferência de dados escalável em ambientes multi-GPU. Ele suporta a integração em fluxos de trabalho de processo único e multiprocesso, como aqueles que usam MPI. Para obter mais informações, consulte Biblioteca de Coletivos de Comunicação ROCm

  • Configurar ambiente. Instale o ROCm e certifique-se de que o RCCL está instalado corretamente em todos os nós.
  • Crie testes RCCL. Clone o repositório, navegue até o diretório rccl-tests e compile os testes.
  • Execute testes de largura de banda. Use os executáveis de teste fornecidos (rccl-tests), especificando operações de comunicação como all-reduce.
  • Analise o desempenho. Compare os resultados de largura de banda e latência entre nós e GPUs.

Próximo passo