My learning notes/codes for ML SYS.
一直以来对 ML + SYS 很感兴趣,苦于本科没有学好 ML,更没学好 SYS,但是读博了觉得自己应该可以在这方面试一试。
有如此打算,一来是我发觉组里很多能力出众的高年级学长们做的是 ML Theory + Application。不过,真的把一个 Theory 落到一个良好的 Application 上,即便是他们这样让我敬佩的 theory researcher,也有着一定挑战。在我入学前,组里有两篇让我眼前一亮的工作 SPIN 和 SPPO。工作本身都有非常棒的价值,但是如果在工程/系统上优化好,想来可以有更好的影响力。
此外,博士入学前的暑假,我和组里同学做了一个 In-context Learning for Agent 的工作 COPS,比较符合我的审美。我们就两个人主力干活,一个大哥推理论,而我负责在工程/系统上实现。这种工作模式让我的体感非常舒适,基于此,我甚至得出一个粗糙的结论:
这就是我想做 ML + SYS 的初衷了。所以从 2024 年的夏季开始,我开始慢慢上手 ML + SYS 这个尚且方兴未艾的领域。需要学习的实在太多了,有的在一些平台(譬如知乎和 HuggingFace Blog)上已经有了很好的资料,但是其他部分仍有所欠缺。所以,这个 repo 主要记载了我自己的一些学习笔记/读后感/思索/参考过的资料 etc,我姑且按照自己的大版图进行分类,也欢迎大家 PR。每一个大的板块,倒叙阅读就是我的学习过程,欢迎大家参考此路径上手。
之前的笔记大多写于 2024 年年底,经过了半年时间,我的仓库已略年久失修。一方面我自己更多在项目中负责推动 + delivery,反而自己很少写代码;另一方面,多多少少不少朋友向我们的仓库贡献了笔记,但我完全没有来得及整理。这段时间会不断完成整理并发布。下方文章列表中标记为 [Pending Review] 的文章尚未 review,欢迎大家一起 review!
- Unified FP8: Moving Beyond Mixed Precision for Stable and Accelerated MoE RL:在 RL 中完全使用 FP8 进行采样(Rollout)和训练(Training),同样刊载英文版本和知乎。
- Power Up Speculative Decoding In Reinforcement Learning:将 speculative decoding 引入到了 RL 的采样流程中,在 batch size 合适的情况下,采样速度得到了显著提升;并且,draft model 也会在训练过程中更新。相较于冻结 draft model 的做法,accepted length 持续维持在较高水平,产生长期稳定的正收益。同样刊载英文版本。
- 深入浅出 slime RL 框架的优雅设计与源码:slime 源码赏析,同样刊载于知乎和英文版本。
- [Pending Review] slime FSDP Setup Guide:记录如何在 slime 上测试 FSDP,包括 H 卡和 B 卡,以及 Colocate 和 Disaggregated 两种 placement 方式。
- 通过 Torch Memory Snapshot 分析 VLM RL 训练中的显存泄露问题:分析 SGLang 的显存泄露问题,以及解决方案,同样刊载于知乎和英文版本。
- Latency optimization for weight updates:一次对效率的 debug 过程,同样刊载于记一次对 SGLang weight update latency 的优化。
- 深入浅出理解 verl 源码(初始化):同样刊载于知乎,还有英文版本。
- 深入浅出理解 verl 源码(Rollout):同样刊载于知乎,还有英文版本。
- [Pending Review] 深入浅出理解 verl 源码(Make Experience):分析 verl 中 make experience 部分的逻辑。
- AgentLoop 源码浅析: 分析 verl 中基于 AgentLoop 的 multi-turn RL 的实现。
- verl 参数速览:verl 参数速览,同样刊载于知乎,还有英文版本。
- 从 tokenizer 视角来分析 Agentic 多轮训练的复杂性:同样刊载于知乎和英文版本。
- [Pending Review] DAPO Dynamic Filtering 实现与 Batch Size 解析:探索通过将 prompt 补齐到更小的 batch size 实现更高的并行度。
- 系统性分析 verl multi-turn training 的时间消耗:verl 多轮交互与工具调用 profile 分析,还有英文版本和知乎。
- SGLang, verl, OpenBMB 与清华大学团队联合开源:在主流 RLHF 框架上首次支持多轮交互与工具调用:在主流 RLHF 框架上首次支持多轮交互与工具调用,同样刊载于知乎。
- Search-R1 & veRL-SGLang: Train LLMs with Multi-Turn RL to Reason and Call a Search Engine:整合 Search-R1 framework 到 verl-sglang 生态,同样刊载于知乎。
- SGLang-veRL Server:从 Engine 到 Server,我们需要更灵活的 RLHF rollout 接口:为了实现更复杂的 RLHF 系统,我们逐步将 veRL 当中的 rollout engine 替代为 rollout server,同样刊载于知乎:SGLang-veRL Server。
- HybridFlow veRL 原文浅析:SGLang 的 hybrid engine 的原理与实现,同样刊载于知乎:HybridFlow veRL 原文浅析。
- 图解大模型RLHF系列之:人人都能看懂的PPO原理与源码解读以及图解OpenRLHF中基于Ray的分布式训练流程:猛猿小姐姐的非常好的 RLHF 入门资料,看了之后会对 RLHF 的计算流以及 OpenRLHF PPO 的框架有很好的理解,我自己也补充了写自己的理解在 RLHF 的计算流。
- 浅析以 OpenRLHF 为代表的 post-training 系统的计算流程:基于猛猿小姐姐的文章再做补充,Github native 渲染的巨烂,甚至看知乎好了。
- RL 系统深思:深入理解权重更新机制:半年工作的总结,深入理解权重更新机制,同样刊载于知乎和英文版本。
- RL 系统深思:FSDP 训练后端:讨论 FSDP 的原理和实现,以及分析 verl 的 FSDP 使用。同样刊载于知乎和英文版本。
- [Pending Review] RL 系统深思:Megatron:Megatron 的基本特性浅析,重点分析 Megatron 在 RL 框架中的使用。
- 扩展 OpenRLHF 的推理引擎:将 SGLang 接入到 OpenRLHF 的开发笔记,整个过程非常痛苦,而且目前还有 nccl hang error,已经直接联系了 deepspeed core contributor 在修复了。
- [Pending Review] SGLang as rollout engine of GRPO trainer:介绍如何将 SGLang 作为 TRL 中 GRPO Trainer 的推理后端,GRPO 是 PPO 的变体,在优化数学推理能力的同时优化 PPO 的内存使用。
- [Pending Review] Learning to Reason under Off-Policy Guidance:使用离线策略辅助在线学习的 LUFFY 框架,通过将 off-policy 推理轨迹与 on-policy rollout 结合,动态平衡模仿与探索。
- Kimi K1.5: Long Context RL 的成功实践:Long Context RLHF 的工业级实现,一直很喜欢 kimi 团队的技术报告,同样刊载于 Kimi K1.5: Long Context RL 的成功实践。
- Rule-based Reward:这篇只有知乎,浅浅写了写,老实说原文写的我并不太喜欢,但是 determined reward 确实 charming。
- SWE-Bench:如何构造 LLM 时代的优秀 Benchmark,基于 SWE-Bench 的论文阅读笔记,如何构造好的 benchmark 以为 post-training 提供细粒度 reward,是永恒且美妙的话题。
- 浅析主流 Alignment 算法与 NeMo-Aligner 框架
- SGLang Code Walk Through:一个请求被 SGLang Engine 处理的全过程,还有一些 part 没有完成,但是大多地方已经 okay,也让很多 SGLang begginer 就此开始。这里还有中文版本。
- Walk Through SGLang / VLLM Worker:SGLang 的代码不完全解析,同样刊载于 Walk Through SGLang / VLLM Worker,这次我们还贴心提供了英文版本。更详细的解析应该参考 SGLang Code Walk Through,这个只是辅助看看。
- Walk Through SGLang Scheduler
- [Pending Review] KV Cache Code Walkthrough:KV cache 管理实现的概览,从 Scheduler 组件开始,详细说明 prefill 和 decode 阶段中 KV cache 和内存池的更新过程。
- [Pending Review] SGLang 多模态请求生命周期:以 Qwen2.5-VL 为例的架构级深度解析:以 Qwen2.5-VL 为参考模型,提供对 SGLang 框架内多模态请求处理流程的详细剖析。
- [Pending Review] How A Model is Loaded in Hugging Face and SGLang:记录模型在 Hugging Face 和 SGLang 中的加载过程,帮助理解权重加载机制。
- [Pending Review] Speculative Decoding:介绍 speculative decoding 优化技术,利用较小的 draft model 预测下一个 K 个 token,实现最高 K 倍的加速。
- [Pending Review] Zero-Overhead Batch Scheduler:介绍零开销批处理调度器,解决传统推理系统中 CPU 调度和 GPU 计算串行执行导致的 GPU Bubble 问题。
- [Pending Review] Data Parallelism Attention:详细介绍 DP Attention 的原理与实现,针对 DeepSeek 等使用 MLA 且只有一个 KV head 的模型,避免 tensor parallelism 导致的 KV cache 重复。
- 浅析 SGLang 框架的量化设计与思路:同样刊载于知乎:浅析 SGLang 框架的量化设计与思路还有英文版本。
- Constraint Decoding 的概念、方法与优化:同样刊载于知乎:一文理解 Constraint Decoding 的概念、方法与优化。
- [Pending Review] Online Update Weights:介绍 SGLang 中
online_update_weights接口的实现,区别于从磁盘读取权重的update_weights,该接口从训练 engine 中直接通过 nccl 广播新的权重。 - [Pending Review] SGLang Verl Engine 优化解析:解析 SGLang 中 verl engine 的优化,包括
update_weights_from_tensor等接口的实现。 - Latency Accelerate For Weight Updates
- [🔥相关调试] 通过 Torch Memory Snapshot 分析 VLM RL 训练中的显存泄露问题:分析 SGLang 的显存泄露问题,以及解决方案,同样刊载于知乎和英文版本。
- [Pending Review] Qwen3-Coder Usage:介绍如何在 SGLang 中使用 Qwen3-coder,包括 tool-parser 的使用。
- [Pending Review] NVIDIA Dynamo:介绍 NVIDIA Dynamo,一个为多节点分布式环境中的生成式 AI 和推理模型服务设计的高吞吐量低延迟推理框架。
- 查看 HuggingFace 模型结构
- SGLang 后端原文解析
- Reward / Embed Model Sever Engine 现状浅析
- 小白视角:vllm 迁移到 SGLang 的体验与收获
- 小白视角:利用 SGL 来 Serve Embedding Model
- 小白视角:利用 vllm serve 新的 Embedding Model
- Mooncake:将 P / D 分离进行到底
- prefill 和 decode 该分离到不同的卡上么?
- 基于 chunked prefill 理解 prefill 和 decode 的计算特性
- ModelServer:基于 SGLang 的前端分发系统
- [Pending Review] Transformer中的交叉注意力机制:介绍 Transformer 中的交叉注意力机制,允许解码器访问和使用编码器的相关信息,同样有英文版本。
- 一文理解 special tokens 和 chat template:同样记录于知乎 一文理解 special tokens 和 chat template。
- [Pending Review] 手搓 Tensor Parallelism:关于 Tensor Parallelism 的实现与实践。
- NCCL 与 NVIDIA TOPO:NCCL 的入门与 NVIDIA 显卡的检测,同样刊载于NCCL 与 NVIDIA TOPO。
- NCCL and SGLang:NCCL 在 SGLang 中的应用,其实和中文内容非常接近,但是额外刊载了一些并行策略的内容。我应该不会修缮完成这个笔记,而是单独写笔记来记录并行策略。
- PyTorch Distributed:
torch.distributed的通讯实践, GIL 和all_reduce的细节。这一部分同样刊载在 知乎:PyTorch 通讯实践。 - [原创][深度][PyTorch] DDP系列第一篇:入门教程:虽然我没学明白 DDP 的内容,我只是借此学习了下 GIL 和 ring all reduce,这一步刊载于 torch-distributed 的后记。
- nvidia-smi命令详解和一些高阶技巧介绍:主要是一些网络拓扑,在我本机的结果记录在 nccl 部分。
- How to use docker:如何使用 docker 来管理开发环境。请注意,为了共同塑造良好的科研环境,避免有人用 baseline "在我的机器上能跑"来恶心别人,学习 docker 对任何人都是必不可少的。同样我们也有英文版本和知乎。
- 配置清爽的开发环境:配置清爽的开发环境,同样刊载于知乎:配置清爽的开发环境。
- 在 CI 上编译 jupyter notebook 并部署为文档