OpenBMB 开源社区/BitCPM4-CANN-3B-unquantized
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

GitHub 仓库 | 技术报告

👋 加入我们的 Discord 和 微信交流群

简介

BitCPM4-CANN-3B-unquantized 是 BitCPM4-CANN-3B 模型的未量化 QAT 训练 checkpoint。该模型存储的是假量化器融合之前的原始量化感知训练(QAT)参数——三元假量化器定义在 modeling.py 中,并在正向传播过程中应用。

⚠️ 本模型不适合直接用于推理。 它设计为 BitCPM4-CANN 微调的起点。如果您需要用于推理的模型,请使用伪量化版本:openbmb/BitCPM4-CANN-0.5B。

主要特点

  • 🎯 用途:仅用于微调。模型权重是未融合的 QAT 参数,假量化器嵌入在 modeling.py 的正向逻辑中。
  • 🔬 三元假量化器:modeling.py 中的正向传播包含三元量化逻辑(将权重映射到 {-1, 0, 1} 并进行分组缩放),确保模型在微调过程中继续在三元约束下学习。
  • 🔄 训练后转换:微调完成后,可使用提供的 qat-convert.py 脚本将模型转换为伪量化格式。

BitCPM4-CANN 模型家族

模型HuggingFace(推理)HuggingFace(微调)
BitCPM4-CANN-0.5Bopenbmb/BitCPM4-CANN-0.5Bopenbmb/BitCPM4-CANN-0.5B-unquantized
BitCPM4-CANN-1Bopenbmb/BitCPM4-CANN-1Bopenbmb/BitCPM4-CANN-1B-unquantized
BitCPM4-CANN-3Bopenbmb/BitCPM4-CANN-3Bopenbmb/BitCPM4-CANN-3B-unquantized
BitCPM4-CANN-8Bopenbmb/BitCPM4-CANN-8Bopenbmb/BitCPM4-CANN-8B-unquantized

使用方法

微调

该模型适用于支持自定义建模代码的框架进行微调。关键要求是前向传播必须通过随模型一同提供的modeling.py文件,该文件包含三元伪量化器逻辑。这可确保在整个微调过程中,模型参数始终符合三元量化约束。

支持的微调框架

  • DeepSpeed(推荐):参见 MiniCPM 微调指南
  • LLaMA Factory:支持通过 trust_remote_code=True 加载自定义模型
  • 其他框架:任何支持使用自定义建模代码加载与 HuggingFace 兼容模型的框架

重要提示:确保伪量化器处于激活状态

微调时,必须确保:

  1. 使用 trust_remote_code=True 加载模型,以便使用包含三元量化器的自定义 modeling.py。
  2. 训练期间的前向传播通过 modeling.py 中定义的三元量化器进行——不要替换或绕过模型的前向逻辑。
from transformers import AutoModelForCausalLM, AutoTokenizer

path = 'openbmb/BitCPM4-CANN-3B-unquantized'
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True
)

# Proceed with your fine-tuning pipeline (DeepSpeed, LLaMA Factory, etc.)
# The ternary fake quantizer in modeling.py will be applied automatically during forward pass.

微调后转换

微调完成后,使用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-3B 相同的方式加载以进行推理,无需特殊的量化库。

工作流程摘要

┌─────────────────────────────────┐
│  BitCPM4-CANN-3B-unquantized  │   ← This model (QAT parameters + fake quantizer in modeling.py)
└───────────────┬─────────────────┘
                │
                ▼  Fine-tune (DeepSpeed / LLaMA Factory / ...)
┌─────────────────────────────────┐
│   Fine-tuned pytorch.bin         │   ← Still contains un-fused QAT parameters
└───────────────┬─────────────────┘
                │
                ▼  python qat-convert.py --quant_type ternary --group_size -1
┌─────────────────────────────────┐
│  Pseudo-quantized pytorch.bin    │   ← Ready for inference (same format as BitCPM4-CANN-0.5B)
└─────────────────────────────────┘

技术背景

BitCPM4-CANN 采用三元量化器,通过逐组缩放因子将每个权重组映射到 {-1, 0, 1},并使用直通估计器(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}
}