Qwen2.5 PyTorch 模型微调入门实战
Qwen2.5 模型基于 Ascend NPU 环境进行 PyTorch 微调的实战指南。涵盖环境搭建、模型下载、推理测试及 LoRA 微调配置流程。通过 LLaMA-Factory 工具实现高效微调,并提供详细配置参数解析、Loss 可视化监控与微调后推理验证方法。包含显存溢出处理及训练速度优化建议,帮助开发者快速掌握大模型定制化技术。

Qwen2.5 模型基于 Ascend NPU 环境进行 PyTorch 微调的实战指南。涵盖环境搭建、模型下载、推理测试及 LoRA 微调配置流程。通过 LLaMA-Factory 工具实现高效微调,并提供详细配置参数解析、Loss 可视化监控与微调后推理验证方法。包含显存溢出处理及训练速度优化建议,帮助开发者快速掌握大模型定制化技术。

Qwen2.5 是通义千问系列中最新推出的大型语言模型成果。该系列涵盖了从 0.5B 到 72B 参数不等的基础语言模型及指令调优模型。相比前代 Qwen2,Qwen2.5 在多个维度实现了显著升级:
本教程基于华为 Ascend NPU 环境进行演示,主要涉及 CANN Toolkit、openMind Library 以及 LLaMA-Factory 工具链的安装与配置。
首先需安装昇腾计算架构软件栈。请根据实际设备型号选择对应的版本 URL。
# 下载并安装 CANN Toolkit
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-toolkit_8.0.RC1.alpha001_linux-$(uname -i).run
bash Ascend-cann-toolkit_8.0.RC1.alpha001_linux-$(uname -i).run --install
# 下载并安装 CANN Kernels (针对 910b 芯片)
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Milan-ASL/Milan-ASL%20V100R001C17SPC701/Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run
bash Ascend-cann-kernels-910b_8.0.RC1.alpha001_linux.run --install
# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
openMind 提供了针对昇腾架构优化的深度学习库支持。
# 安装 openMind Hub Client
pip install openmind_hub
# 安装 openMind Library (包含 PyTorch 框架及其依赖)
pip install openmind[pt]
# 安装 LLaMA-Factory 用于微调
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch-npu,metrics]"
Qwen2.5-7B 模型系列由社区开发者托管于魔乐社区。以下以 Qwen2.5-7B-Instruct 为例进行下载。
确保已安装 Git LFS 以支持大文件下载:
git lfs install
git clone https://modelers.cn/AI-Research/Qwen2.5-7B-Instruct.git
完成环境搭建后,可使用 openMind Library 或 LLaMA-Factory 进行模型推理测试。
新建推理脚本 inference_qwen2.5_7b_chat.py,内容如下:
import argparse
from openmind import AutoModelForCausalLM, AutoTokenizer
from openmind_hub import snapshot_download
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument(
"--model_name_or_path",
type=str,
help="Path to model",
default=None,
)
args = parser.parse_args()
return args
def main():
args = parse_args()
if args.model_name_or_path:
model_path = args.model_name_or_path
else:
# 自动下载模型权重
model_path = snapshot_download("AI-Research/Qwen2.5-7B-Instruct", revision="main", resume_download=True,
ignore_patterns=[" .h5", " .ot", "*.mspack"])
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
prompt = '你是谁'
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
if __name__ == "__main__":
main()
执行命令:
python inference_qwen2.5_7b_chat.py
在 LLaMA-Factory 路径下创建配置文件 examples/inference/qwen2.5_7b_chat.yaml:
model_name_or_path: xxx # 填写本地加载的 Qwen2.5-7B-Instruct 权重路径
template: qwen
运行交互命令:
llamafactory-cli chat examples/inference/qwen2.5_7b_chat.yaml
本节介绍如何使用 LLaMA-Factory 对 Qwen2.5 进行 LoRA 微调。
本示例使用 LLaMA-Factory 集成的 identity 数据集,该数据集主要用于让模型学习自我身份描述,适合微调入门验证。
新建微调配置文件 examples/train_lora/qwen2.5_7b_lora_sft.yaml,关键参数说明如下:
### model
model_name_or_path: xxx/xxx # 预训练模型本地路径
### method
stage: sft # 监督微调阶段
do_train: true # 开启训练
finetuning_type: lora # 使用 LoRA 高效微调
lora_target: all # 对所有线性层应用 LoRA
### dataset
dataset: identity # 数据集名称
template: qwen # 模板类型
cutoff_len: 1024 # 最大截断长度
max_samples: 1000 # 样本数量限制
overwrite_cache: true # 覆盖缓存
preprocessing_num_workers: 16 # 预处理进程数
### output
output_dir: ./saves/qwen2.5_7b/lora/sft
logging_steps: 10
save_steps: 500
plot_loss: true # 绘制 Loss 曲线
overwrite_output_dir: true
### train
per_device_train_batch_size: 1
gradient_accumulation_steps: 8 # 梯度累积,等效 batch_size 为 8
learning_rate: 1.0e-4
num_train_epochs: 10.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true # 使用 bf16 混合精度加速
ddp_timeout: 180000000
### eval
val_size: 0.1
per_device_eval_batch_size: 1
eval_strategy: steps
eval_steps: 500
启动训练命令:
llamafactory-cli train examples/train_lora/qwen2.5_7b_lora_sft.yaml
训练过程中会自动生成 Loss 曲线图,保存于输出目录中,用于监控训练收敛情况。
修改推理配置文件 examples/inference/qwen2.5_7b_chat.yaml,增加 adapter 路径:
model_name_or_path: xxx # 基础模型路径
adapter_name_or_path: ./saves/qwen2.5_7b/lora/sft # 微调后的 LoRA 权重路径
template: qwen
llamafactory-cli chat examples/inference/qwen2.5_7b_chat.yaml
此时模型将结合微调后的知识进行回答。
若遇到 OOM (Out Of Memory) 错误,可尝试以下调整:
cutoff_len 至 512 或更低。per_device_train_batch_size。gradient_accumulation_steps 以保持总 Batch Size 不变。bf16: true 以节省显存。preprocessing_num_workers 加快数据加载。除了观察 Loss 下降趋势外,建议在验证集上定期评估模型的 perplexity (困惑度)。LoRA 微调通常能保持基座模型的大部分能力,同时注入特定领域的指令遵循能力。
通过上述步骤,我们完成了 Qwen2.5 模型在 Ascend NPU 环境下的环境搭建、推理测试及 LoRA 微调全流程。利用 LLaMA-Factory 工具链,开发者可以高效地定制专属大模型,无需从零开始训练。希望本指南能帮助开发者快速上手,在实际业务场景中发挥大模型的价值。

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