grail
@grail_ai
4 Following 1K Followers 111 Posts
Latest posts 5
A base model only becomes useful after post-training, and that has needed datacenter networking few can access. Grail makes reinforcement-learning post-training practical over commodity internet with PULSE, so more people can turn open models into systems they own and control.
One directive, one afternoon, and global access to Anthropic's most capable models was gone. Sovereignty does not end at nations. The tools people think with should not sit behind one party's switch. This is why Covenant builds open, distributed AI infrastructure.View quoted post on X
This is the research arc behind Grail’s distributed RL work.
PULSESync handles trainer-to-inference. PULSELoCo handles trainer-to-trainer. Same principle, both bandwidth bottlenecks now solved.
PULSESync handles trainer-to-inference. PULSELoCo handles trainer-to-trainer. Same principle, both bandwidth bottlenecks now solved.
Published Feb 2026: PULSE showed that distributed RL post-training could move far less data without changing the receiver's BF16 computation.View quoted post on X
In May, PULSELoCo extended the same idea to the second synchronization channel.
PULSESync addressed trainer-to-inference. PULSELoCo addresses trainer-to-trainer.
1/n
We're excited to see PULSE highlighted and incorporated into TRL and @vllm_project. The insight that ~99% of bf16 RL weight updates round to zero is now production sparse weight sync in @huggingface's stack.
Paper: arxiv.org/abs/2602.03839
Paper: arxiv.org/abs/2602.03839
The HF science team just made async RL weight sync ~100x cheaper on bandwidth, and you don't need a shared cluster anymore.View quoted post on X
The problem: every RL step, the trainer typically has to sync fresh weights to the inference engine. for a 7B in bf16 that's ~14GB. for a frontier 1T fp8 checkpoint, that's ~1TB; in bf16 it would be ~2TB. per sync.
The insight: between two RL steps, ~99% of bf16 weights are bit-identical. at RL learning rates, the optimizer is whispering and bf16 literally cannot hear most of it. the stored bf16 bits don't change.
What they shipped in TRL: only the changed elements get encoded as a sparse safetensors file, dropped into a Hugging Face Bucket, and fetched by vLLM. on Qwen3-0.6B, per-step payload goes from 1.2 GB to 20 to 35 MB. This is exactly what we built Buckets for: S3-like object storage on the Hub, Xet-backed (so even full snapshots only transfer the changed chunks).
The cherry on top: we ran a FULL disaggregated training where:
- the trainer lived on one box
- vLLM ran inside a Hugging Face Space
- the Wordle environment ran in another Space
- weights flowed through one Hub bucket
no shared cluster. no RDMA. no VPN. no NCCL across clouds. just HTTPS and a bucket.
one GPU + a Hugging Face account is now enough to do real disaggregated RL. multi-replica inference fleets across regions become a small devops exercise, not a research project.
Full write-up: huggingface.co/blog/delta-wei…
Open source RL keeps eating the moat!
TGIF #29 recap is up. @erfan_mhi joins @DistStateAndMe to talk about Grail's research being used to fine-tune a 1 trillion parameter model for @cursor_ai Composer 2 and what that validation means for the future of decentralized post-training.
youtu.be/Etz9KLqRjHc
youtu.be/Etz9KLqRjHc