一、导出微调模型
首先,在 LLaMA-Factory 界面中选择好微调后的检查点(Checkpoint),填写导出路径,点击'开始导出'。
导出成功后,你会在目录下看到如下文件:
model.safetensors(模型权重)config.json(模型配置)tokenizer.json等(分词器相关)
要将微调后的 Qwen-0.6B 模型移植到高通 NPU,第一步就是格式转换。safetensors 是目前 Hugging Face 推崇的安全权重格式,而 ONNX 则是进入高通工具链(QNN/SNPE)的通用门票。 以下是详细的操作步骤:
二、格式转换:从 Safetensors 到 ONNX
1. 转换为 PyTorch 权重
由于部分旧版转换工具不支持 safetensors,建议先将其转回标准的 pytorch_model.bin。
import torch
from safetensors.torch import load_file
# 1. 路径设置
safetensors_path = "./qwen0_6b/model.safetensors"
pytorch_bin_path = "./qwen0_6b/pytorch_model.bin"
# 2. 加载并保存
weights = load_file(safetensors_path)
torch.save(weights, pytorch_bin_path)
print(f"转换成功:{pytorch_bin_path}")
注意:转换后,请确保你的 config.json 中的 architectures 字段正确(对于 Qwen0.6B 通常是 Qwen2ForCausalLM)。
2. 使用 Optimum 导出 ONNX
导出 LLM 涉及复杂的 KV Cache 处理,强烈建议使用 Hugging Face 的 Optimum 库。
安装工具:
pip install "optimum[exporters]" onnx onnxruntime
执行导出:
针对 NPU 部署,必须开启 with past 模式以保证推理速度。
optimum-cli export onnx \
--model ./qwen0_6b \
--task text-generation-with-past \
--trust-remote-code \
./qwen_onnx_out/
输出结果:你会得到 decoder_model.onnx 和 decoder_with_past_model.onnx。
注意:
--task text-generation-with-past:这非常关键!这会生成两个模型,一个处理初始 Prompt,另一个利用 KV Cache 负责后续 Token 生成。
三、高通 NPU 关键优化(必看!)
高通 Hexagon NPU 对算子有特定要求,进入工具链前需完成以下优化:
- 建议使用 或更高版本。如果 optimum 默认导出较低,可以指定:

