NOTE
当前调度版本基于sglang tag 0.5.7
SGLang
请求优先级调度机制技术文档
文档概述
本文档系统性地分析了 SGLang (v0.5.7)
中请求优先级调度的实现机制,包括整体架构、配置参数、核心代码实现、以及当前机制的局限性。
一、整体概览
1.1 支持情况
SGLang
支持请求优先级调度,提供了灵活的调度策略和配置选项。
1.2 设计目标
延迟优化: 通过
FCFS、优先级调度等策略降低请求延迟
吞吐优化: 通过
LPM、批处理、缓存感知策略提升系统吞吐量
QoS 支持:
支持显式优先级调度,可抢占低优先级请求
公平性: 在优先级相同的情况下采用 FCFS
保证公平性
内存效率: 基于 RadixAttention
的前缀缓存,最大化内存利用率
1.3 调度层级
12345678910111213141516┌──────────────────────────────────────────────── ...
EAGLE Speculative
Decoding 参数与原理
本文对 EAGLE Speculative Decoding
的核心参数、指标与整体流程进行结构化说明,并结合关键代码位置解释其实现细节。
NOTE
EAGLE原始文档:https://docs.sglang.io/advanced_features/speculative_decoding.html#EAGLE-Decoding
To enable EAGLE speculative decoding the following parameters are
relevant:
speculative_draft_model_path: Specifies draft model.
This parameter is required.
speculative_num_steps: Depth of autoregressive
drafting. Increases speculation range ...
缓存长度必须是 64 的整数倍。如果分叉位置是 300,则缓存位置会回退到
。
如果 当前路径上从未发生分叉 → prefix = 最后一个 64 对齐点
如果 中途发生过分叉 → prefix = 分叉点的最后一个 64 对齐点
CONTENT = “1” * 256 + “2” * 256 # prefix 0
CONTENT = “1” * 256 + “3” * 256 # prefix 0
CONTENT = “1” * 256 + “4” * 256 # prefix 256
CONTENT = “1” * 256 + “2” * 256 + “5” * 256 # prefix 512
CONTENT = “1” * 256 + “4” * 256 + “5” * 256 # prefix 512
CONTENT = “1” * 256 + “3” * 256 + “5” * 256 # prefix 256
CONTENT = “1” * 256 + “3” * 256 # prefix 256
CONTENT = “1” * 256 + “3” * ...
初始化
123456789101112self.req_index_to_mamba_index_mapping: torch.Tensor = torch.zeros(
size, dtype=torch.int32, device=self.device
)
if enable_mamba_extra_buffer
self.req_index_to_mamba_ping_pong_track_buffer_mapping: torch.Tensor = (
torch.zeros(
(size, self.mamba_ping_pong_track_buffer_size), # size是max running request self.mamba_ping_pong_track_buffer_size默认是256
dtype=torch.int32,
device=self.device,
)
)
Qwen3Next Prefill C ...
Qwen3Next Linear
Attention Cache 粒度问题详解
问题现象
用户使用默认参数时,发现 cache 的粒度似乎不是固定的 64 tokens,而是以
chunk prefill size 为边界。
根本原因
1. 默认策略是 “no_buffer”
查看 server_args.py:767-770:
12345# Mamba scheduler strategy
if self.mamba_scheduler_strategy == "auto":
# TODO: when extra_buffer is more verified, we can set the default path based on
# [overlap, non-overlap]
self.mamba_scheduler_strategy = "no_buffer"
默认配置:
12mamba_scheduler_strategy: str = "auto" # 默认值
# 实际运行时会被设置为: "no_buffer"
2. 两 ...
Qwen3Next
Linear Attention Prefix Cache 实现深度分析
目录
核心概念
为什么Linear
Attention不能做到Token粒度缓存
Chunk粒度缓存机制
Radix
Cache的Tombstone机制
Prefix匹配流程
状态追踪(Tracking)机制
Copy-on-Write实现
缓存保存流程
完整示例
关键数据结构
1. 核心概念
1.1 Linear Attention的递归性质
Linear Attention (Gated Delta Net) 与标准 Attention
的根本区别在于其递归计算特性:
123456标准 Attention (Token级别并行):
Output[t] = f(Q[t], K[0:t], V[0:t]) # 每个token独立计算
Linear Attention (递归依赖):
H[t] = f(H[t-1], Q[t], K[t], V[t]) # 状态递归传递
Output[t] = g(H[t], Z[t]) # 基于状态 ...
支持新模型:
https://docs.vllm.ai/en/v0.6.3/models/adding_model.html#
https://docs.sglang.io/supported_models/support_new_models.html#how-to-support-a-new-language-model
多模态大语言模型推理原理与实现
基于 nano-sglang 框架的多模态模型处理机制
多模态模型概述
多模态模型的核心思想是将不同模态的数据映射到统一的语义空间,然后利用语言模型进行理解和生成:
123456789101112131415┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ 文本输入 │ ──→ │ Tokenizer │ ──→ │ Token Embed │
├─────────────┤ ├─────────────┤ ├──────────────┤
│ 图像输入 │ ──→ │ Vision Enc │ ...
NOTE
参考自文章:https://blog.speechmatics.com/cuda-timings
强烈推荐大家去阅读原文
GPU 算子性能测试优化点总结
优化点
核心原理
解决的问题
主机-设备同步 (Host-Device
Sync)
CUDA
核函数是异步执行的。CPU
只是把任务丢进队列就继续往下跑了。
避免只测到了“分发任务”的时间,而不是“执行任务”的时间。
CUDA Events
在 GPU 指令流中插入“时间戳”标记,由 GPU
硬件直接记录。
减少 CPU 侧 perf_counter
带来的系统调用开销和内核启动(Launch)干扰。
预热 (Warmup)
排除 JIT 编译、cudnn
算子自动选择(autotune)、显存重新分配和延迟加载等一次性开销。
避免初次运行的巨大延迟拉高平均值,使数据更符合稳定运行状态。
固定时钟频率 (Fixed
Clocks)
现代 GPU ...
AWQ算子实现
目标
AWQ算子本质上就是实现一个矩阵乘
输入 A: 正常的连续内存 [M, K]。
输入 B: 高度int4压缩。水平方向(N)打包了
bit,垂直方向(K)按 group_size 进行了分块量化。
输出 C: 正常的连续内存 [M, N]
如下图所示:
graph TD
subgraph Input_A [输入矩阵 A: 激活值]
A_data["形状: [M, K]<br/>类型: float16/bfloat16<br/>(连续内存排布)"]
end
subgraph Input_B [输入矩阵 B: 量化权重]
direction TB
subgraph B_Storage [存储结构]
QW["qweight<br/>[K, N/8]<br/>int32 (打包 8个 4-bit)"]
QZ["qzeros<br/>[K/G, N/8]<br/>i ...
NOTE
对一个推理框架来说,要推理一个量化后的模型,会需要知道几件事情:
怎么知道这是一个量化模型
怎么知道这个模型量化了哪些层
具体是怎么多态实现到量化上的
量化的算子计算实现是什么
后续的内容都是以llama2-7b-awq举例,其它模型或者量化方法本质上都是相似的
怎么知道这是一个量化模型
观察config.json可以看到里面有quantization的配置:
123456789101112131415161718192021222324252627282930313233343536LlamaConfig {
"architectures": [
"LlamaForCausalLM"
],
"attention_bias": false,
"attention_dropout": 0.0,
"bos_token_id": 1,
"dtype": "float16",
"eos_token_i ...










