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 eficiente do modelo e infraestrutura escaloná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.
Confiabilidade
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 (VMs) distribuídas e manter o desempenho durante as alterações de 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 de 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. Acompanhe 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 Insights de VM do Azure Monitor.
Automatize a aplicação de patches e atualizações com instâncias contínuas. Use o Gerenciamento de Atualizações do Azure para aplicar patches de maneira contínua, permitindo que uma instância seja atualizada enquanto outras continuam a atender ao tráfego, evitando o tempo de inatividade durante a manutenção.
Design para degradação normal durante falhas parciais. Certifique-se de que a funcionalidade principal permaneça disponível atendendo a modelos de IA menos complexos ou limitando recursos específicos quando algumas VMs ficarem 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 dos dados do modelo, conjuntos de dados de treinamento e configurações para permitir a restauração rápida se houver uma 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 agendamentos de atualização específicos 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 conjuntos de dimensionamento para manter a segurança contra novas ameaças. Para obter mais informações, consulte Atualizações de convidado e visão geral da manutenção do 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 acompanhar as principais métricas de desempenho e identificar descompasso de modelo, o que pode 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 medidas de descompasso de dados do modelo para o Azure Monitor. O monitoramento de alterações de desempenho ao longo do tempo pode ajudar a detectar 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 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 o acesso não autorizado ou padrões de uso incomuns. Para obter mais informações, consulte Logs de atividades 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 acompanhar as alterações, garantindo uma trilha de auditoria clara para identificar e reverter modificações prejudiciais. O uso do Azure DevOps para controle de versão aprimora a segurança gerenciando o acesso a alterações de código e impondo 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 detecção de anomalias para saídas de 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 detectar uma saída anormal. Você pode definir a detecção de anomalias em uma métrica como a precisão da previsão para detectar automaticamente quando ela sai de um intervalo esperado. Para obter mais informações, consulte Criar e gerenciar alertas de métrica com limites dinâmicos.
Aplique políticas de acesso ao modelo. Use o RBAC (controle de acesso baseado em função) 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 modelos em relação a dados atualizados. A implementação da revalidação periódica do 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 antecipadamente, garantindo melhoria contínua e proteção contra possíveis ameaças. 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 um agendamento apropriado para obter resultados de validação.
Acompanhe a linhagem de dados e as alterações do arquivo de modelo. Habilite o controle de versão no Armazenamento de Blobs do Azure e acompanhe os dados usados no treinamento e na 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 mitiga os riscos associados a ataques de negação de serviço. Ao controlar o acesso, você pode manter o desempenho e proteger dados confidenciais de possíveis cotas e limites de gerenciamento de API de exploração.
Realize verificações regulares de vulnerabilidade. 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. Verificação de vulnerabilidade do Microsoft Defender.
Otimização de custo
A otimização de custos envolve o alinhamento do uso de recursos com os requisitos de carga de trabalho para evitar despesas desnecessárias. O dimensionamento correto das VMs, a confirmação de instâncias reservadas e a configuração do dimensionamento automático ajudam a gerenciar os custos sem comprometer o desempenho. Controlar os custos na infraestrutura do Azure é vital para a sustentabilidade e escalabilidade de longo prazo das implantações de IA.
Confirme com instâncias reservadas. Economize nos custos da máquina virtual (VM) comprometendo-se com um período de um ou três anos, que oferece taxas com desconto.
Use os Conjuntos de Dimensionamento de Máquinas Virtuais do Azure para dimensionamento automático.Dimensionar automaticamente Instâncias de VM baseadas em métricas como 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.
Use os Savings Plans do Azure para uso previsível. Reduza os custos em comparação com os preços pagos conforme o uso, 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 sobressalente para cargas de trabalho que podem tolerar interrupções.
Selecione a solução de armazenamento certa. Equilibre custo e desempenho com base nas necessidades de carga de trabalho. Escolha o Azure Managed Lustre (AMLFS) para aplicativos de alta taxa de transferência e grande escala e o Azure NetApp Files (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 dos 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 variadas. Esse foco na eficiência operacional garante que os modelos de IA funcionem conforme o esperado, sem uso excessivo de recursos.
Otimize a alocação de recursos. Examine regularmente os tamanhos e as configurações de VM do Azure com base no uso real de recursos para atender às necessidades de carga de trabalho. Use o Assistente do Azure 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 Dimensionamento de Máquinas Virtuais do Azure para ajustar os recursos dinamicamente com base na demanda. Para obter mais informações, confira Conjuntos de dimensionamento de máquinas virtuais do Azure.
Realize 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.
Implemente treinamento distribuído para eficiência. Use técnicas de treinamento distribuídas, se aplicável, para reduzir o tempo de treinamento usando várias VMs. Estruturas como Horovod e PyTorch dão suporte ao 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 SavedModel ou PyTorch do TensorFlow. 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.
Design para recuperação de estado. Verifique se o aplicativo pode 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. 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 GPU (unidade de processamento gráfico) 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, aumentando 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 as máquinas virtuais usem a virtualização de E/S de raiz única (SR-IOV) em tipos de máquinas virtuais com suporte. Ele fornece menor latência, jitter reduzido 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 temporário. 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 temporário 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 Sistema de Arquivos Paralelo (PFS) pode ser uma ótima opção em termos de custo e desempenho, supondo que 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 o Azure NetApp Files ou o Azure Native Qumulo.
Implemente o armazenamento de ponto 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 DIMM (módulo de memória em linha dupla), 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 do ponto de verificação (quando os dados são salvos). Entenda quantos dados são transferidos a cada vez. Tenha uma solução de armazenamento que atenda aos requisitos de capacidade e desempenho. Use o Armazenamento de Blobs, se ele atender às necessidades de desempenho.
Testes de benchmarking
Os testes de benchmarking ajudam a avaliar e melhorar o desempenho do treinamento de aprendizado profundo distribuído 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.
- A NVIDIA Collective Communications Library (NCCL) e a ROCm Communication Collectives Library (RCCL) testam: Avalie o desempenho e a precisão na comunicação multi-GPU usando bibliotecas NCCL ou RCCL, testando padrões como all-reduce e scatter.
Esses testes garantem escalabilidade e desempenho ideal para LLMs, com Megatron focando no treinamento de modelos e NCCL/RCCL na comunicação da 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 que incluem:
- Paralelismo: dá suporte ao paralelismo de modelo, dados e pipeline para modelos de bilhões de parâmetros.
- Escalabilidade: dimensiona-se em várias GPUs e nós para 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 é implantado na infraestrutura de 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 certas. Use o CycleCloud Workspace for Slurm para simplificar a implantação. Escolha SKUs da série NC ou 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 marketplace 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 o Ubuntu. Para comunicação multi-GPU e multi-node, é essencial ter bibliotecas de comunicação como NCCL e MPI. Além disso, os drivers NVIDIA apropriados devem ser instalados para garantir a aceleração da GPU. As imagens do HPC marketplace 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 do NGC. Para executar o contêiner em um cluster HPC tradicional baseado em Slurm, você precisa instalar e configurar esses outros componentes em seu cluster:
- enroot: uma ferramenta que permite aos usuários executar aplicativos em contêineres em clusters HPC sem exigir privilégios de root ou modificar o sistema host.
- pyxis: um plug-in para Slurm que permite a integração perfeita do enroot com o Slurm, permitindo que os usuários enviem trabalhos em contêineres para filas do 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 por meio do CycleCloud. Você pode introduzir esses componentes extras por meio do cluster-init com projetos do CycleCloud. Com esses requisitos atendidos, você pode usar o Megatron-LM para treinamento LLM:
- 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 de redução total 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 no repositório Megatron-LM para converter seus dados em um formato compatível com Megatron-LM.
- Treinamento com Megatron-LM: Use os exemplos em Megatron-LM como referência para configurar 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 do NCCL, uma biblioteca que facilita a comunicação de alta velocidade entre GPUs. O NCCL oferece suporte a operações coletivas, incluindo all-reduce, all-gather, reduce, broadcast e reduce-scatter, em nós de uma ou várias GPUs, e alcança 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 da NCCL
Use o teste de largura de banda NCCL para avaliar as principais métricas, incluindo tempo e largura de banda. "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 de hardware, levando em conta 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 por meio de 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 de 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 argumentos diferentes, como o número de GPUs por thread (-g
), intervalo de tamanho de dados (-b
para bytes mínimos e -e
para bytes 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ções (-n
), contagem de aquecimento (-w
) e configurações de gráfico CUDA (-G
). Consulte a documentação do 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 inter-node. 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 oferece suporte à integração em fluxos de trabalho de um e vários processos, como aqueles que usam MPI. Para obter mais informações, consulte Biblioteca de Coletivos de Comunicação ROCm
- Configurar ambiente. Instale o ROCm e verifique se 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.