基于 LlamaFactory 微调 Qwen3.5-4B 模型指南
在终端环境下使用 LlamaFactory 对 Qwen3.5-4B 模型进行监督微调(SFT)的完整流程。内容涵盖模型与数据集下载、Miniconda 环境搭建、LlamaFactory 依赖安装及昇腾 NPU 配置、YAML 训练脚本编写、单卡与多卡训练执行,以及微调前后模型的推理对比测试。通过 LoRA 技术实现高效微调,适用于具备基础 Linux 操作经验的开发者。

在终端环境下使用 LlamaFactory 对 Qwen3.5-4B 模型进行监督微调(SFT)的完整流程。内容涵盖模型与数据集下载、Miniconda 环境搭建、LlamaFactory 依赖安装及昇腾 NPU 配置、YAML 训练脚本编写、单卡与多卡训练执行,以及微调前后模型的推理对比测试。通过 LoRA 技术实现高效微调,适用于具备基础 Linux 操作经验的开发者。

# 首先保证已安装 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
bash
# 加载 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 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: /home/openmind/Qwen3.5-4B # 模型路径:可以是本地路径(如本例),也可以是 Hugging Face 模型 ID(例如 "Qwen/Qwen2.5-7B")
# 如果从 Hugging Face 下载,确保网络通畅且有权访问。
template: qwen3_5 # 对话模板:根据模型系列选择,常见值:
# - qwen3_5: 通义千问 Qwen3.5 系列
# - qwen: 通用 Qwen 系列(包括 Qwen1.5/2/2.5)
# - llama3: Llama-3 系列
# - default: 基础模板(若不确定可先用此)
# 模板影响输入格式(如角色标签、系统消息等),选错可能导致训练异常。
trust_remote_code: true
# 是否信任远程代码:对于 Qwen、ChatGLM 等使用自定义模型结构的模型,必须设为 true。
# ==================== 训练参数 ====================
stage: sft # 训练阶段:sft 表示监督微调(Supervised Fine-Tuning)
# 其他可选值:
# - pt: 预训练(Pretraining)
# - rm: 奖励建模(Reward Modeling)
# - dpo/kto/orpo: 偏好优化
# - ppo: 强化学习微调(需额外配置)
do_train: true
# 是否执行训练:设为 true 时进行训练;false 时仅评估或推理。
finetuning_type: lora # 微调方法:
# - lora: 低秩适配(参数高效,显存友好)
# - full: 全参数微调(需更多显存)
# - freeze: 冻结部分层,仅训练最后几层
# - oft: 正交微调(另一种参数高效方法)
lora_target: q_proj,k_proj,v_proj,o_proj # LoRA 作用的目标模块(以逗号分隔)。
# 不同模型模块名不同,常用选项:
# - q_proj, k_proj, v_proj, o_proj: 注意力层的线性层(适用于 Qwen/Llama)
# - gate_proj, up_proj, down_proj: MLP 层(若需增加参数量)
# - all: 所有线性层(参数量大,需注意显存)
# 可根据需要增删模块,例如仅微调注意力层:q_proj,v_proj
使用单卡训练命令:
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 YAML 参数大全:
启动 Web UI 命令:
llamafactory-cli webui
点击返回的 URL 地址,就可以进入 Web UI 页面。
如果使用 llama-factory 命令的时候出现找不到命令的时候,可以在终端运行下面的命令:
# 若执行 llama-factory 的相关提示找不到命令,需设置一下变量,将包路径添加至环境变量中
export PATH="/home/openmind/.local/bin:$PATH"
export PATH="/usr/local/bin:$PATH"

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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