O Gargalo Que Ninguém Quer Falar: HBM, Não FLOPs

Olha só, todo time que escala LLM bate na mesma parede. Suas GPUs não estão limitadas por compute — estão limitadas por memória. Pesos do modelo, gradientes, estados do otimizador, buffers de comunicação e ativações intermediárias brigam pelo mesmo pool de HBM. No momento em que você tenta aumentar sequence length ou batch size: OOM.

É aqui que entra o host offloading. Em vez de recomputar ativações no backward pass (rematerialization), você faz streaming delas para memória pinned do host no forward pass e traz de volta quando precisar. A troca muda de "compute extra" para "bandwidth extra".

Em clusters commodity, essa troca é ruim — PCIe é lento demais. Mas no NVIDIA Grace Blackwell, vira superpoder. A CPU Grace e a GPU Blackwell estão ligadas por NVLink-C2C a 900 GB/s bidirecional, e a plataforma Vera Rubin dobra isso para 1.8 TB/s. De repente, memória do host é uma área de staging legítima, não uma penalidade.

Se você curte acompanhar como outras infraestruturas estão repensando hierarquias de memória sob carga real, essa análise da migração dos headless browsers da Cloudflare é um case paralelo excelente. 🚀

AI developer analyzing GPU memory bottleneck charts for LLM training with JAX host offloading Dev Environment Setup

Os Resultados: DeepSeek-V3 671B e Llama 3.1 405B

Todos os benchmarks rodaram em NVIDIA GB200 NVL72 com 128 GPUs, usando MaxText (JAX + XLA) como framework.

DeepSeek-V3 671B (MoE + MLA)

A política faz offload de projeções MLA query/key-value e intermediários de up-projection do MoE — ativações grandes o suficiente para decidir se uma config de batch cabe ou não.

ConfigMicro BatchGlobal BatchTFLOPs/s/deviceGPU Peak (GiB)Host Mem (GiB)
Host offload + LHS + pipelined81024908.2165.2145.1
Sem offload + rematerialization81024578.3151.30.0
Host offload, sem LHS, sem pipeline81024541.6145.6145.1
Sem offload, save on device2256425.3113.30.0
Sem offload, save on device81024OOM0.0

Isso é 57% mais rápido que rematerialization e 67.7% mais rápido que offloading ingênuo sem LHS ou pipelining. E olha a linha 5: sem offloading, micro batch 8 / global batch 1024 simplesmente não cabe. O offloading torna viável.

Llama 3.1 405B (Denso)

ConfigLHSPipelinedTFLOPs/s/deviceGPU Peak (GiB)Host Mem (GiB)
Sem offloadONOFF2,669149.60
QKV offloadONOFF2,746149.970.9
QKV offloadOFFOFF2,569139.770.9
QKV offloadONON2,718151.070.9

Um ganho de 2.9% sobre o baseline — menor que o DeepSeek, mas revelador. Aqui o LHS sozinho já esconde quase toda a latência, então pipelining não adiciona nada. Para modelos densos, offloading é otimização de performance. Para modelos MoE com footprint gigante de ativações, é destravar capacidade.

As Flags do XLA Que Fazem Isso Funcionar

# Habilita o latency hiding scheduler
--xla_gpu_enable_latency_hiding_scheduler=true

# Habilita pipelined host offloading (crítico para workloads MoE)
--xla_gpu_enable_pipelined_host_offloading=true

# Aumenta o trabalho async em voo para o LHS sobrepor copies com coletivas NCCL
--xla_gpu_experimental_parallel_async_compute_limit=8

A terceira flag é subestimada. Ela dá espaço pro scheduler sobrepor copies device-to-host com comunicação coletiva. Sem ela, você deixa throughput na mesa.

NVIDIA Blackwell GB200 server rack with NVLink-C2C interconnect for host offloading architecture Technical Structure Concept

Limitações e Cuidados

Host offloading não é bala de prata. Onde ele falha:

  • Tensores pequenos: se o offload não reduz pressão de HBM de forma significativa, o custo de transferência domina.
  • Workloads com pouco overlap: se não tem compute ou comunicação independente suficiente para esconder latência, você perde performance. O Llama 3.1 405B mostra isso — LHS já bastava.
  • Gargalo não é memória: se seu workload é limitado por coletivas NCCL ou overhead de kernel launch, offloading não ajuda.
  • Estimativas estáticas mentem: memória em runtime inclui scratch do NCCL, workspace de attention do cuDNN e buffers do framework. Sempre profile com runs reais.

Mais uma coisa: o run com offload usou mais memória de GPU (165.2 vs 145.6 GiB) porque mantém copy buffers e ativações prefetchadas residentes. Você troca capacidade de HBM por throughput. É uma escolha deliberada, não almoço grátis. 🍽️

Como Começar

  1. Comece com um run JAX pequeno e representativo — não um toy, não produção.
  2. Escolha ativações grandes de forward paths caros (projeções QKV, up-projections MoE).
  3. Habilite offloading via jax.remat com memory_kind="pinned_host".
  4. Meça três coisas: memória GPU em runtime, memória do host, e step time end-to-end.
  5. Profile com Nsight Systems para confirmar que copies D2H e H2D realmente sobrepõem com compute e NCCL.

Para quem também pensa em como plataformas cloud tomam decisões de escala, vale dar uma olhada na integração do Google Cloud Workbench com VS Code — é outra camada da mesma pergunta: "onde o trabalho realmente roda?".

Cloud GPU cluster diagram showing HBM to pinned host memory streaming for DeepSeek-V3 training Developer Related Image

A Conclusão

Host offloading ressignifica uma troca clássica. Em vez de pagar com compute (rematerialization), você paga com bandwidth (streaming). Em interconnects da classe NVLink-C2C, essa bandwidth é barata o suficiente para ganhar.

O resultado do DeepSeek-V3 é a manchete: 908 TFLOPs/s/device com micro batch 8 / global batch 1024, uma configuração que literalmente dá OOM sem offloading. Isso não é um ganho de 5% em tuning — é um novo regime operacional.

Mas não saia copiando cegamente. Profile primeiro. Offloading é uma decisão de posicionamento de memória que precisa ser validada com medições, não suposições. Se suas ativações são pequenas ou seu workload já tem bom overlap, você não ganha nada. Se HBM é a parede entre você e o próximo batch size, essa pode ser a alavanca que você procurava.

Próximos passos:

  • Leia o tutorial de host offloading do JAX (jax.remat, checkpoint policies, memory_kind="pinned_host").
  • Experimente os containers do NVIDIA JAX-Toolbox como ponto de partida mantido.
  • Profile seu workload atual com Nsight Systems para ver se a latência de transferência está exposta.

Fonte: NVIDIA Developer Blog — Reducing HBM Bottlenecks in JAX-Based LLM Training with Host Offloading

Este conteúdo foi elaborado com o auxílio de ferramentas de IA, com base em fontes confiáveis, e revisado pela nossa equipe editorial antes da publicação. Não substitui o aconselhamento de um profissional especializado.