Otimização
Em toda a indústria, equipes que treinam e servem grandes modelos de inteligência artificial enfrentam metas de retorno sobre o investimento (ROI) agressivas em capacidade de computação limitada. À medida que as cargas de trabalho escalam, 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, criação de pontos 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 de ponta a ponta total 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.
Nesse fluxo de trabalho, embasado na experiência de produção da Meta com o uso do PyTorch para treinamento de modelos, temos como objetivo 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. Outras, como a criação de pontos 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 gasto consumindo 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 submétricas L1: Tempo para Iniciar e Tempo para Recuperar são usados 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, começamos a analisar proativamente o Tempo de Treinamento Eficaz (ETT%) em toda a frota. Esse esforço visa estabelecer o status do ETT%, identificar áreas principais de foco e implementar melhorias.
Desde os ú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 subetapas: inicialização de dispositivo, inicialização de grupo de processos, criação de pré-processamento, criação de módulo de treinamento, inicialização de plug-ins, pré-treinamento e obtenção dos primeiros dados de treinamento.
A partir de 2024, nos concentramos em várias iniciativas para minimizar o tempo de inicialização do treinador. A metodologia principal que aplicamos foi a de evitar a criação desnecessária de grupos de processos e a comunicação não otimizada entre diferentes ranks em cada inicialização de trabalho, o que contribuía coletivamente para o aumento do tempo de inicialização do treinamento. Por exemplo, em vez de confiar em várias chamadas de all_gather para construir metadados de fragmentação pedaço por pedaço – 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 subetapas na inicialização do treinador não têm dependências entre si, o que permite criar processos separados para executar as subetapas e sobrepor umas às outras.
Por exemplo, a compilação do PT2 e o aquecimento do DPP (processo de dados que usamos para buscar os primeiros dados de treinamento) são etapas caras e demoradas que ocorrem antes do início do treinamento real. Atualmente, a compilação do PT2 é atrasada, pois só pode começar quando os primeiros dados reais estão disponíveis 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 antes, enquanto o DPP ainda está buscando os primeiros dados. Essa nova tecnologia é mais benéfica para modelos maiores, como os Modelos Fundamentais, pois 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 para reduzir o longo tempo de compilação do PT2.
Existem três principais métodos que estamos abordando para reduzir o tempo de compilação do PT2: anteriormente, a equipe já havia compartilhado experiências em reduzir o tempo de compilação do PT2. Com esses esforços combinados, a equipe conseg