My learning notes/codes for ML SYS.
一直以来对 ML + SYS 很感兴趣,苦于本科没有学好 ML,更没学好 SYS,但是读博了觉得自己应该可以在这方面试一试。
有如此打算,一来是我发觉组里大多同学做的是 ML Theory + Application,但是真的把一个 Theory 落到一个良好的 Application 上都有一定阻碍。譬如组里之前发的两篇工作 SPIN 和 SPPO,都有很好的影响力,但是工程实现不尽理想。虽然这并不妨碍工作的价值,但是如果在工程/系统上优化好,想来可以有更好的影响力。
此外,博士入学前的暑假,我和组里同学做了一个 In-context Learning for Agent 的工作 COPS,比较符合我的审美。我们就两个人主力干活,一个大哥推理论,而我负责在工程/系统上实现。这种工作模式让我的体感非常舒适,基于此,我甚至得出一个粗糙的结论:
这就是我想做 ML + SYS 的初衷了。所以从 2024 年的夏季开始,我开始慢慢上手 ML + SYS 这个尚且方兴未艾的领域。需要学习的实在太多了,有的在一些平台(譬如知乎和 HuggingFace Blog)上已经有了很好的资料,但是其他部分仍有所欠缺。所以,这个 repo 主要记载了我自己的一些学习笔记/读后感/思索 etc
目前我个人完成的部分,按照时间倒叙有:
刊载于 GitHub
其实也连载于知乎,但是知乎的 markdown 支持太糟糕了,所以建议直接切原片,看 GitHub Repo。
-
SGLang Code Walk Through:一个请求被 SGLang Engine 处理的全过程,只有英文版本,工程量太大了,还在施工中。
-
Latency optimization for weight updates:一次对效率的 debug 过程,同样刊载于记一次对 SGLang weight update latency 的优化。
-
Walk Through SGLang / VLLM Worker:SGLang 的代码解析,同样刊载于 Walk Through SGLang / VLLM Worker,这次我们还贴心提供了英文版本。
-
NCCL 与 NVIDIA TOPO:NCCL 的入门与 NVIDIA 显卡的检测,同样刊载于NCCL 与 NVIDIA TOPO。
-
PyTorch Distributed:
torch.distributed
的通讯实践, GIL 和all_reduce
的细节。这一部分同样刊载在 知乎:PyTorch 通讯实践。
刊载于知乎
- Give me BF16 or Give Me Death,当下量化方法的全面评测
- 浅析主流 Alignment 算法与 NeMo-Aligner 框架
- Reward / Embed Model Sever Engine 现状浅析
- 在 CI 上编译 jupyter notebook 并部署为文档
- Mooncake:将 P / D 分离进行到底
- prefill 和 decode 该分离到不同的卡上么?
- AWQ:模型量化应当关注激活值
- 基于 chunked prefill 理解 prefill 和 decode 的计算特性
- ModelServer:基于 SGLang 的前端分发系统
- SGLang 后端原文解析
- 小白视角:利用 vllm serve 新的 Embedding Model
- 小白视角:利用 SGL 来 Serve Embedding Model
- 小白视角:vllm 迁移到 SGLang 的体验与收获
如前文所述,其实大量的材料在知乎等等平台都是有的。他山之石,可以攻玉,懒惰是人类进步的阶梯。 我也将自己学习过其他同行的优秀博文记录在下:
- [原创][深度][PyTorch] DDP系列第一篇:入门教程:虽然我没学明白 DDP 的内容,我只是借此学习了下 GIL 和 ring all reduce,这一步刊载于 torch-distributed 的后记。
- nvidia-smi命令详解和一些高阶技巧介绍:主要是一些网络拓扑,在我本机的结果记录在 nccl 部分。