当权重只剩 2~4 bit,真正稀缺的不只是比特数,而是每一个量化等级应该放在哪里。CubicQuant 的思路是:继续保留规整、可打包的整数码流,但允许每个权重组用一条单调三次曲线重新安排内部量化等级。基于这一技术,QuantTrio 发布了 Kimi-K3-Cubic-2.5Bit,这是 Cubic 量化的首个公开大模型实践。

  • 模型地址:QuantTrio/Kimi-K3-Cubic-2.5Bit
  • 技术报告:CubicQuant: Parametric Non-Uniform Codebooks for High-Throughput LLM Inference with 1-8-Bit Weights
  • 推理运行时:QuantTrio/vllm-cubic


先看结论:这次发布了什么?

Kimi-K3-Cubic-2.5Bit 基于 2.8T 参数的 Kimi K3,将路由专家权重按层混合量化为 Cubic W2、W3 和 W4,并保留注意力、共享专家、视觉模块等关键部分的源精度。

按模型附带的量化审计报告计算,这些被转换的专家张量平均 payload 为 2.3696 bit,计入每组的 scale 和两个曲线参数后,有效位宽为 2.4986 bit。模型文件共 341 个 Safetensors 分片,约 899 GiB

模型卡披露的参考部署配置为一台 8 × NVIDIA H200 141GB 节点,采用 TP8 + EP。在指定的短提示、长输出解码测试中:

  • 单请求短上下文解码约为 57 output tokens/s;
  • 64 路并发聚合解码约为 800~900+ output tokens/s;
  • 未使用 dSpark 或其他推测解码;
  • 搭配运行时的 fp8_q16 KV Cache 时,有效最大上下文长度约为 728,640 tokens。

这些数字是模型卡给出的特定硬件、启动参数和解码窗口观测值,不是跨硬件的普适结论,也不是包含预填充和排队时间的端到端吞吐保证。

 

还有一条同样重要的边界:2.5Bit 指路由专家量化张量的有效位宽,不代表整个 2.8T 模型的所有权重都被压到 2.5 bit。


为什么低比特量化需要一种新的“网格”?

标量量化可以理解为:用有限数量的重建值,去近似连续分布的原始权重。比特越少,可用等级越少,“把等级放在哪里”就越重要。

 

常见方案各有侧重:

方案 量化等级如何产生 优点 低比特下的主要约束
均匀整数 INT 等间距线性网格 打包规整、解码简单、易于执行 每组只能缩放网格,不能改变内部等级分布
低比特浮点 固定指数-尾数结构 动态范围更灵活 等级分布由格式预先决定,未必匹配每个权重组
学习型自由码本 直接学习多个重建值 表达能力强 查表、元数据和内核实现更复杂
CubicQuant 用少量参数生成非均匀等级 兼顾局部适应与规整码流 需要额外曲线参数和融合解码内核


大模型权重往往在零附近更密集,同时又存在较长尾部。均匀网格只能整体放大或缩小:步长太大,会浪费零附近的精度;步长太小,又容易裁掉尾部。

 

CubicQuant 的核心目标,就是在“固定网格”和“自由码本”之间寻找中间点:

编码仍然是连续、致密的低比特整数;但整数所代表的重建值,不再必须等间距。


CubicQuant 核心:把直线网格“掰弯”

对于大于 1 bit 的权重格式,设 payload 位宽为 B,正侧最大整数码为:

整数码 k 的归一化幅值坐标为:

CubicQuant 用一条归一化三次曲线,把均匀的整数坐标映射为非均匀重建等级:

最终重建权重为:

其中:

  • s 是该权重组的 FP32 scale,决定正负端点;
  • a、b 是两个 FP16 形状参数,决定内部等级如何重新分布;
  • 三次项系数 c=1-a-b 由前两者推导,不需要额外存储。

 

这个形式刻意保留了三个重要性质:

  1. 精确零点:前面的 t 保证 q(0)=0;
  2. 精确端点:c=1-a-b 保证 q(1)=1,最大正负码始终对应 ± s;
  3. 等级有序:候选参数必须满足 q'(t)>0,避免量化等级交叉或反转。当 a=1,b=0 时:

也就是说,对称均匀整数本身就是 CubicQuant 的一个精确特例。拟合时只要始终保留这个候选点,在参数序列化前,最优 Cubic 解在同一目标下就不会比对应的最优裁剪 INT 解更差。

 

直观地说,CubicQuant 并不移动零点和最大幅值,只“弯曲”中间的等级。对于高斯或拉普拉斯型分布,曲线可以把更多等级挪到零附近,同时给尾部保留更远的端点。


为什么只用两个形状参数?

如果给每个组自由学习一整张码本,表达能力当然更强,但会带来更多元数据、查表和执行复杂度。CubicQuant 选择用 a、b 两个参数描述整条单调曲线,是一种有意识的约束:

  • 比均匀 INT 多出局部非均匀性;
  • 比自由码本少得多的元数据;
  • 码流仍是普通的 1~8 bit 标量整数,可连续打包;
  • 量化等级可以在 GPU tile 内快速生成或查表,而不必展开整张权重矩阵。

技术报告把这种关系写成一个清晰的误差边界:

左边是自由标量码本的 Lloyd-Max 下界,右边是最优裁剪均匀整数。CubicQuant 的问题不再是“能不能超过 INT”,而是“只用两个形状参数,能收回多少 INT 与自由码本之间的差距”。

 

在报告的总体分布分析中,W4~W8 CubicQuant 收回了高斯分布下 84.8%~96.1%、拉普拉斯分布下 91.4%~96.9% 的 INT-Lloyd-Max 误差差距。


存储开销是透明的:B+64/G bit

对每个包含 G 个权重的组,CubicQuant 存储:

  • G× B bit 的整数 payload;
  • 一个 FP32 scale:32 bit;
  • 两个 FP16 形状参数:32 bit。

因此元数据总计 64 bit/组,折算到每个权重:

Group Size 每权重元数据 W2 有效位宽 W3 有效位宽 W4 有效位宽
128 0.500 bit 2.500 bit 3.500 bit 4.500 bit
256 0.250 bit 2.250 bit 3.250 bit 4.250 bit
512 0.125 bit 2.125 bit 3.125 bit 4.125 bit

更大的组可以摊薄元数据和码本生成成本,但也让同一条曲线覆盖更宽的权重区域;更小的组适应性更强,却需要更多元数据。CubicQuant 没有把这个权衡藏在“平均 bit”里,而是用公式直接给出。

 

以 G512 为例,和两字节 BF16 权重相比,单个矩阵的理想常驻权重压缩比为:

格式 字节/权重(含元数据) BF16/Cubic 理想压缩比
W2 G512 0.265625 7.53×
W3 G512 0.390625 5.12×
W4 G512 0.515625 3.88×

这里是表示层面的比例,不等于内核加速比,更不等于完整模型文件会按同样比例缩小。完整模型还包含未量化张量、配置文件、索引和其他数据。


从曲线到量化器:数据无关的组内拟合

CubicQuant 把“格式”和“估计器”分开。格式只规定码流、scale、形状参数和解码函数;用什么数据、什么损失来选择它们,可以独立演进。

 

当前技术报告和 Kimi-K3-Cubic-2.5Bit 使用的是数据无关参考流程:

  1. 将静态权重切分为组;
  2. 对每个组搜索单调的 a,b 候选;
  3. 联合优化 scale 和软裁剪阈值;
  4. 将每个权重分配到最近的重建等级;
  5. 把 a,b 转为 FP16、scale 保留 FP32,再重新计算编码和误差。

 

整个导出过程不需要校准集,也不读取激活样本。模型卡同时公开了完整转换脚本 quantize_k3.py,参考环境中使用 8 × H200 和高速本地存储,转换约需 35~40 分钟。

 

数据无关不意味着格式只能做权重 MSE。未来完全可以把同一存储格式接入激活加权、协方差加权或近似 Hessian 目标;变化的是参数与码值的选择方式,不是 checkpoint 布局和运行时数值契约。


一份 checkpoint,同时服务 A16 与 Dynamic A8

CubicQuant 支持两种执行语义:

  • Model-dtype/A16:激活使用 FP16 或 BF16,内核消费连续 Cubic 重建值;
  • Dynamic A8:每个激活行在运行时动态量化为 INT8,权重等级也映射到确定的 INT8 carrier,再使用整数点积和 FP32 组级缩放。

如果只按连续曲线拟合,得到的等级在第二次投影到 INT8 网格后可能不再最优。为此,CubicQuant 显式定义权重侧 carrier:

并用联合目标同时考虑连续重建误差 LC 与 carrier 重建误差 LA8:

这不是推理时把两条路径混在一起平均,而是在离线拟合时让同一份权重兼顾两种运行方式。部署时,A16 只走连续路径,Dynamic A8 只走 carrier 路径。

 

Kimi-K3-Cubic-2.5Bit 的转换默认启用这项 A8 carrier 修正,因此同一 checkpoint 可以通过运行时开关在 A16 与 Dynamic A8 之间切换。


压缩权重必须“边解码、边计算”

Cubic 码并不是 Tensor Core 原生数据类型。如果先把整张低比特权重矩阵展开为 BF16 或 INT8,再送去矩阵乘法,就会把完整权重写回、再读出,抵消大部分带宽收益。

 

CubicQuant 采用 tile-local 的融合路径:

低比特码流 + 组级参数
          ↓
GPU tile 内解包并生成 Cubic 等级
          ↓
临时转换为 model dtype 或 INT8 carrier
          ↓
立即进入当前 tile 的点积
          ↓
FP32 组级缩放与累加 → 模型输出 dtype

临时展开的权重只存在于当前计算 tile,不会物化为一张完整的高精度矩阵。运行时同时提供窄行 GEMV、二维 dense kernel,以及部分场景的原生 CUDA/INT8 路径。

 

这也解释了为什么 A8 不是在所有形状上都更快:

  • 当 M=1、接近单 token 解码时,激活动态量化和整数路径启动成本很难摊薄,成熟的 A16 GEMV 通常更快;
  • 当行数增加,权重解码可以在更多激活行之间复用,A8 的固定成本被摊薄,整数主循环开始占优;
  • 临界点还会随位宽、组大小、矩阵形状、路由密度、GPU 架构和编译栈变化。

 

报告在 H200 上观察到的正是这种 workload-dependent crossover,而不是“A8 永远更快”。因此 vLLM Cubic 会针对设备和算子签名校准候选 kernel,选择窄行、dense、原生或通用路径。

 

Dynamic A8 仍然是算子局部模式,不是永久保持 INT8 激活的整图执行。报告还公开了一个负结果:把 INT8 激活 carrier 持久化到相邻 MLP 算子之间,额外的规约、同步、scale 生成和写回成本超过了省下的 BF16 流量,因此没有进入保留设计。


实验结果:先看表示能力,再看执行边界

1. 有限组重建误差

报告从 Uniform、Gaussian 和 Laplace 三种零均值分布中各抽取 15,360 个样本,以 G128 分组独立拟合。W4 的 NRMSE 如下:

分布 Cubic W4 最优裁剪 INT4 最佳枚举有限 FP4 相对 INT4 降低 相对 FP4 降低
Uniform 0.062979 0.065536 0.065536 3.90% 3.90%
Gaussian 0.092396 0.106803 0.102027 13.49% 9.44%
Laplace 0.106764 0.148571 0.113906 28.14% 6.27%

Uniform 的总体最优本来就是线性网格,有限组中出现的小幅收益来自每个实际样本组对理想分布的偏离。Gaussian 和 Laplace 在零附近更密集、尾部更长,非均匀等级的优势更明显。

这些数据证明的是标量重建能力,不是困惑度、推理能力或下游任务准确率。


2. H200 内核交叉点

技术报告在单张 H200 上测试了两个代表性大矩阵形状和 W2、W5、W8 三个位宽。结果显示:

  • M=1 时,A16 更快;
  • 到 M=16 后,部分位宽已经出现 A8 优势;
  • M=64 和 M=256 时,Dynamic A8 在所测形状中明显占优。

但这些只是 Hopper 上的隔离 kernel 证据。报告明确没有据此宣称跨 GPU 的普适加速,也没有把完整服务系统的变化全部归因于权重格式。


Kimi-K3-Cubic-2.5Bit 是怎样得到 2.4986 bit 的?

该模型没有给所有层使用同一种位宽,而是根据层位置采用混合策略:

范围 量化策略
Dense layer 0 BF16 源精度
MoE layers 1~3 路由专家 Cubic W3,G256
MoE layers 4~32 路由专家 Cubic W3,G512
MoE layers 33~91 路由专家 Cubic W2,G512
MoE layer 92 路由专家 Cubic W4,G512
Attention / KDA / MLA BF16 源精度
Shared experts 与普通 MLP BF16 源精度
视觉塔、多模态投影、Embedding、Norm、LM Head 源精度

92 个 MoE 层的平均 payload 为:(3×3+29×3+59×2+1×4)/(92) =2.3696 bit

 

其中 3 个 G256 层各增加 0.25 bit/weight 元数据,其余 89 个 G512 层各增加 0.125 bit/weight 元数据:

(3×0.25+89×0.125)/(92) =0.1291 bit

 

两者相加:2.3696+0.1291=2.4986 bit

 

这正是量化审计文件给出的 expert_effective_bits。它是对被转换专家张量的精确统计,而不是一个由模型文件大小反推的宣传数字。

 

审计结果还给出了各格式的组内重建 NRMSE 和裁剪比例:

格式 NRMSE 被裁剪权重比例
W2 G512 0.451251 12.2307%
W3 G256 0.179608 2.6971%
W3 G512 0.181007 2.9948%
W4 G512 0.043047 0.5635%

 

这里的 Loss 是按源权重能量归一化的组内重建 NRMSE,不是模型任务分数。W2 承担了主要压缩比,也带来了更高的重建损失和裁剪比例;前部和末端的部分专家层使用 W3/W4,是精度与存储之间的分层折中。


快速部署:使用 vLLM Cubic 运行时

模型数据约 899 GiB,参考部署已经验证的是 Linux x86-64、Python 3.12、CUDA 13.0、PyTorch 2.13.0、8 × H200、TP8 + EP。下载和部署前请先确认本地存储、显存、网络和运行环境。

 

从 ModelScope 模型页 下载 checkpoint 后,可安装模型卡指定的 vLLM Cubic 版本:

uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install \
 'https://github.com/QuantTrio/vllm-cubic/releases/download/v0.26.1%2Bcubic.20260805/vllm-0.26.1%2Bcubic.20260805-cp38-abi3-linux_x86_64.whl'

 

以下是启动参数骨架;生产部署请以模型卡中的完整命令和当前运行时说明为准:

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# 1:Dynamic A8;0:weight-only A16
export VLLM_CUBIC_DYNAMIC_A8=1
vllm serve /path/to/Kimi-K3-Cubic-2.5Bit \
  --served-model-name Kimi-K3-Cubic-2.5Bit \
  --trust-remote-code \
  --quantization cubic \
  --kv-cache-dtype fp8_q16 \
  --gpu-memory-utilization 0.985 \
  --tensor-parallel-size 8 \
  --enable-expert-parallel \
  --mm-encoder-tp-mode data \
  --max-model-len auto \
  --max-num-seqs 128 \
  --max-num-batched-tokens 2048 \
  --enable-prefix-caching \
  --enable-auto-tool-choice \
  --tool-call-parser kimi_k3 \
  --reasoning-parser kimi_k3 \
  --host 0.0.0.0 \
  --port 8000

首次启动可能需要数分钟编译 Triton kernel、校准当前 GPU 和矩阵形状的 Cubic kernel,并捕获 CUDA Graph。校准结果会保存在 Triton cache 中,兼容环境下的后续启动可以复用。

 

fp8_q16 是 vLLM Cubic 提供的可选 KV Cache 模式,并不是 Cubic 权重量化本身。若更重视 KV 精度,可以使用 --kv-cache-dtype auto 回到 BF16 KV Cache,但可用上下文长度会下降。


应该怎样理解这次发布?

CubicQuant 的价值不只是“又一种低比特格式”,而是把表示、拟合与执行拆成了三个清晰层次:

  1. 表示层:整数 payload 保持规整,两个参数负责局部非均匀性;
  2. 拟合层:当前可以数据无关拟合,未来也能接入激活或二阶信息;
  3. 执行层:同一 checkpoint 同时支持 A16 与 Dynamic A8,并依据形状和设备选择 kernel。

 

这套设计也给出了明确的未完成项:

  • 技术报告尚未给出完整的模型困惑度、推理、指令跟随、长上下文和多模态任务评测;
  • 有限组实验只覆盖一个 group size,未形成 W1~W8 的完整模型级扫描;
  • 物理性能证据目前以 H200 为主,不能直接外推到 Ampere、Ada 或 Blackwell;
  • 低重建误差不自动等于更高的下游质量;
  • 内核局部加速不自动等于端到端服务加速。

 

Kimi-K3-Cubic-2.5Bit 已经证明,CubicQuant 不只存在于公式里:它能以 1~8 bit 致密码流存储,能在 GPU tile 内直接重建并消费,也能承载一个 2.8T 级 MoE 模型的公开 checkpoint。

 

下一阶段更值得关注的问题,不再只是“能不能跑”,而是:在相同模型、并行拓扑、KV Cache、请求分布和硬件条件下,它能以多低的位宽守住多少模型能力,又能为真实服务带来多少容量与吞吐收益。


相关链接

  • ModelScope 模型:QuantTrio/Kimi-K3-Cubic-2.5Bit
  • CubicQuant 技术报告:arXiv:2608.06763
  • vLLM Cubic 运行时:QuantTrio/vllm-cubic
  • 指定运行时版本:v0.26.1+cubic.20260805
  • Kimi K3 基座模型:moonshotai/Kimi-K3

 

说明:本文中的格式定义、分布实验和 H200 隔离 kernel 结论来自 CubicQuant 技术报告;模型位宽、文件规模、量化策略、参考部署与吞吐数据来自 Kimi-K3-Cubic-2.5Bit 模型卡及其随附量化审计文件。所有性能数字都应结合对应硬件、软件版本、输入输出长度和并发设置理解。
Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐