模型介绍
中文整理DeepSeek-V4-Flash-0731-W4A16
INT4 (W4A16) 量化版本的 **DeepSeek-V4-Flash-0731** (283B params)。
将原始 FP4 experts + FP8 attention 混合精度模型转换为 vLLM 原生的 compressed-tensors 混合精度格式,可在 **无 FP4 硬件支持** 的 NVIDIA GPU(A100 / L40S / L20 / RTX 4090 等)上推理。
本仓库与原始 deepseek-ai/DeepSeek-V4-Flash-0731 模型**出自同一权重**,仅做格式与精度转换,未做任何微调或蒸馏。
为什么需要这个量化版本?
原始 DeepSeek-V4-Flash-0731 采用**混合精度**:
- *256 个 routed experts**:FP4 ( e2m1fn x2 打包为 int8,配 e8m0 per-block scale)
- *Attention (MLA) / shared experts / indexer**:FP8 ( e4m3 ,配 e8m0 per-block scale)
FP4 是 NVIDIA Blackwell 架构原生格式。**A100 / H100 / H20 等非 Blackwell GPU 不支持 FP4 tensor core**,无法直接运行原始权重。
本量化版本将 **experts 从 FP4 转为 INT4 (group size=32)**,保留 attention 为 FP8,使其能在 Hopper / Ampere 架构上通过 vLLM 加载推理。
硬件 原始模型 本 W4A16 版本
- ----- :--------: :------------:
Blackwell (B200) ✅ 原生 ✅
Hopper (H20/H100) ⚠️ FP8 部分 OK,experts 退化 ✅ **推荐**
Ampere (A100/L40S) ❌ 不支持 ⚠️ 需 vLLM 小补丁(见下文)
量化方案 (Quantization Scheme)
本模型采用 compressed-tensors 的 **mixed-precision** 格式,包含两个 config group:
group 0 — Attention (FP8 W8A8,保持原始精度)
项 值
- --- ----
targets re:.*attn\.(wq a\ wq b\ wkv\ wo a\ wo b\ fused wqa wkv)$
weights FP8 e4m3,block 结构 [128,128] ,symmetric
input activations FP8 dynamic,group size=128,symmetric
说明 **直接保留原始模型的 FP8 权重和 scale,未做重采样**
group 1 — Routed Experts (INT4 W4A16,FP4 转换)
项 值
- --- ----
targets re:.*experts\.\d+\.(w1\ w2\ w3\ gate proj\ up proj\ down proj\ gate up proj)$
weights INT4,group size=32,symmetric,BF16 scale
input activations 无(W4A16:激活在 BF16 计算)
说明 由原始 FP4 权重经**最优 scale 网格搜索**转换而来(见下文)
其余部分保持 BF16(不量化)
lm head 、 embed tokens 、所有 norm 、router gate 、 shared experts 、 compressor 、 indexer.weights proj 、hyper-connection 参数等**保持 BF16**(与原始非 FP4 部分一致)。
FP4 → INT4 转换算法(无损性分析)
这是本仓库的核心技术点。原始 experts 的 FP4 权重并非直接 round 到 INT4,而是经过两步:
第 1 步:FP4 反量化到 BF16 高精度参考
原始 FP4 ( e2m1fn x2 ) 每个元素是 4 bit 索引,通过查找表还原:
由于 FP4 每个权重值已是离散点,反量化到 BF16 **是精确无损的**(只是把离散值用 BF16 表示)。
第 2 步:BF16 → INT4,用 scale 网格搜索最小化 MSE
INT4 量化采用 group size=32(与 FP4 的 [128,128] block 对齐,32 是 FP4 一个 e8m0 scale 覆盖 128 元素时的细分子组),对称量化:
普通 INT4 量化固定用 r = 1.0 (scale = amax/7)。本转换**额外搜索 6 个 r 候选**,对每个 group 选取 MSE 最小的组合,显著降低量化误差。
理论无损性论证
来源 误差 是否可消除
- ----- ------ -----------
FP4 → BF16 反量化 0(精确) —
BF16 → INT4 量化误差 非零 ❌ 不可避免(信息论下界)
严格意义上,FP4 → INT4 不是数学无损的**,因为 INT4 的 16 个量化电平与 FP4 的 16 个电平**分布不同**:
FP4 电平(归一化后): {0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6} —— 非均匀,覆盖大动态范围
INT4 电平(归一化后): {0, ±1, ±2, ±3, ±4, ±5, ±6, ±7} × scale/7 —— 均匀
但通过**最优 scale 搜索 + group size=32 细粒度**,实际量化误差被压到极低。实测信噪比(SNR):
这对应约 **0.26% 的相对均方误差**(RMSE ≈ 5.1% 相对幅度),在 LLM 推理中通常**对最终输出无可感知影响**(见下方实测结果)。
为什么 group size=32?
原始 FP4 每个 e8m0 scale 覆盖 128 个连续权重(block size=[128,128] 的行方向)
INT4 用更小的 group(32)→ 每个 group 独立算 scale,动态范围更紧 → MSE 更低
32 同时是 128 的约数,与 FP4 block 结构天然对齐
更小的 group(如 16)误差更低,但 scale 存储开销增大,32 是质量/体积平衡点
实测质量与性能(2×H20 96GB)
质量(50 题简化评测,greedy decoding)
类别 原始 FP4+FP8 本 W4A16 差异
- ----- :-----------: :--------: :----:
数学 (10题) 100% 100% 0
代码 (10题) 100% 100% 0
常识 (10题) 100% 100% 0
逻辑 (10题) 100% 100% 0
指令遵循 (10题) 100% 100% 0
- *总计 (50题)** **100%** **100%** **0**
两个模型答错/答对的题**完全相同**,包括同一个 Unicode 下标表达的边缘 case。在 50 题评测集上 **INT4 量化零质量损失**。
注:50 题评测集偏简单,主要验证"没把模型搞坏"。如需更高置信度,建议跑 GSM8K / MMLU。
DSpark 投机解码接受率(num speculative tokens=7)
指标 原始 FP4+FP8 本 W4A16
- ----- :-----------: :--------:
整体 token 接受率 38.1% **41.7%** (+3.6pp)
每步平均接受 token 2.67 2.92
pos0(首个 spec)接受率 72.3% 72.7%
接受率不降反升,因为 DSpark 的 draft 与 main 用同一套权重,接受率取决于两者一致性而非绝对精度。
推理速度(DSpark ON)
配置 原始 FP4+FP8 本 W4A16
- ----- :-----------: :--------:
2×H20 21.7 tok/s 21.4 tok/s
H20 原生支持 FP4,INT4 在 Hopper 上无速度优势;**A100 上情况反转**(原始 FP4 跑不了,只有 W4A16 能跑)。
模型文件结构
总大小:**~166 GB**(原始 156 GB,略大因 shared/compressor/indexer 从 FP8 升级到 BF16)。
如何使用(vLLM)
环境要求
vLLM ≥ 0.26.0
torch ≥ 2.11(建议 cu130 build)
至少 **2×H20 96GB** 或 **4×A100 80GB**(TP=2 / TP=4)
Prompt 编码(重要)
DeepSeek-V4-Flash 使用**非标准的 chat template**,不能用 apply chat template 。本仓库附带官方的 encoding/ 目录,使用方法:
H20 / H100(推荐,开箱即用)
A100 / L40S / 其他 Ampere(需 vLLM 小补丁)
Ampere 架构不支持 FP8 tensor core。本模型的 attention 仍是 FP8,vLLM 的 deep gemm fp8 o proj 在 A100 上会失败。需要给 vLLM 打一个小补丁,把 o proj 的 FP8 einsum 换成 BF16 fallback 路径。
补丁位置: vllm/models/deepseek v4/nvidia/ops/o proj.py
注:在 H20 上也建议打此补丁(用 is not None 判断,对原生 FP8 模型行为无影响,但能让 compressed-tensors 格式的 FP8 attention 正常工作)。
完整的 A100 支持需要进一步把 attention 从 FP8 改为 BF16/INT16,这是后续工作。
命令行启动(vLLM OpenAI server)
复现量化(Conversion Script)
转换脚本见 convert v4.py (本仓库未附,核心逻辑如下,约 150 行):
完整流程:
- 加载原始 48 个分片
- 对每个 expert weight: FP4 → BF16 (无损) → INT4 g32 (网格搜索)
- Attention FP8 权重**原样保留**(只把 .scale 重命名为 compressed-tensors 期望的 .weight scale )
- shared experts / compressor / indexer:FP8 → BF16 反量化(vLLM 对这些模块不匹配 FP8 target)
- 重新分片为 34 个 ~5GB 的 safetensors,写入 config.json 的 quantization config
致谢
原始模型:deepseek-ai/DeepSeek-V4-Flash-0731
参考 canada-quant/DeepSeek-V4-Flash-W4A16-FP8-MTP 的 mixed-precision 配置结构
量化框架:compressed-tensors
推理引擎:vLLM
License
同原始模型,详见 DeepSeek License。
优先采用原作者提供的中文模型卡片;仅有英文说明时由闲社AI翻译整理。重要参数、许可证和商用范围请以原文为准。
你将获得什么
完整仓库方式包含该固定版本中的权重、配置、分词器及说明文件;指定版本方式只下载所选文件或整组分片。多模态模型的投影文件、配置等依赖,请按作者说明配齐。
完整仓库可能包含多个权重格式,因此需要的磁盘空间可能大于单一格式的模型大小。下载文件不等于完成模型部署。
使用前须知
运行模型需要的设备、工具与依赖,以原作者说明为准。
是否允许商用、修改和分发,请查看模型许可证。
闲社提供资料与镜像下载方法,不代表已运行模型或完成安全审计。下载的代码应先检查,再执行。
Problem with the information or download?
Sign in to submit feedback.
