ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

W4A8 量化原理深度解析:Qwen3-1.7B-W4A8-V1 为什么选择 4bit 权重 8bit 激活(完整指南)

W4A8 量化原理深度解析:Qwen3-1.7B-W4A8-V1 为什么选择 4bit 权重 8bit 激活(完整指南)

【免费下载链接】Qwen3-1.7B-W4A8-V1

项目地址:https://ai.gitcode.com/hf_mirrors/vllm-ascend/Qwen3-1.7B-W4A8-V1
点击查看免费下载

Qwen3-1.7B-W4A8-V1 是一个面向昇腾 NPU 的 W4A8 量化模型:它以 Qwen3-1.7B 为基础,将权重(Weight)压缩到 4bit、激活(Activation)压缩到 8bit,在华为 Ascend 硬件上实现更快推理与更低显存压力。本文用尽量通俗的方式,带你搞懂 W4A8 量化到底在量化什么、为什么是"4+8"这个组合、以及如何配合 vLLM-Ascend 把它跑起来。

1 分钟看懂:什么是 W4A8 量化

大模型推理时,真正占内存、跑计算的是两类数据:

数据类型是什么类比
权重 W(Weight)模型训练得到的固定参数,推理全程只读菜谱本身,印一次用很多天
激活 A(Activation)每次前向传播实时产生的中间结果每道菜当下的火候,随输入变化

"W4A8"就是分别给它们定精度:

  • W4:权重用 4bit 整数存储,体积约为 BF16 的 1/4;
  • A8:激活用 8bit 整数参与矩阵乘法计算。

相比 BF16 权重 × BF16 激活的传统方式,W4A8 让 NPU 的矩阵乘法算子(本模型在 README.md 中使用 msmodelslim 的 HQQ 方法 + m6 抗量化方法生成)走硬件原生低比特路径,算得更快;同时权重搬运量大幅下降,解码吞吐更高。

💡 一句话记忆:W4 管"存得小",A8 管"算得快",Dynamic 管"准得稳"。

4bit 权重:2.5GB 权重的压缩账本

本模型的核心权重文件是 quant_model_weight_w4a8_dynamic.safetensors,大小约2.4 GB。作为对比,同样的 Qwen3-1.7B 用 BF16 存储约需 3.5 GB。

为什么没有压缩到理论极限?因为"省内存"和"保精度"之间要做工程取舍:

  1. group_size = 128(分组量化)权重不是一整张矩阵共享一个缩放系数,而是每 128 个权重为一组,组内共享一组 scale/offset。这就像把一整箱不同温度的饮料,按 128 瓶一小箱分区存放,各自的温度标签更贴近真实值。该参数可在 quant_model_description.json 中直接看到"group_size": 128。

  2. 低比特 2's-complement(is_lowbit)4bit 权重以二进制补码形式打包存储,NPU 硬件可直接解包做整数 GEMM,避免运行时反复做浮点转换。

  3. 只量化"值得量化"的模块观察 quant_model_description.json 可以清楚看到分层策略:

    • 量化为W4A8_DYNAMIC的:每层 Attention 的q_proj / k_proj / v_proj / o_proj,以及 MLP 的gate_proj / up_proj——这些是参数量最大、最适合压成整数的矩阵;
    • 保持FLOAT的:down_proj、input_layernorm、post_attention_layernorm、q_norm/k_norm以及embed_tokens——它们参数量小或对数值精度敏感,压了反而掉点。

这种"大矩阵狠压、小矩阵保留"的混合策略,是 W4A8 方案在精度与体积之间平衡的关键,也是本模型能在压缩后保持 Qwen3-1.7B 能力的核心原因。

8bit 激活:为什么是 8bit 而不是 4bit?

激活数据有个特点:数值分布随输入实时变化。如果激活也压到 4bit,动态范围太窄,长文本、代码生成等场景下误差会逐级放大。8bit 是精度与速度的"甜点":

  • 8bit 整数有 256 个量化档位,足以覆盖绝大多数激活分布;
  • 昇腾 NPU 对W4×A8 的整数 GEMM 有原生算子支持,不需要额外反量化开销;
  • 配合Dynamic(动态)量化:每个 token 的激活在推理时在线计算缩放系数,而不是提前定死。本模型model_quant_type即为W4A8_DYNAMIC(见 quant_model_description.json),所以不同输入、不同 token 都能拿到各自最合适的量化尺度,这就是文件名中dynamic的含义。

⚠️ 常见误解:W4A8 并不是"权重 4bit + 激活 8bit 存储"这么简单,而是**权重静态量化(训练后离线完成)+ 激活动态量化(推理时在线完成)**的组合拳。

模型本体:Qwen3-1.7B 的架构参数速览

量化不改变模型结构,以下来自 config.json 的关键参数,帮你建立对"1.7B"的直观认识:

参数值含义
hidden_size2048每个 token 的内部表示维度
num_hidden_layers28Transformer 层数
num_attention_heads/num_key_value_heads16 / 8GQA 注意力头,KV 缓存更小
vocab_size151936词表大小
max_position_embeddings40960最长上下文 40K
tie_word_embeddingstrue输入输出嵌入共享,省参数

推理时的采样默认值(temperature=0.6、top_k=20、top_p=0.95)定义在 generation_config.json 中。

如何用 vLLM-Ascend 部署这个 W4A8 量化模型

部署分两步:下载模型,再用--quantization ascend启动。README 中给出的推荐启动方式(见 README.md):

export VLLM_USE_MODELSCOPE=True vllm serve vllm-ascend/Qwen3-1.7B-W4A8-V1 \ --gpu-memory-utilization 0.96 \ --quantization ascend \ --max-model-len 9600

三个关键参数解释:

  • --quantization ascend:告诉 vLLM-Ascend 按昇腾低比特算子加载 W4A8 权重,不能省略,否则会按 BF16 路径报错;
  • --max-model-len 9600:按显存余量限定最大序列长度(模型本身支持 40960,这里按部署环境保守设置);
  • --gpu-memory-utilization 0.96:显存占用上限,给 KV Cache 留出空间。

如果你想自己复现量化流程(可选),README 还记录了完整的 msmodelslim 命令:--w_bit 4 --a_bit 8 --group_size 128 --is_dynamic True --w_method HQQ(见 README.md),与上文所有参数一一对应。

为什么是"4+8",而不是 W8A8 或 W4A4?

一张表总结各方案的取舍:

方案体积速度精度适用场景
BF16(未量化)最大基准最高精度敏感的离线任务
W4A8(本模型)约 1/4快(NPU 原生算子)接近 BF16NPU 在线推理,首选
W8A8约 1/2较快高显存紧张但不追求极致速度
W4A4最小依赖硬件支持下降明显极致压缩研究场景

选择 4bit 权重的本质原因:解码阶段是访存密集型——每生成一个 token 都要把权重从 HBM 搬进计算单元。权重减半一次搬运,吞吐就近似翻倍;而激活 8bit 则保证了计算精度下限。W4A8 正是在昇腾硬件"算子支持矩阵"上收益最大、损失最小的组合。

总结

  • W4A8 = 4bit 权重静态量化 + 8bit 激活动态量化,专为昇腾 NPU 整数 GEMM 算子设计;
  • group_size 128分组 + 敏感层(down_proj、LayerNorm 等)保留 FLOAT,是精度守门员;
  • 部署只需一条vllm serve命令,记得带上--quantization ascend;
  • 想核对每个张量的量化类型,直接打开 quant_model_description.json,它就是本模型的"量化地图"。

理解了这些,你再看任何带 WxAy 命名的模型卡片,都不会被术语绕晕了 🚀

【免费下载链接】Qwen3-1.7B-W4A8-V1

项目地址:https://ai.gitcode.com/hf_mirrors/vllm-ascend/Qwen3-1.7B-W4A8-V1
点击查看免费下载
上一篇:RIOT OS 全面解析:面向 IoT 的友好嵌入式操作系统(设计原则、特性体系与构建实战)
下一篇:OGRE角色动画系统详解:硬件与软件骨骼动画的完美结合

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进