halo README

The project's README from github.com/whitecircle/halo. As one markdown file: README.md.

Halo

Frontier-Lab Training for Everyone

Blog post · Docs · Examples · Benchmarks


What is Halo

Halo is an open-source framework built by White Circle for training large language and multimodal models. It supports pre-training, SFT, preference optimization, fully asynchronous multi-turn RL, and much more.

The same codebase runs on one GPU or across multiple nodes, with EP, CP, TP, ETP, FSDP2, fused kernels, BF16 training, and distributed rollouts.

Halo trains Hugging Face models directly. Checkpoints still load with from_pretrained, and supporting a new model family typically takes under 140 lines of integration code.

On 8× B300, Halo delivers up to ~2.8× the training throughput of stock TRL (2.7× at 25% less peak memory when both sides shard ZeRO-3), with larger margins over the other frameworks benchmarked.

Pre- & Post-Training · EP / CP / TP / ETP · Multi-Node · Verifiable & Multi-Turn RL · FA4 + Liger + Grouped GEMM · Full BF16


Why Halo


Latest updates


Quick start

Installation

Halo ships as separate Docker images for Blackwell and Hopper, with PyTorch, Flash Attention, and DeepEP V2 already built in — pull anonymously, no account required:

# B200/B300 — FA4 + FA2 + DeepEP
docker pull public.ecr.aws/whitecircle/halo:blackwell

# H100/H200 — FA2 + FA3 + DeepEP
docker pull public.ecr.aws/whitecircle/halo:hopper

Versioned tags (:blackwell-1.0.0, :hopper-1.0.0) pin the release. There is no latest tag, since the images are architecture-specific. The RL inference images are published alongside them (:vllm-0.26.0, :sglang-0.5.17).

To build locally instead:

# B200/B300 — FA4 + FA2 + DeepEP
make build-blackwell

# H100/H200 — FA2 + FA3 + DeepEP
make build-hopper

No host Python environment is required. See Installation for image details and build options.

Launch a training run

halo launch takes a training method and a YAML config:

# SFT + LoRA (fits into a single GPU)
halo launch sft examples/sft/qwen3/qwen3-4b-ultrachat-lora.yaml

# SFT + Expert Parallelism (MoE, 8 GPUs → torchrun)
halo launch sft examples/sft/qwen3_5/qwen3.5-35b-a3b-ultrachat-ep.yaml -n 8

# FSDP-2 + Accelerate
halo launch sft examples/sft/qwen3/qwen3-4b-ultrachat.yaml \
    -a launcher-configs/accelerate/fsdp2_gradop_config.yaml -n 8

# all training methods (SFT, SMPO, DPO, online-GRPO, environmental-GRPO, ...)
halo launch --list

halo selects python, torchrun, or accelerate launch based on the arguments. Options after the config that are not the launcher's own are passed to the trainer and override the YAML config:

halo launch sft examples/sft/qwen3_5/qwen3.5-35b-a3b-ultrachat-ep.yaml \
    -n 8 \
    --expert_parallel_size=8 \
    --learning_rate=1e-5 \
    --max_length=32000

Use --dry-run to print the command without running it, and --list to see the available methods:

halo launch --list
halo launch sft config.yaml --dry-run

Other tools

Checkpoint, inference, data, and environment utilities use halo run:

halo run merge-ep-shards --input_dir <ep-checkpoint-dir> --output_dir <merged-dir>
halo run quantize-to-lowp --input_dir <bf16-model-dir> --output_dir <nvfp4-out-dir> --format nvfp4

# all tools (merge-*, quantize-to-lowp, rm-scoring, run-env, …)
halo run --list             

The underlying scripts can also be run directly:

python scripts/training/sft.py \
    examples/sft/qwen3/qwen3-4b-ultrachat-lora.yaml

torchrun --nproc_per_node=8 scripts/training/sft.py \
    examples/sft/qwen3_5/qwen3.5-35b-a3b-ultrachat-ep.yaml

Coding agents

The training images ship repo-specific agent skills (discoverable by Claude Code and Codex; add --build-arg INSTALL_CLAUDE_CODE=1 to bake the CLI into the image) for launching jobs, choosing parallelism settings, debugging distributed runs, adding models, managing checkpoints, preparing data, optimizing throughput, and setting up RL.

See skills/ for the available skills.


Documentation

We keep two versions of the docs, depending on whether or not you're AI:

The full reference is also perfectly readable if you're human and want the details.

The human guide: Installation · Quickstart · Choosing a Method · The halo CLI · Writing a Config · Datasets · Training Methods · Rollout Servers · Parallelism · Clusters & Multi-Node · Performance · Supported Matrix · Supported Models · Model Integration Cost · Checkpoints & Export · Monitoring · Troubleshooting · Environment Variables · AI Tooling · Contributing


Repository layout

A map of the repository:

Path What's inside
src/ Trainers, parallelism, optimizers, kernels, collators, and callbacks
scripts/ Training entry points, inference, data-prep, and checkpoint tools
examples/ Ready-to-run YAML configs, grouped by method and model
launcher-configs/ Accelerate, SkyPilot, and Nomad launch configs
human-docs/ Short, task-oriented documentation
agent-docs/ Full technical reference
skills/ Agent skills (linked from .claude/skills and .agents/skills)
tests/ CPU and distributed GPU tests
Dockerfile · Makefile Image builds, tests, and training commands
AGENTS.md Contributor and agent instructions

A typical run is: pick an examples/ config → halo launch <method> <config> (or python scripts/training/<method>.py <config>), inside the Docker image.


Benchmarks

Benchmarks below were run on 8× B300. The stock TRL baseline uses trl.SFTTrainer with Transformers v5 and FSDP2 ZeRO-3, with the same model, data, bf16 precision, FlashAttention 4, Liger kernels, and grouped GEMM.

Result Configuration
2.3–2.8× stock TRL throughput gpt-oss-20b, 4k–16k; EP2 / dense EP1. Loss matches the baseline to ~1% by step 100.
24,456 tok/s/GPU gpt-oss-20b, 4k, batch 4, GC off — ~196k tok/s across 8 GPUs.
12,584 tok/s/GPU at 1,410 TFLOPS Qwen3.5-35B-A3B, 4k, batch 4, EP2 — the highest achieved TFLOPS of the MoE rosters.
Up to 256k context gpt-oss-20b; dense EP1 is 2.1× faster than TRL at 64k and 1.28× at 256k. CP configurations cut per-GPU memory to roughly half the baseline.
23–76 GB/GPU on the same 16k workload EP8+CP8: 23 GB at 5.4k tok/s/GPU. Dense EP1: 76 GB at 18.3k tok/s/GPU.
2.12× Grouped GEMM Qwen3-30B-A3B, EP2; 3.43× at batch 1.
2.1–3.7× FA4 kernel throughput FA4 vs FA2; up to 2.3× end-to-end on dense long-context training.

Full results and methodology: Performance


Parallelism

EP, CP, TP, and ETP are configured independently:

--expert_parallel_size=N          # MoE experts across GPUs (DeepEP)
--context_parallel_size=N         # long sequences (Ulysses attention)
--tensor_parallel_size=N          # attention weights (DTensor)
--expert_tensor_parallel_size=N   # expert-FFN sharding (MoE, experimental)
Mode Best for
EP Distribute MoE experts across GPUs
TP Shard model weights across GPUs
CP Split long sequences across GPUs
ETP Shard individual expert FFNs
EP+CP MoE + long-context training
EP+TP MoE + weight sharding
EP+ETP MoE + sharded experts

Pass them directly to torchrun, or after the config with halo launch:

halo launch sft config.yaml -n 8 --expert_parallel_size=8

Multi-node runs support shared (NFS/Lustre) and node-local filesystems. See Parallelism to pick a mode, Supported Matrix for the per-model matrix, and Clusters & Multi-Node for the multi-node recipes.


Optimizations

Enabled by default where supported:

→ Performance — what each lever buys, and the bottlenecks they attack


Built with AI

We use GPT and Claude extensively while developing Halo, through PI-Agent, Claude Code, and Codex.

AGENTS.md contains the instructions and conventions used by both coding agents and human contributors.

AI-assisted contributions are welcome. We just ask that contributors understand and stand behind the code they submit. See CONTRIBUTING.md.


Acknowledgments

Halo builds on a lot of great open-source work, in particular:

DeepEP and Flash Attention are vendored as git submodules under vendors/ and retain their upstream licenses; the build pins live in the Dockerfile. See pyproject.toml for the full dependency set.

Halo is built and maintained by White Circle.


License

Halo is released under the Halo License — the Apache License 2.0 (APACHE-2.0.txt) as modified by the Supplemental Terms in LICENSE. Copyright © 2026 White Circle, PBC.

In plain terms: free to use, modify, self-host, and to train your own models and ship them in your own products — at any scale. The one commercial condition is offering Halo's training functionality to third parties as a service: that's free up to US $20M in such revenue over any 12 months, and above that requires a commercial agreement with White Circle. Models trained with Halo by anyone over $20M in annual revenue must carry a "Trained with Halo" credit.

Questions or commercial licensing: [email protected].

halo (whitecircle/halo)

Searching Database…

825 ·GitHub
这是做什么的?Halo 是 White Circle 开源的大语言模型和多模态模型训练框架:预训练、SFT、偏好优化以及全异步多轮强化学习都集成在一个代码库里,从单张 GPU 一直扩展到多机集群。
它是需要加到项目里的 Python 库,还是一个直接运行的工具?它以现成的 Docker 镜像形式提供(Blackwell 和 Hopper GPU 各有独立构建),内置了 PyTorch、Flash Attention 和 DeepEP,所以本机不需要配置 Python 环境。你通过 halo 命令行工具来使用它:'halo launch' 根据 YAML 配置运行某个训练方法,'halo run' 提供检查点和数据处理等实用功能。
怎么跑起第一次训练?拉取适配你 GPU 的 Docker 镜像(版本标签形如 :blackwell-1.0.0;匿名拉取,无需注册账号),从 examples/ 目录里按方法和模型挑一个现成可运行的 YAML,然后运行 'halo launch '。'--dry-run' 可以预览将要执行的命令,'--list' 能列出所有可用方法。
必须有多卡大集群吗,还是我自己电脑上就能试试?都可以:同一套代码从单张 GPU 一直扩展到多机。在消费级硬件上,QLoRA 可以塞进 24 GB 显卡 —— Qwen3-4B 峰值只要 7.9 GB,Qwen3-8B 在 32k 上下文下也只需 20.9 GB。宣传里的亮眼数字则来自 8×B300 服务器。
它到底支持哪些 GPU?Blackwell 和 Hopper 有专门优化的镜像(Blackwell 上用 FlashAttention 4,Hopper 上用 FA2/FA3),旧款 GPU 也有相应实现和回退方案。Ampere 和 Ada 显卡可以用 halo:blackwell 镜像跑单卡 LoRA/QLoRA。
商用真的免费吗?它采用 Halo License:Apache 2.0 加补充条款。使用、修改、自托管以及发布你训练出的模型,在任何规模下都免费;附带条件是:把 Halo 的训练能力作为服务对外提供时,此类收入每 12 个月不超过 2000 万美元才免费(超出需签商业协议),年营收超过 2000 万美元的公司必须在模型上标注 'Trained with Halo'。
四种并行模式分别有什么用?EP 把 MoE 的专家分散到多张 GPU 上,TP 对模型权重做分片,CP 切分长序列,ETP 则对单个专家的 FFN 做分片。每种模式都可以独立配置,并且能组合使用 —— 比如 MoE 加长上下文训练就用 EP+CP,基准测试中最长跑到了 256k 上下文。
Halo 本身是用 AI 写出来的吗?大量使用了 —— 团队通过 PI-Agent、Claude Code 和 Codex 使用 GPT 和 Claude,相关约定写在 AGENTS.md 里。只要贡献者理解并对自己提交的代码负责,AI 辅助的贡献是受欢迎的。
它是怎么省优化器显存的?AdamWBF16 采用随机舍入,把优化器状态从 FP32 主权重的每参数 12 字节降到 6 字节;此外还支持 Muon 和 FlashAdamW,FP8/FP4 的 MoE 训练通过伪量化 QAT 实现,并可导出为 mxfp8/nvfp4 格式。
多机训练是怎么启动的?并行相关的参数可以直接传给 torchrun,或者在配置文件后面用 halo launch 传入;多机运行支持共享文件系统(NFS/Lustre)和节点本地文件系统,launcher-configs/ 目录还提供了 Accelerate、SkyPilot 和 Nomad 的现成方案。
What are similar projects?ms-swift, verl, verl, unsloth, minimind, LlamaFactory, Hy-MT2, qlora
Size
21.3 MB
Stars
825
Age
1mo
Commits · 90 Days