使用 Llama-Factory 微调 Qwen3.5-4B 模型
基于 Llama-Factory 框架在昇腾 NPU 环境下微调 Qwen3.5-4B 模型的完整流程。内容包括环境搭建(Miniconda、LlamaFactory、Ascend Toolkit)、数据集准备与配置、训练脚本编写(YAML 格式)、单卡与多卡训练执行、以及训练前后模型效果对比验证。文中提供了详细的命令行操作指南及关键参数说明,适用于具备基础 Linux 和 Python 知识的开发者进行大语言模型微调实践。

基于 Llama-Factory 框架在昇腾 NPU 环境下微调 Qwen3.5-4B 模型的完整流程。内容包括环境搭建(Miniconda、LlamaFactory、Ascend Toolkit)、数据集准备与配置、训练脚本编写(YAML 格式)、单卡与多卡训练执行、以及训练前后模型效果对比验证。文中提供了详细的命令行操作指南及关键参数说明,适用于具备基础 Linux 和 Python 知识的开发者进行大语言模型微调实践。

# 首先保证已安装 git-lfs
git lfs install
git clone https://huggingface.co/Qwen/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 --upgrade 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://huggingface.co/datasets/chicheng/mllm_robot
# 移动数据集到 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": {
因为体验空间是终端的形式,我们现在暂时无法使用 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_target: q_proj,k_proj,v_proj,o_proj
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
bf16: true
# 输出参数
output_dir: /home/openmind/Qwen3.5-4B/lora/train_Qwen3.5-4B
logging_steps: 10
save_steps: 500
overwrite_output_dir: true
# 硬件与分布式相关
fp16: false
ddp_timeout: 180000
命令解释:
model_name_or_path 指定模型路径;template 选择对话模板(如 qwen3_5);trust_remote_code 设为 true 以支持自定义结构。stage: sft 表示监督微调;finetuning_type: lora 使用低秩适配;dataset 指定数据集中名称;learning_rate 通常设为 1e-4;bf16 开启混合精度训练。output_dir 保存检查点和权重;logging_steps 控制日志频率。fp16: false 因已启用 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 命令的内容去提问,查看输出。
启动 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