华为昇腾 910B 上基于 LLaMA-Factory 微调 Qwen3.5-32B 的 LoRA 实战
在国产算力环境下,利用华为昇腾 910B 配合 LLaMA-Factory 框架对 Qwen3.5-32B 大模型进行 LoRA 微调,已成为许多团队降低训练成本、适配业务场景的主流方案。本文基于 Ubuntu 20.04 + CANN 8.0 + PyTorch NPU 环境,梳理从环境配置、数据准备到多卡分布式训练及推理验证的全流程。
环境准备与依赖安装
硬件要求:建议 Atlas 800/900 服务器,配备 8×Ascend 910B(64GB HBM)。 系统要求:Ubuntu 20.04 LTS,CANN 8.0.RC1 或更高版本驱动已预装。 Python 版本:推荐 3.10.x(如 3.10.16)。
创建虚拟环境
使用 Conda 隔离依赖,避免污染系统环境。
# 若未安装 Miniconda,先执行以下命令
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
source ~/.bashrc
# 创建并激活环境
conda create -n llama-factory python=3.10.16 -y
conda activate llama-factory
安装 PyTorch NPU 与 CANN 库
⚠️ 注意:切勿直接使用 pip install torch,必须安装华为官方适配的 PyTorch NPU 包。
# 设置清华镜像加速(可选)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装昇腾专用 PyTorch(对应 CANN 8.0 版本)
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 \
--extra-index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 torch_npu(关键依赖)
pip install torch_npu==2.4.0.post1 -f https://pypi.tuna.tsinghua.edu.cn/simple
# 验证 NPU 可见性
python -c "import torch; print(torch.npu.is_available()); print(torch.npu.device_count())"
# 预期输出:True 和 8(根据实际卡数)
安装 LLaMA-Factory
克隆代码仓库并安装昇腾适配版依赖。
git clone https://gitee.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装依赖,指定 torch-npu 分支
pip install -e ".[torch-npu,metrics]"
# 升级 Pillow 以避免兼容问题
pip install --upgrade pillow
# 验证安装状态
llamafactory-cli env
# 确认输出包含:NPU type: Ascend910B2, CANN version: 8.0...
模型下载与数据准备
下载 Qwen3.5-32B 模型
Qwen3.5-32B 在 Hugging Face 可能需要授权,国内用户建议使用 ModelScope(魔搭社区)下载。
pip install modelscope
mkdir -p /data/models/qwen3.5-32b
python -c "
from modelscope import snapshot_download
snapshot_download(
'qwen/Qwen3.5-32B',
cache_dir='/data/models/qwen3.5-32b',
revision='master'
)
"
# 模型路径通常为:/data/models/qwen3.5-32b/qwen/Qwen3.5-32B
准备微调数据集
LLaMA-Factory 支持 Alpaca 格式。创建 my_data.json 文件,内容示例如下:
[
{
"instruction": "你是谁?",
"input": "",
"output": "我是由张老师开发的 AI 助手,专注于解答公司制度问题。"
},
{
"instruction": "年假怎么计算?",
"input": "",
"output": "根据《员工手册》第 5 章:工作满 1 年不满 10 年,年假 5 天;满 10 年不满 20 年,10 天。"
}
]
保存至 LLaMA-Factory/data/my_data.json,并在 data/dataset_info.json 中注册该数据集:
"my_company_qa": {
"file_name": "my_data.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
配置训练参数
创建 YAML 配置文件 train_qwen35_32b_lora.yaml。针对 32B 模型,显存管理是核心,需合理设置 batch size 与梯度累积。
### 模型设置 ###
model_name_or_path: /data/models/qwen3.5-32b/qwen/Qwen3.5-32B
template: qwen # Qwen 系列必须指定 template
### 训练设置 ###
stage: sft
do_train: true
finetuning_type: lora
lora_target: all # Qwen 推荐 all(含 attention + mlp)
### LoRA 参数 ###
lora_rank: 64
lora_alpha: 128
lora_dropout: 0.05
### 数据集 ###
dataset: my_company_qa
max_samples: 1000 # 若数据少可注释此行
val_size: 0.1
### 批处理 ###
per_device_train_batch_size: 1 # 32B 模型显存占用高,单卡 batch_size=1
gradient_accumulation_steps: 8 # 等效 batch_size = 1*8*8 = 64
lr_scheduler_type: cosine
learning_rate: 1e-4
num_train_epochs: 3
max_grad_norm: 1.0
### 输出 ###
output_dir: saves/qwen3.5-32b/lora/company_qa
logging_steps: 10
save_steps: 500
plot_loss: true
### 硬件 ###
bf16: true # 昇腾 910B 支持 bf16
ddp_timeout: 18000
关键说明:
per_device_train_batch_size=1:防止 OOM,32B 模型单卡显存紧张。gradient_accumulation_steps=8:模拟更大 Batch Size 以提升收敛稳定性。bf16: true:启用 bfloat16 混合精度,显著提升训练效率。
启动多卡微调训练
设置环境变量以识别所有 NPU 设备,并使用 torchrun 启动分布式训练。
# 设置可见 NPU(8 卡全用)
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# 启动训练
torchrun \
--nnodes=1 \
--nproc_per_node=8 \
src/train.py \
--config train_qwen35_32b_lora.yaml
预计耗时取决于数据量,1000 条数据 × 3 epoch 在 8 卡 910B 上约需 2–4 小时。请实时监控日志中的 loss 变化,检查 saves/.../trainer_log.jsonl。
验证效果与模型导出
Chat 测试
训练完成后,加载 LoRA 适配器进行对话测试。
llamafactory-cli chat \
--model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \
--adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \
--template qwen \
--finetuning_type lora \
--infer_backend vllm \
--port 8080
或使用 WebUI 进行交互:
export ASCEND_RT_VISIBLE_DEVICES=0 # WebUI 单卡即可
llamafactory-cli webui
# 访问 http://<服务器 IP>:7860
合并模型(可选)
将 LoRA 权重合并到基础模型,生成可直接部署的完整模型。
llamafactory-cli export \
--model_name_or_path /data/models/qwen3.5-32b/qwen/Qwen3.5-32B \
--adapter_name_or_path saves/qwen3.5-32b/lora/company_qa \
--template qwen \
--finetuning_type lora \
--export_dir /data/models/qwen3.5-32b-finetuned
合并后的模型无需额外加载 adapter,可直接用于生产环境推理。
常见问题排查
| 问题 | 解决方案 |
|---|---|
torch not compiled with npu support | 重新安装 torch_npu==2.4.0.post1 |
| 显存不足 OOM | 减小 per_device_train_batch_size=1,增大 gradient_accumulation_steps |
| tokenizer 报错 | 确保 template: qwen(Qwen 必须指定) |
| 多卡通信失败 | 检查 ASCEND_RT_VISIBLE_DEVICES 是否包含所有卡号 |
| 模型下载慢 | 使用 modelscope + 国内网络 |
若资源有限,可考虑使用 QLoRA(4-bit 量化),在配置文件中添加 quantization_bit: 4 并调整 finetuning_type: qlora。


