BitCPM4-CANN-8B-未量化
BitCPM4-CANN-8B-unquantized
OpenBMB 发布 BitCPM4-CANN-8B-unquantized 模型,该模型是 BitCPM4-CANN-8B 的未量化 QAT 训练检查点,存储了伪量化器融合前的原始 QAT 参数。模型前向传播中嵌入三元伪量化器,将权重映射到 {-1, 0, 1} 并带有分组缩放,仅用于微调而非直接推理。用户可使用 DeepSpeed 或 LLaMA Factory 等框架进行微调,之后通过 qat-convert.py 脚本转换为推理可用的伪量化格式。该模型基于 Apache-2.0 许可证发布。
简介
BitCPM4-CANN-8B-unquantized 是 BitCPM4-CANN-8B 模型的未量化 QAT 训练检查点。该模型存储了在伪量化器融合(fake-quantizer fusion)之前的原始量化感知训练(QAT)参数——三元伪量化器(ternary fake quantizer)定义在 modeling.py 中,并在前向传播过程中应用。
⚠️ 此模型不适用于直接推理。 它被设计为微调 BitCPM4-CANN 的起点。如果您需要用于推理的模型,请使用伪量化版本:openbmb/BitCPM4-CANN-8B。
关键特性
- 🎯 目的:仅用于微调。模型权重是未融合的 QAT 参数,伪量化器嵌入在
modeling.py的前向逻辑中。 - 🔬 三元伪量化器:
modeling.py中的前向传播包含三元量化逻辑(将权重映射到 {-1, 0, 1} 并带有分组缩放),确保模型在微调期间持续在三元约束下学习。 - 🔄 训练后转换:微调后,可以使用提供的
qat-convert.py脚本将模型转换为伪量化格式。
BitCPM4-CANN 模型系列
| 模型 | HuggingFace(推理) | HuggingFace(微调) |
|---|---|---|
| BitCPM4-CANN-0.5B | openbmb/BitCPM4-CANN-0.5B | openbmb/BitCPM4-CANN-0.5B-unquantized |
| BitCPM4-CANN-1B | openbmb/BitCPM4-CANN-1B | openbmb/BitCPM4-CANN-1B-unquantized |
| BitCPM4-CANN-3B | openbmb/BitCPM4-CANN-3B | openbmb/BitCPM4-CANN-3B-unquantized |
| BitCPM4-CANN-8B | openbmb/BitCPM4-CANN-8B | openbmb/BitCPM4-CANN-8B-unquantized |
使用方法
微调
此模型设计用于支持自定义建模代码的框架进行微调。关键要求是前向传播必须经过此模型附带的 modeling.py 文件,该文件包含三元伪量化器逻辑。这确保了模型参数在整个微调过程中与三元量化约束保持兼容。
支持的微调框架
- DeepSpeed(推荐):参见 MiniCPM 微调指南
- LLaMA Factory:支持使用
trust_remote_code=True加载自定义模型 - 其他框架:任何支持使用自定义建模代码加载 HuggingFace 兼容模型的框架
重要:确保伪量化器处于激活状态
微调时,您必须确保:
- 使用
trust_remote_code=True加载模型,以便使用包含三元量化器的自定义modeling.py。 - 训练期间的前向传播经过
modeling.py中定义的三元量化器——不要替换或绕过模型的前向逻辑。
from transformers import AutoModelForCausalLM, AutoTokenizer
path = 'openbmb/BitCPM4-CANN-8B-unquantized'
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
path,
torch_dtype=torch.bfloat16,
trust_remote_code=True
)
# 继续进行您的微调流程(DeepSpeed、LLaMA Factory 等)
# modeling.py 中的三元伪量化器将在前向传播期间自动应用。
微调后转换
微调完成后,使用 qat-convert.py 脚本融合伪量化器,生成可用于推理的伪量化模型权重:
python qat-convert.py \
--input_bin <path-to-finetuned-pytorch.bin> \
--output <path-to-output-pseudo-quantized-pytorch.bin> \
--quant_type ternary \
--group_size -1
转换后的模型可以像 openbmb/BitCPM4-CANN-0.5B 一样加载用于推理——无需特殊的量化库。
工作流程总结
┌─────────────────────────────────┐
│ BitCPM4-CANN-8B-unquantized │ ← 此模型(QAT 参数 + modeling.py 中的伪量化器)
└───────────────┬─────────────────┘
│
▼ 微调(DeepSpeed / LLaMA Factory / ...)
┌─────────────────────────────────┐
│ 微调后的 pytorch.bin │ ← 仍包含未融合的 QAT 参数
└───────────────┬─────────────────┘
│
▼ python qat-convert.py --quant_type ternary --group_size -1
┌─────────────────────────────────┐
│ 伪量化后的 pytorch.bin │ ← 可用于推理(与 BitCPM4-CANN-0.5B 格式相同)
└─────────────────────────────────┘
技术背景
BitCPM4-CANN 使用三元量化器,将每个权重组映射到由分组因子缩放的 {-1, 0, 1},并通过 Straight-Through Estimator(STE)进行梯度流动训练。未量化的检查点保留了全精度潜在权重以及量化器参数,使模型能够在微调期间继续在量化约束下学习。
有关完整的技术细节,请参阅我们的技术报告。
声明
- 作为语言模型,BitCPM4-CANN 通过从大量文本中学习来生成内容。
- 然而,它不具备理解或表达个人观点或价值判断的能力。
- BitCPM4-CANN 生成的任何内容均不代表模型开发者的观点或立场。
- 因此,在使用 BitCPM4-CANN 生成的内容时,用户应自行承担评估和验证的全部责任。
许可证
- 本仓库和 BitCPM4-CANN 模型根据 Apache-2.0 许可证发布。
引用
- 如果您认为我们的工作有价值,请引用我们的技术报告。
@article{bitcpm4cann,
title={{BitCPM-CANN}: Native 1.58-Bit Large Language Model Training on Ascend NPU},
author={BitCPM Team},
year={2026}
}