NOTE
因为GPTQ是基于OBQ改进的,所以我们这里先讲OBQ算法
OBQ算法
OBQ (Optimal Brain Quantization) 是在大模型量化领域非常经典的一种
PTQ(训练后量化)方法。它的核心思想源自于神经网络剪枝领域的 OBS (Optimal
Brain Surgeon)。
OBQ
的底层哲学非常直观:当我们把某一个全精度权重压缩成低比特(引入了量化误差)时,我们可以通过调整同一层中其他尚未量化的权重,来“补偿”这个误差,从而使得最终输出的特征图(Feature
Map)尽可能保持不变。
我们从目标函数开始一步步推导。
第一步:定义目标函数与
Hessian 矩阵
在逐层量化(Layer-wise
Quantization)中,我们的目标是让量化后的权重矩阵
产生的输出,尽可能逼近原始权重矩阵 的输出。假设输入激活值为 ,目标函数为最小化输出的平方误差:
因为在线性层中,权重矩阵的不同行(对应不同的输出通 ...
拉格朗日乘数法
拉格朗日乘数法(Lagrange Multiplier
Method)是数学优化中处理等式约束极值问题的经典方法。它通过引入“拉格朗日乘子”,巧妙地将一个有约束的问题转化为无约束的问题。
1. 核心思想:几何上的“相切”
对于目标函数 和约束条件
:
直观理解:想象目标函数 的等高线。当你沿着约束曲线
运动时,如果你还能走向更高或更低的等高线,说明还没达到极值。
关键结论:极值点必然出现在目标函数等高线与约束曲线相切的地方。
数学表达:在切点处,两者的梯度向量(垂直于曲线的方向)是平行的。即:
这里的
就是拉格朗日乘子。
2. 计算步骤:四步走
假设要求
在约束
下的极值:
构造拉格朗日函数:
注:减号改加号也可以,不影响最终 的求解。
求偏导并置零: 对所有自变量 和乘子 分别求偏导,令其等于 0: 这一项即原约束
解方程组:算出所有的驻点 。
确定极值:将得到的驻点代入原函数 ,通过比较数值大小或结合实际背景判断最大值或最小值。
3. 经典示例
问题:求 在约束
下的最大值。
构造函数:
求导:
求解: ...
最新博主在系统学习量化,之前都是以工程实践为主,缺少系统性的学习,最近找了一篇量化综述,学习了一下,收获颇丰
refer to: “A Comprehensive Evaluation on Quantization Techniques for
Large Language Models” — arXiv:2507.17417
再结合工程经验,后面也会详细出AWQ,GPTQ,SmoothQuant等量化算法源码学习
量化基础
量化方法
每种量化方法都可以拆解为两步:
预量化变换——在量化前对数据进行预处理,使其更容易量化。这一步处理那些会主导量化范围的异常值。
量化误差缓解——在量化后补偿引入的误差。
SmoothQuant、AWQ、GPTQ、QuaRot、SpinQuant、FlatQuant
都是这两个基本模块的不同组合。
Methods
Pre-quantization Transformation
Quantization Error Mitigation
SmoothQuant
Scaling
RTN
Outlier Suppre ...
层级
包含的核心组件
查看命令示例
可变性 (Mutability)
物理机 (宿主机)
GPU 硬件、NVIDIA 显示驱动 (如
570.xx)
nvidia-smi (看 Driver
Version)
不可变。
容器内无法修改,只能由物理机升级
物理机 (宿主机)
驱动决定 CUDA API 上限 (如
12.8,最高支持nvcc 12.8)
nvidia-smi (看右上角 CUDA
Version)
不可变。
它是驱动的附属只读属性,是一块“天花板”,可以升级物理机驱动改变。
镜像 (Image)
CUDA Toolkit
(nvcc)、cuDNN
nvcc -V (在容器内执行)
镜像本身不可变
容器 (Container)
镜像的nvcc版本,torch版本,cuda-runtime版本
nvcc -V
pip show torch 等
动态可变
IMPORTANT
需要保证一条自下而上的兼容链条:
nvcc ...
SGLang Router PD
分离模式请求转发详解
本文档详细说明 SGLang Router 在 Prefill-Decode (PD)
分离模式下,如何将客户端请求转换并分发到 prefill 和 decode 服务器。
1. 总览
PD 模式下,Router 收到一个请求后会执行 双路分发 (dual
dispatch) :
将请求(附加 bootstrap 字段)同时发给 prefill
server 和 decode server
两者并发执行,prefill 完成 KV cache 预填充,decode 从 prefill 拉取
KV cache 后做增量解码
Router 只将 decode server
的响应返回给客户端,prefill 的响应仅用于合并
logprobs、prompt_tokens_details 等元信息
123Client --> Router ----+----> Prefill Server (做 prefill,存 KV cache)
|
...
DeepSeek-V3.2
部署最佳实践指南
1. 硬件环境
项目
规格
GPU
NVIDIA H200
部署拓扑
2P1D 离线分离部署
Prefill 实例
2 × 单机八卡(共 16 卡)
Decode 实例
2 机 16 卡(跨节点 TP=16)
总 GPU 数
4 台机器,32 张 H200
2. 环境变量配置
所有实例(Prefill 和 Decode)均需设置以下环境变量:
123456789export NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME=eth0
export NVSHMEM_IB_TRAFFIC_CLASS=98
export NVSHMEM_IB_GID_INDEX=3
export SGLANG_DP_ATTENTION_HANDSHAKE_PORT_DELTA=30
export SGLANG_DISAGGREGATION_WAITING_TIMEOUT=80
export SGLANG_DISAGGREGATION_BOOTSTRAP_TIMEOUT=80
export SGLA ...
SGLang
Mamba Radix Cache 深度解析:extra_buffer 模式的 Ping-Pong
缓冲机制
#14792 | e61dabf5e |
2025-12-14 | [Qwen3-next] support mamba radix cache for overlap
scheduler - 引入 extra_buffer 模式,支持 overlap
scheduler 和 Ping-Pong 缓冲机制 |
#15180 | 36fcf71ff | 2025-12-16 |
[Qwen3-next] Add PD disaggregation support for mamba with
extra_buffer - 为 extra_buffer 添加 Prefill-Decode
disaggregation 支持 |
相关配置参数
参数
默认值
说明
--mamba-scheduler-strategy
auto
调度策略:no_buffer、extra_buffer 或
auto(自动选择)
--mamba-trac ...
SGLang
Mamba Radix Cache 深度解析:no_buffer 模式下的状态管理
no_buffer第一次引入来源于commit a55cf5304 #11214
在这个commit中贴出了对应的实现文档:
https://docs.google.com/document/d/1ZYBsZaz58NIIFmlOuQXqKPruIjv1ZJIUUrIj-sZlT4U/edit?tab=t.0
说明文档
V0 uses LRU list for mamba cache/full attention for eviction like
SWARadixCache. It currently only inserts request mamba cache into radix
tree when do cache_finished_req / cache_unfinished_req.
It can be modified to Marconi or k steps later
cache_finished_req / cache_unfinished_r ...
SGLang Mamba Radix Cache
概述
背景
Qwen3-Next 等混合架构模型同时包含 Linear Attention (Mamba) 和 Softmax
Attention。对于 Linear Attention 的前缀匹配,需要缓存 SSM 状态和 Conv
状态。SGLang 实现了 Mamba Radix Cache 来支持这一功能。
相关 Commit 和 PR
PR
Commit
提交时间
描述
#11214
a55cf5304
2025-10-13
[Feature] Support mamba radix cache v0 - Mamba
Radix Cache 的初始实现,建立了基础的 no_buffer 模式
#14792
e61dabf5e
2025-12-14
[Qwen3-next] support mamba radix cache for overlap
scheduler - 引入 extra_buffer 模式,支持 overlap
scheduler 和 Ping-Pong 缓冲机制
...
SGLang Tool Call Parser
深度解析
为什么需要 Tool Call Parser?
在 LLM 应用开发中,工具调用(Function Calling / Tool
Calling)是一个核心能力。
然而,不同模型厂商训练的时候,工具调用的输出格式完全是各玩各的:
GLM 系列输出的是这种 XML 风格:
1234get_weather
city北京
date2024-06-27
(实际使用的是
<?>、<?>、<?>、<?>
这类特殊标签)
Qwen 系列用的是特殊 token 包 JSON:
1<tool_call>{"name": "get_weather", "arguments": {...}}
DeepSeek 直接输出 JSON:
1{"name": "get_weather", "arguments": {...}}
应用层需要适配多种格式 -
每接入一个新模型就要写一套解析逻辑
解决思路
核心思想:将模型特定的输出格式转换为统一的 OpenAI
兼容格式。
所以 --too ...









