本文档记录 ibm-granite/granite-4.1-3b 在华为昇腾 NPU(Ascend910B4)上的适配与验证结果。
Granite 4.1-3B 是 IBM 开源的稠密 Transformer 语言模型,架构为标准的 GraniteForCausalLM(transformers 原生支持),无自定义 CUDA 算子。适配策略采用轻量级脚本化迁移:通过 torch_npu + transfer_to_npu 自动完成 cuda → npu 映射,结合 accelerate 的 device_map 将模型加载至 NPU 显存。
模型关键配置:
GraniteForCausalLMbfloat16相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
CANN | 8.5.1 |
torch | 2.9.0 |
torch-npu | 2.9.0.post1+gitee7ba04 |
transformers | 4.57.6 |
accelerate | 0.20.0+ |
numpy | 1.26.4 |
1 逻辑卡(Ascend910B4)32GB HBMibm-granite/granite-4.1-3b(HuggingFace 缓存)Linux 5.10.0-60.18.0.50.aarch64运行前确保 CANN 环境已加载:
source /usr/local/Ascend/ascend-toolkit/set_env.sh已验证通过的运行命令:
export HF_ENDPOINT=https://hf-mirror.com
export ASCEND_RT_VISIBLE_DEVICES=0
cd /opt/atomgit/granite-4.1-3b-npu
python3 inference_npu.py \
--model ibm-granite/granite-4.1-3b \
--prompt "def fibonacci(n):" \
--max-new-tokens 64 \
--device npu启动脚本关键特性:
torch_npu + transfer_to_npu,完成 CUDA→NPU 自动映射device_map="npu" 将模型权重自动分配至 NPUdtype=torch.bfloat16,Ascend910B4 原生支持 bf16,无需精度转换trust_remote_code=False,标准 transformers 架构,无需自定义代码基础检查(NPU 可用性与设备信息):
python3 -c "import torch; import torch_npu; print(torch.npu.is_available()); print(torch.npu.get_device_properties(0))"验证结果:
torch.npu.is_available() 返回 Truenpu:0model.generate() 返回 200(正常输出)验证现象示例:
NPU available: True, device count: 1
NPU:0 name=Ascend910B4, mem=32.0GB
Loading model from: ibm-granite/granite-4.1-3b
Using dtype: torch.bfloat16
Model loaded in 271.0s
Model device: npu:0
Prompt: 'def fibonacci(n):'
Generated 64 tokens in 5.76s (11.1 tok/s)测试条件:单卡 Ascend910B4,bfloat16,batch_size=1,greedy / sample 生成。
| 指标 | 数值 |
|---|---|
model_load_time | ~271 s |
dtype | bfloat16 |
max_new_tokens | 64 |
generate_time | 5.76 s |
tokens_generated | 64 |
throughput | ~11.1 tok/s |
device | npu:0 |
memory_usage | ~6 GB(模型权重) |
Granite 4.1-3B 原生权重为 bfloat16,Ascend910B 系列 NPU 对 bf16 有原生硬件支持,因此:
注:当前验证聚焦于推理通路与基础功能,未执行大规模评测集(如 HumanEval、MMLU)的精度对标。如需严格精度评测,建议使用 lm-evaluation-harness 或 EvalScope 在 NPU 与 CUDA 环境下进行对比。
设备可见性
ASCEND_RT_VISIBLE_DEVICES=1,否则会导致 NPU is not available 错误。依赖安装
device_map 功能依赖 accelerate 库,若未安装会报错:ValueError: Using a device_map requires accelerate。pip install accelerate -i https://repo.huaweicloud.com/repository/pypi/simple/网络与下载
export HF_ENDPOINT=https://hf-mirror.com自动迁移限制
transfer_to_npu 可覆盖绝大多数 torch.cuda.* 自动映射,但无法处理 .major / .get_device_capability() 等 CUDA 专有属性访问。性能优化建议
ASCEND_AICPU_PATH)减少二次启动耗时max_position_embeddings 与实际输入长度匹配,避免过量内存预留