SGLang Diffusion Code Walk Through 本文旨在为开发者提供一份 SGLang Diffusion ( ) 后端的代码导读。 扩散模型 SGLang-Diffusion 支持 diffusion 的高效推理。diffusion models 是最近几年发展最快的,也是最流行的图像和视频的生成框架。 总的来说,diffusion models 定义了一个前向过程:数据 -> 高斯噪声,从这个前向过程可以推导出逆向过程:噪声 -> 数据,也即从噪声中重建样本。利用训练好的模型执行这个逆向过程就是 SGLang-Diffusion 需要做的事情。 作为代码导读教程,这里不会介绍复杂的数学公式和原理。
本文旨在为开发者提供一份 SGLang Diffusion (multimodal_gen) 后端的代码导读。
SGLang-Diffusion 支持 diffusion 的高效推理。diffusion models 是最近几年发展最快的,也是最流行的图像和视频的生成框架。
总的来说,diffusion models 定义了一个前向过程:数据 -> 高斯噪声,从这个前向过程可以推导出逆向过程:噪声 -> 数据,也即从噪声中重建样本。利用训练好的模型执行这个逆向过程就是 SGLang-Diffusion 需要做的事情。
作为代码导读教程,这里不会介绍复杂的数学公式和原理。这里依据模型建模逆向过程的方式,大致把 diffusion models 分为三类:
这三种建模方式,以不同的角度理解逆向过程,但在推理框架内的呈现方式都类似。它们主要区别于 denoise 阶段,都主要由以下组件负责:
runtime/models/dits/ 目录下runtime/models/schedulers/ 目录下runtime/models/schedulers/ 目录下的 Scheduler 类内部,通过 Scheduler 的 step 方法实现SGLang Diffusion 的设计尽量和 SGLang 保持一致,方便开发者理解和熟悉各种概念。在 SGLang Diffusion 中,请求的生命周期大致如下:
Scheduler 和 GPUWorker。GPUWorker 初始化时会构建 ComposedPipeline 对象,其中会涉及 Pipeline Components 的加载DiffusionGenerator 或 HTTP API)发送至 Scheduler。Scheduler 通过 ZeroMQ 接收请求,并将其广播 (Broadcast) 给所有 Rank。所有 Rank 上的 Scheduler 收到请求后,调用本地 GPUWorker 执行任务。GPUWorker 调用 ComposedPipeline 的 forward 方法。Pipeline 内部通过 PipelineExecutor(默认使用 SyncExecutor 的实现)按顺序调度各个 PipelineStage。Scheduler 收集生成的 tensor 数据(Pixel Values),并返回给客户端。DiffusionGenerator)接收 tensor 数据,进行后处理(如格式转换、保存文件),最终得到图像/视频。
[!NOTE]
- 本代码导读基于 SGLang-diffusion 版本 (
35a9a073706e89a2f5740f578bbb080146cd48bf)- 本代码导读灵感来源于 SGLang Code Walk Through