Otimização
Ao longo da indústria, equipes que treinam e servem grandes modelos de inteligência artificial enfrentam metas agressivas de retorno sobre o investimento (ROI) com capacidade de processamento limitada. À medida que as cargas de trabalho aumentam, melhorar a eficácia da infraestrutura se torna mais difícil, pois o tempo de execução de ponta a ponta inclui cada vez mais sobrecargas além do “treinamento real” (inicialização, orquestração, ponto de verificação, reexecuções, falhas e recuperação). A Meta utiliza o Tempo de Treinamento Eficaz (ETT%) para quantificar a eficiência, definindo-o como o percentual do tempo total de ponta a ponta (E2E) dedicado ao treinamento produtivo. Essa métrica aponta diretamente para as áreas onde o tempo é desperdiçado, facilitando a priorização das melhorias de eficiência.
Neste fluxo de trabalho, embasado na experiência de produção da Meta utilizando PyTorch para treinamento de modelos, visamos compartilhar lições amplamente úteis: algumas melhorias foram implementadas em código aberto, como melhorias no plano de fragmentação do TorchRec e otimizações de compilação do PyTorch 2 (PT2) que reduzem o tempo de compilação e recompilação, enquanto outras (como ponto de verificação e publicação de modelos) são mais específicas da Meta, mas abordam gargalos comuns da indústria e podem ser adaptadas em outros lugares. O Tempo de Treinamento Eficaz (ETT%) é definido como o percentual do tempo de ponta a ponta (E2E) gasto para consumir novos dados. Como o tempo de ponta a ponta depende de muitos fatores, como arquitetura do modelo, complexidade, volume de dados de treinamento, etc., é difícil medir diretamente o Tempo de Treinamento Eficaz (ETT%). Em vez disso, o foco está em medir a ociosidade e as falhas, que podem ser representadas pela seguinte fórmula:
Uma visão geral da fórmula é mostrada abaixo com três sub-métricas L1: Tempo para Iniciar e Tempo para Recuperar são utilizados para medir a ociosidade de cada tentativa individual do ponto de vista da otimização do sistema, e Número de Falhas é direcionado para medir diferentes tipos de falhas da área de confiabilidade. A figura 1 mostra uma visão geral do Ciclo de Treinamento, onde as definições para essas áreas L2 são: a partir do segundo semestre de 2024, temos analisado proativamente o Tempo de Treinamento Eficaz (ETT%) em toda a frota. Esse esforço visa estabelecer o status do ETT%, identificar áreas de foco principais e implementar melhorias.
Nos últimos anos, desenvolvemos mais de 40 novas tecnologias para melhorar o Tempo de Treinamento Eficaz (ETT%) geral. O diagrama a seguir mostra uma visão geral das melhorias no Tempo para Iniciar para cada área principal: com os esforços concentrados da equipe, alcançamos um marco importante no final de 2025, aumentando com sucesso o percentual do Tempo de Treinamento Eficaz (ETT%) para mais de 90% para treinamento offline. A equipe realizou uma análise detalhada de cada área que contribui para o Tempo de Treinamento Eficaz (ETT%) e se concentrou em otimizações principalmente nas seguintes iniciativas: a inicialização do treinador compreende várias sub-etapas: inicialização do dispositivo, inicialização do grupo de processos, criação de pré-processamento, criação do módulo de treinamento, inicialização de plug-ins, pré-treinamento e obtenção do primeiro lote de dados.
A partir de 2024, nos concentramos em várias iniciativas para minimizar o tempo de inicialização do treinador. A principal metodologia que aplicamos foi a de evitar a criação desnecessária de grupos de processos e comunicação não otimizada entre diferentes ranks em cada inicialização do trabalho, o que coletivamente contribui para um aumento no tempo de inicialização do treinamento. Por exemplo, em vez de confiar em numerous chamadas all_gather para construir metadados de fragmentação peça por peça – um método que causava uma sobrecarga substancial no processo de fragmentação – a equipe implementou uma otimização. Agora, cada rank constrói sua seção do rank global usando metadados que já estão disponíveis localmente após a transmissão do plano de fragmentação. Essa mudança melhorou significativamente o tempo de fragmentação. Muitas sub-etapas na inicialização do treinador não têm dependências entre si, o que permite criar processos separados para executar a sub-etapa, sobrepondo-as umas às outras.
Por exemplo, a compilação do PT2 e o aquecimento do DPP (processo de dados que usamos para buscar dados de treinamento) para obter o primeiro lote de dados são etapas caras e demoradas que ocorrem antes do treinamento real começar. Atualmente, a compilação do PT2 é atrasada, pois só pode começar uma vez que o primeiro lote de dados reais está disponível para o processo de compilação. Para melhorar a eficiência desse processo, introduzimos novas tecnologias para usar o lote rápido para obter os dados, permitindo que o PT2 comece a compilar muito anteriormente, enquanto o DPP ainda está buscando os dados do primeiro lote. Essa nova tecnologia é mais benéfica para modelos maiores, como os Modelos de Fundação, porque o processo de carregamento de dados é significativamente mais demorado do que para outros tipos de modelos.
O tempo de compilação do PyTorch 2.0 (PT2) é outra grande área onde a equipe investiu. Existem três principais métodos que estamos adotando para reduzir o longo tempo de compilação do PT2: anteriormente, a equipe já havia publicado a experiência em reduzir o tempo de compilação do PT2. Com essas melhorias e otimizações, a equipe da Meta conseguiu alcançar um Tempo de Tre