Arganzheng's Blog

stay hungry, stay foolish

扩散模型推理基础设施:图像与视频生成的 serving(总纲)

Diffusion Model Inference Infrastructure: Serving Image and Video Generation

内容简介 《扩散模型推理基础设施:从一次去噪到一个生成服务》是一组共九篇的系列文章,面向已经理解 LLM 推理引擎(vLLM 一类:请求、调度、KV cache、批处理、多卡)的工程师,系统讲解图像与视频生成模型——Stable Diffusion 3、FLUX、Qwen-Image、Wan、HunyuanVideo 一类——的推理是怎样一种负载,以及围绕它建立起来的一套与 LLM serving 几乎不重叠的基础设施:一次生成的三段(文本编码、几十步去噪、VAE 解码)各花多少算力、显存与时间;单卡上 attention 后端、编译、量化、offload 各能换回多少;相邻去噪步之间的冗余怎样被缓存与跳步利用;视频的十万级 token 序列让 attention...

RL 后训练基础设施(09):系列总结与通关自测

RL Post-Training Infrastructure: Series Recap and Final Self-Test

八篇正文回答了一个问题:一个 RL(reinforcement learning)后训练任务同时是一个推理服务和一个训练任务,这两样东西怎样共享一组 GPU,而不让任何一方在等另一方。第一篇把一步 RL 拆成三个作业加两次同步、算清 FLOP(floating point operation) / 字节 / 秒三本账;第二篇把共置、分离、异步三种形态放在同一张账上比较;第三到第六篇各解决形态带来的一个问题——共置要切显存、任何形态都要同步权重、异步要补 off-policy 的修正、Agent 要调度环境;第七篇把每个机制落到 verl(Volcano Engine Reinforcement Learning for LLMs)的函数与进程上,第八篇把前七篇变成配...

RL 后训练基础设施(08):配置、可观测与排障——从一张卡的比例到一条 hang 的排查

Configuration, Observability and Troubleshooting for RL Post-Training Systems

凌晨两点,告警:reward 曲线从上升变成平台,步时间没变,日志里没有报错。这一步是训到第 400 步的 32B 推理模型 GRPO(Group Relative Policy Optimization),128 张卡,separate_async。可能的原因至少四个:staleness 涨了(回答变长、同步没跟上);训推不一致变大了(某个实例的 vLLM 在上一次弹性扩容后版本不同);某个沙箱池挂了、它上面的任务 reward 全是零;上一次权重同步漏了一部分参数(一个实例的 update_weights 超时,版本号却推进了)。它们在 reward 曲线上长得一样。十分钟内区分它们,靠的不是这十分钟里的机智,是开训前采集了哪些信号——这是本系列最后一篇的主题。...

RL 后训练基础设施(07):verl 源码导读——从一个 GRPO 配置追到每个 worker

Reading verl: From One GRPO Config to Every Worker

前六篇每讲一个机制都给了 verl(Volcano Engine Reinforcement Learning for LLMs)里的落点:一个目录、一个类、一个函数名。这一篇把落点串成线。线的起点是一条命令——python -m verl.trainer.main_ppo algorithm.adv_estimator=grpo trainer.nnodes=1 trainer.n_gpus_per_node=8 ...——终点是 8 张卡上各自的进程在做什么、一个训练步的数据怎样在它们之间流动、一个 bf16(bfloat16)参数从优化器更新完成到推理引擎用它生成下一个 token 经过哪些函数。追完这条线,前六篇的”账”与”机制”就都有了代码的锚点;再看 s...

RL 后训练基础设施(06):Agentic rollout——多轮、工具、沙箱与环境服务

Agentic Rollout: Multi-Turn Trajectories, Tools, Sandboxes and Environment Services

前五篇的 rollout 是一件事:推理引擎批量生成。Agent 训练里它变成了一个分布式系统:模型生成一段,解析出工具调用,某个容器里跑一次测试(几十秒),结果追加进上下文,再生成——重复二十轮;同一时刻几千条这样的轨迹在跑,每条占着一个有状态的沙箱;reward 不是一个规则函数,是”测试通过了几个”。500 个代码任务 × \(G = 8\) × 20 轮是 8 万次容器执行,每次 30 秒就是 670 个 CPU·小时——与模型侧这一步的十几个 GPU·小时按价格算是同一量级;要在 30 分钟内跑完,需要 1300 到 1800 个并发沙箱,取决于沙箱能否在两轮之间释放。 GPU 这一侧在这 30 分钟里做了什么,是这篇更想回答的问题。答案不太好看:dec...

RL 后训练基础设施(05):异步与 off-policy——把同步的墙拆掉之后要补什么

Asynchrony and Off-Policy: What You Owe After Tearing Down the Synchronization Wall

第二篇的结论是异步把长尾吞掉、把一步的墙钟从 12 分钟压到 5 分钟。代价写得很轻:”样本过期”。这一篇把这个代价展开——它其实是三个不同的东西,各有各的机制、各有各的信号,混在一起时 reward 曲线只会告诉你”变缓了”,不会告诉你为什么。 第一个是 staleness:训练用第 \(t\) 步的权重更新,样本由第 \(t - k\) 步的权重生成,重要性比 \(\pi_\theta / \pi_{old}\) 偏离 1,PPO(Proximal Policy Optimization)的 clip 开始大量触发;更隐蔽的是,过期程度与回答长度相关——长回答生成得慢、更容易过期——所以”丢弃过期样本”这个看似中性的策略会系统性地丢掉长回答,改变训练数据的长度...

RL 后训练基础设施(04):权重同步——从训练分片到推理分片

Weight Synchronization: From Training Shards to Inference Shards

每一步训练结束,优化器改完了参数,推理引擎里的那份权重就旧了。把新权重送过去听起来是一次拷贝——8B 模型 16 GB,NVLink 一秒、InfiniBand 几秒。但两边的权重不是同一个形状的东西:训练器里它是 FSDP(Fully Sharded Data Parallel)按第 0 维切成 64 份的 DTensor,或者 Megatron 的 TP(tensor parallelism) = 4 × PP = 2 × EP = 8 分片,QKV 三个矩阵融合成一个、专家堆叠成一个大张量、名字是 decoder.layers.3.self_attention.linear_qkv.weight;推理引擎里它是 vLLM 按 TP = 8 切的列、专家按 EP...

RL 后训练基础设施(03):共置——训练器与推理引擎在同一组 GPU 上共存

Colocation: Handing GPU Memory Back and Forth Between Trainer and Rollout Engine

一个 32B 的模型在 8 张 H100 上做共置的 GRPO(Group Relative Policy Optimization)。训练时每张卡上要有 66 GB 的训练状态(16 字节 / 参数均分到 8 卡)加 8 GB 的参考模型;生成时每张卡上要有 8 GB 的推理权重副本(TP(tensor parallelism) = 8)加尽量大的 KV(key-value)池。两样东西加起来 150 GB,卡只有 80 GB——所以每一步里显存要换两次主人:生成前训练状态搬到 CPU、推理引擎的权重与 KV 池挂回 GPU;训练前反过来。按 PCIe(Peripheral Component Interconnect Express)的带宽算,一步两次切换搬 1...

RL 后训练基础设施(02):系统形态——共置、分离与异步

RL System Topologies: Colocated, Disaggregated and Asynchronous

上一篇算出的三段时间——生成 602 秒(其中长尾 196 秒)、前向 72 秒、训练 136 秒——是在”64 张卡先全部做生成、再全部做训练”的前提下算的。这只是三种可能之一。同样 64 张卡,也可以 46 张只做生成、18 张只做训练,两边同时跑;还可以更进一步,让训练不等生成、生成不等训练,各自按自己的节奏走。三种安排下,一步的墙钟分别是 810 秒、约 750 秒、约 610 秒,全步 MFU(model FLOPs utilization)分别是 13%、14%、17%——差别看起来不大,但那是因为上一篇的长尾假设(\(L_{max} / \bar L = 4\))相当温和。把长尾放到推理模型训练里常见的程度,或者把 Agent 环境的等待加进来,第三种...

RL 后训练基础设施(01):负载画像——一步 RL 里发生什么

Anatomy of an RL Step: Rollout, Reward and Train

一个 8B 的策略模型做 GRPO(Group Relative Policy Optimization):512 个 prompt、每个采 16 条回答、回答平均 8K token。这一步要生成 6700 万个 token,参考模型与旧策略要再各过一遍 7100 万个 token 的前向,训练要对同样多的 token 做前向加反向。合计 6.8×10¹⁸ FLOP(floating point operation),其中训练占一半、生成只占六分之一。但在 64 张 H100 上,生成要 600 秒、训练 135 秒——按时间生成占四分之三。整步下来,64 张卡的算力只用到了 13%。 这几个数字是本系列后面七篇的全部起点。系统形态(共置 / 分离 / 异步)要解...

×