SGLang模型加载过程笔记

文章目录

一、总体架构

1)架构图和线程关系

复制代码
主进程(一个 PID)
  ├── 对象:HTTP Server(FastAPI app)
  ├── 对象:TokenizerManager
  ├── 用 Engine 的启动逻辑 fork/spawn 出下面这些
  │
  ├── 子进程:Scheduler #1(里面有 ModelRunner,加载权重、跑前向)
  ├── 子进程:Scheduler #2   ← tp_size / pp_size 大了才会有多个
  ├── ...
  └── 子进程:DetokenizerManager(一个)

2)模型加载流程

  1. 当服务启动时,用户可以通过 python -m sglang.launch_server 启动服务。该命令调用 prepare_server_args 解析命令行参数,构造 ServerArgs,其中包括 model_path、tp_size、dtype 等配置。
  2. 随后,服务启动 Scheduler 子进程。Scheduler 初始化时创建 ModelConfig 和模型 worker;模型 worker 再创建 ModelRunner。ModelRunner 根据 ModelConfig 确定模型架构与相关配置,准备模型加载器,实例化模型并加载权重。
  3. 模型加载完成后,服务继续完成 DetokenizerManager、TokenizerManager 和 HTTP Server 的初始化,进入可接收请求的状态。

3)模拟启动过程

1.如果dp_size大于1

PP = 2

TP = 2

DP = 1

因此会创建:

复制代码
PP × TP = 2 × 2 = 4 个 Scheduler 进程

Scheduler(pp=0,tp=0)
Scheduler(pp=0,tp=1)
Scheduler(pp=1,tp=0)
Scheduler(pp=1,tp=1)

2.如果dp_size大于1

DP Controller 根据轮询、当前请求数或 Token 数,把每个请求交给负载较低的模型副本。

复制代码
客户端请求
    ↓
DP Controller
    ├── DP副本0:4个Scheduler(PP2 × TP2)
    ├── DP副本1:4个Scheduler(PP2 × TP2)
    └── DP副本N:4个Scheduler(PP2 × TP2)

执行流程就是

4)scheduler主循环

复制代码
接收请求
  ↓
更新 waiting / running 队列
  ↓
选择当前 Prefill 或 Decode Batch
  ↓
提交当前 Batch 到 GPU
  ↓
结果暂存 result_queue
  ↓
CPU 处理上一 Batch 的结果
  ↓
更新 Token、完成状态与 KV Cache
  ↓
进入下一轮
  • 具体ModelRunner流程

    复制代码
       -> _initialize_model
          -> get_model_architecture
          -> get_packed_modules_mapping
          -> get_quant_config
          -> model_class(config, quant_config, ...)
       -> _get_all_weights
       -> load_weights_and_postprocess
          -> model.load_weights
          -> quant_method.process_weights_after_loading

量化方法

相关推荐
小叶肥辉44 分钟前
LangChain链和LangGraph图的学习笔记【六】——提示语模板(3)——Few-Shot Prompting(少样本提示) 模板类
笔记·python·学习·langchain·prompt·aigc
znnnk1 小时前
【AI应用】Agent:AI 为什么需要“自主决策”?
ai·prompt·agent·workflow·ai应用·skill·mcp
星栈1 小时前
ADK-Rust 是什么?Rust 生态新一代 AI Agent 开发套件
后端·agent
志尊宝2 小时前
Vue3 零基础每日笔记(032):Suspense 与异步组件——懒加载与顶层 await 终极方案
前端·javascript·vue.js·笔记·html5
今儿敲了吗2 小时前
04英文文本关键词提取(TF-IDF)
笔记·python
志尊宝2 小时前
Vue3 零基础每日笔记(035):什么是 Composables——mixin 之死与逻辑复用新方案
笔记·vue·html·前端开发·软件开发
武子康2 小时前
小智首批设备怎样放量?从接入名单到故障后的恢复决定
人工智能·llm·agent
桃西西呀2 小时前
邮件自动分类 Agent:分类即建模,动作即风险
人工智能·llm·agent
动词ing2 小时前
【学习笔记】数据结构 二分查找(二分查找模板+边界处理+查找区间+旋转数组)
笔记·学习