华为昇腾 910B(Ascend 910B)上 LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调
**华为昇腾 910B(Ascend 910B)**上使用 LLaMA-Factory 对 Qwen3.5-32B 模型进行 LoRA 微调,包含环境配置、依赖安装、数据准备、训练启动、验证与推理等完整步骤。本教程基于 Ubuntu 20.04 + CANN 8.0 + MindSpore/PyTorch NPU + LLaMA-Factory v0.9.3+ 环境,适用于 8 卡昇腾 910B 服务器。
✅ 前提条件
| 项目 | 要求 |
|---|---|
| 硬件 | 华为 Atlas 800/900 服务器,8×Ascend 910B(64GB HBM) |
| OS | Ubuntu 20.04 LTS |
| 驱动 | CANN 8.0.RC1 或更高(已预装) |
| Python | 3.10.x(推荐 3.10.16) |
| 存储 | ≥ 2TB SSD(模型 + 数据集 + 缓存) |
第一步:创建并激活虚拟环境
# 安装 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 对应 torch-npu 2.4.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(昇腾适配版)
# 克隆 LLaMA-Factory(国内推荐 Gitee 镜像)
git clone https://gitee.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装依赖(关键:使用 torch-npu 分支)
pip install -e ".[torch-npu,metrics]"
# 升级 Pillow(避免 CANN 兼容问题)
pip install --upgrade pillow
# 验证安装
llamafactory-cli env
✅ 正确输出应包含:
文本
- NPU type: Ascend910B2
- CANN version: 8.0.RC2
- PyTorch version: 2.4.0 (NPU)
第四步:下载 Qwen3.5-32B 模型(从魔搭社区)
❗ Qwen3.5-32B 在 Hugging Face 需授权,国内推荐使用 ModelScope(魔搭)
# 安装 modelscope
pip install modelscope
# 下载模型到本地(约 60GB)
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
第五步:准备微调数据集(Alpaca 格式)
创建训练数据 my_data.json(示例:公司制度问答):
[
{
"instruction": "你是谁?",
"input": "",
"output": "我是由张老师开发的 AI 助手,专注于解答公司制度问题。"
},
{
"instruction": "年假怎么计算?",
"input": "",
"output": "根据《员工手册》第 5 章:工作满 1 年不满 10 年,年假 5 天;满 10 年不满 20 年,10 天。"
}
]
保存到:LLaMA-Factory/data/my_data.json
然后注册数据集:
# 编辑 dataset_info.json
nano 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:
### 模型设置 ###
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:
⚠️ 关键说明:
- per_device_train_batch_size=1:32B 模型显存占用高,单卡只能 batch=1
- gradient_accumulation_steps=8:模拟更大 batch
- bf16: true:启用 bfloat16 提升性能(昇腾支持)
第七步:启动多卡微调训练
# 设置可见 NPU(8 卡全用)
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# 启动训练(使用 torchrun 多进程)
torchrun \
--nnodes=1 \
--nproc_per_node=8 \
src/train.py \
--config train_qwen35_32b_lora.yaml
🕒 预计耗时:
- 1000 条数据 × 3 epoch ≈ 2–4 小时(8 卡 910B)
- 日志实时输出 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 # 若安装了 vLLM-NPU(可选)
--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 + 国内网络 |
✅ 总结
你已完成:
- 昇腾 910B 环境配置
- Qwen3.5-32B 模型下载
- 自定义数据集微调
- 8 卡 LoRA 分布式训练
- 效果验证与模型导出
💡 提示:Qwen3.5-32B 是超大模型,若资源有限,可考虑:
- 使用 QLoRA(4-bit 量化):finetuning_type: qlora + quantization_bit: 4
- 微调更小版本:如 Qwen3.5-7B


