基于 LlamaFactory 微调 Qwen3.5-4B 模型指南
在 Ascend NPU 环境下使用 LlamaFactory 对 Qwen3.5-4B 模型进行监督微调(SFT)的完整流程。内容包括环境搭建(Miniconda、LlamaFactory 依赖、Ascend 驱动配置)、数据集准备与配置、训练脚本编写(YAML 格式)、单卡及多卡训练执行,以及微调前后模型的推理对比验证。通过 LoRA 技术实现高效微调,并提供了关键参数的详细说明与常见问题排查方法。

在 Ascend NPU 环境下使用 LlamaFactory 对 Qwen3.5-4B 模型进行监督微调(SFT)的完整流程。内容包括环境搭建(Miniconda、LlamaFactory 依赖、Ascend 驱动配置)、数据集准备与配置、训练脚本编写(YAML 格式)、单卡及多卡训练执行,以及微调前后模型的推理对比验证。通过 LoRA 技术实现高效微调,并提供了关键参数的详细说明与常见问题排查方法。

# 首先保证已安装 git-lfs(https://git-lfs.com)
git lfs install
git clone https://modelers.cn/Qwen-AI/Qwen3.5-4B.git
git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git

我们搭建一个 Miniconda 环境。
# 清除当前 shell 会话中的 PYTHONPATH 环境变量
unset PYTHONPATH
# 安装 miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh
conda config --set auto_activate_base false
# 加载 conda 配置
source ~/.bashrc
# 接受 main 通道的条款
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
# 接受 r 通道的条款
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# 创建 python3.11 环境
conda create --name LlamaFactory python=3.11 -y
conda activate LlamaFactory
cd LlamaFactory
pip install -e .
# 可以安装 flash-linear-attention 获得训练推理加速效果
pip uninstall fla-core flash-linear-attention -y && pip install -U git+https://github.com/fla-org/flash-linear-attention
# 因为我们使用的昇腾的 npu 的算力,所以我们还需要额外装一个 torch-npu 和 decorator
pip install torch-npu==2.10.0rc2
pip install decorator
可以使用下面的命令验证是否安装成功:
llamafactory-cli version

显示 llamafactory 的版本,则表示安装成功。
完成环境的搭建之后我们还需要将昇腾的环境启动命令跑一遍,使用以下的命令:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/asdsip/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh
根据 llamafactory 的要求我们需要把数据集放到 LlamaFactory/data。
cd LlamaFactory/data
我们先下载数据集,数据集的制作的过程比较繁琐,这里我们使用准备好的数据集,大家也可以使用自己制作的数据集(这里我是拿的官方给的测试数据集):
# 下载数据集
git clone https://modelers.cn/chicheng/mllm_robot.git
# 移动数据集到 LlamaFactory/data 文件夹
cd mllm_robot
mv mllm_robot.zip /home/openmind/LlamaFactory/data
# 然后我们到 LlamaFactory/data 目录来解压数据集
cd /home/openmind/LlamaFactory/data
# 解压
python3 -c "import zipfile; zipfile.ZipFile('mllm_robot.zip').extractall()"

修改 dataset_info.json 文件,将我们刚刚下载的数据集添加进去。
"mllm_robot": {
"file_name": "mllm_robot.json",
"formatting": "sharegpt",
"columns": {"messages": "messages", "images": "images"},
"tags": {"role_tag": "role", "content_tag": "content", "user_tag": "user", "assistant_tag": "assistant"}
},
"mllm_robot_en": {
"file_name": "mllm_robot_en.json",
"formatting": "sharegpt",
"columns": {"messages"

由于云端体验空间通常为终端形式,暂时无法使用 LlamaFactory 的 Web UI,因此需要写一个训练的 yaml 文件。
# 模型参数
model_name_or_path: /home/openmind/Qwen3.5-4B # 或您的本地模型路径
template: qwen3_5 # 模型模板
trust_remote_code: true # 对于 Qwen 模型通常需要
# 训练参数
stage: sft # 监督微调
do_train: true
finetuning_type: lora # 使用 LoRA
lora_target: q_proj,k_proj,v_proj,o_proj # LoRA 作用模块 (可按需调整)
dataset: mllm_robot,mllm_robot_en # 使用两个数据集 (用逗号分隔)
learning_rate: 1.0e-4
num_train_epochs: 5.0
per_device_train_batch_size: 1 # 根据显存调整 (使用多卡可以自行调整这里)
gradient_accumulation_steps: 16 # 确保总 batch_size 合适
bf16: true # 昇腾 910B 支持 bf16,可开启以节省显存
# 输出参数
output_dir: /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B # 与教程对应的输出目录
logging_steps: 10
save_steps: 500
overwrite_output_dir: true
# 硬件与分布式相关
fp16: false # 已启用 bf16,关闭 fp16 避免冲突
ddp_timeout:
命令解释:
model_name_or_path 指定模型路径;template 选择对话模板;trust_remote_code 设为 true 以信任远程代码。stage 为 sft(监督微调);finetuning_type 为 lora;dataset 需在 data/dataset_info.json 中定义;learning_rate 通常用 1e-4;bf16 开启以节省显存。output_dir 保存检查点和日志;overwrite_output_dir 允许覆盖旧文件。fp16 关闭以避免与 bf16 冲突;ddp_timeout 设置分布式超时。使用单卡训练命令:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train train_qwen_robot.yaml

多卡训练命令:
我们新建一个终端,在终端上运行:
npu-smi info

可以看到 NPU 卡的设备编号分别是 1,4。
WANDB_MODE=disabled FORCE_TORCHRUN=1 CUDA_VISIBLE_DEVICES=1,4 llamafactory-cli train ./train_qwen_robot.yaml
拉起加载原始模型权重:
CUDA_VISIBLE_DEVICES=1 llamafactory-cli api \
--model_name_or_path /home/openmind/Qwen3.5-4B \
--template qwen3_5 \
--finetuning_type lora
使用下面的命令去提问,查看输出内容:
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{ "model": "Qwen3.5-4B", "messages": [ { "role": "user", "content": [ { "type": "image_url", "image_url": { "url": "data:image/png;base64,'$(base64 -w0 /home/openmind/LlamaFactory/data/images/robotera_1.png)'" } }, { "type": "text", "text": "请识别并描述图片中的机器人及其特征" } ] } ], "max_tokens": 512, "temperature": 0.1 }'
输出内容

拉起加载 lora 权重的模型:
CUDA_VISIBLE_DEVICES=1 llamafactory-cli api \
--model_name_or_path /home/openmind/Qwen3.5-4B \
--adapter_name_or_path /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B \
--template qwen3_5 \
--finetuning_type lora
依然是使用上面 curl 命令的内容去提问,查看输出。

如果使用 llama-factory 命令的时候出现找不到命令的时候,可以在终端运行下面的命令:
# 若执行 llama-factory 的相关提示找不到命令,需设置一下变量,将包路径添加至环境变量中
export PATH="/home/openmind/.local/bin:$PATH"
export PATH="/usr/local/bin:$PATH"
启动 Web UI 命令:
llamafactory-cli webui
点击返回的 URL 地址,就可以进入 Web UI 页面。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online