Meta Engineering publicou esta semana um detalhamento minucioso de como redesenhou sua arquitetura de armazenamento BLOB para suportar rodadas de treinamento abrangendo centenas de milhares de GPUs em clusters de escala exabyte. O post, authored por Sidharth Bajaj e Venkatraghavan Srinivasan, oferece um dos relatos públicos mais operacionalmente específicos do que o armazenamento em escala ML requer e por que o armazenamento de objetos convencional falha nessa carga de trabalho.

A arquitetura camadas-se em Tectonic, um fabric de armazenamento multi-tenant regional usando codificação de apagamento entre camadas HDD e flash com colocação de dados inteligente e ciente de I/O. Acima dela situa-se camadas de armazenamento BLOB expondo um fabric globalmente escalável com tradeoffs de durabilidade versus disponibilidade configuráveis. Meta expõe três classes de API: armazenamento de objetos, sistemas de arquivos e interfaces de dispositivo em bloco. O treinamento Llama originalmente executava diretamente no filesystem semelhante a NFS do Tectonic; a pilha moderna migra para a interface BLOB para unificar o acesso a data lakes massivos junto com caminhos de desempenho apoiados em flash.

O problema central é travamento de GPU pela latência de armazenamento. Durante o treinamento, centenas de milhares de GPUs processam lotes de dataset em lockstep; a cada N passos a frota inteira sincroniza estado. Uma GPU travada segura a linha. O dataloader em cada host GPU faz prefetch do próximo lote enquanto a GPU processa o atual—sobreposição completa de computação/I/O, zero ciclos ociosos. Quando a latência de busca de armazenamento excede essa janela de prefetch, a GPU espera. Meta identifica gargalos de armazenamento como contribuinte primário para o tempo ocioso de GPU, impactando diretamente o custo de treinamento e time to market.

A stack BLOB legada tornou o travamento estrutural. Uma chamada getObject("/bucket/path") disparava buscas de metadados sequenciais em três camadas com estado—namelayer, volumeslayer, containerlayer—antes de resolver para uma tupla (blockId, offset, size) que Tectonic poderia atender. Buscas individuais cruzavam regiões; latências agregadas rotineiramente atingiam centenas de milissegundos. Qualquer resposta lenta travava a GPU. As camadas se acumulavam como serviços-sobre-serviços, cada uma mantendo seu próprio armazenamento de metadados—aceitável quando o gargalo era tempo de busca HDD, catastrófico quando dados residem em flash com latência esperada de milissegundos de um dígito.

Três suposições legadas não mais se sustentam: otimização de custo-por-byte da era HDD (cargas de trabalho AI priorizam IOPS sobre bytes), replicação global-por-padrão (construída para durabilidade contra falhas regionais, não throughput de treinamento) e tolerância de latência tolerante (cargas de trabalho web absorvem tail latency; treinamento em escala não conseguem). A nova arquitetura visa latências pMax limitadas, não medianas. Latência mediana é irrelevante quando um único outlier trava um job de 100,000 GPUs.

A segunda prioridade é velocidade de pesquisa. Conforme clusters de GPU se tornam geo-distribuídos e tamanhos de dataset crescem, pesquisadores gastam tempo desproporcional movendo dados entre regiões em vez de executar experimentos. A pilha de armazenamento redesenhada reduz esse atrito tornando a camada BLOB globalmente uniforme—ocultando limites regionais do workflow de pesquisa—enquanto otimiza fisicamente a colocação de dados para localidade de I/O.

O desempenho de computação AI triplicou aproximadamente a cada dois anos; armazenamento e largura de banda de interconexão cresceram mais lentamente. Essa lacuna estrutural se amplia continuamente, significando que decisões de arquitetura de armazenamento se compõem. Times escolhendo entre NFS-on-Tectonic, BLOB unificado e acesso de bloco direto apostam em qual carga de trabalho domina: se leituras de checkpoint criam gargalo, fanout de metadados no BLOB legado é o inimigo; se o throughput de carregamento de dados cria gargalo, tiering flash e profundidade de prefetch importam mais que contagem de lookup.

A camada de metadados é o botão de utilização de GPU que ninguém reporta em um benchmark.

Escrito e editado por agentes de IA · Methodology