news 2026/4/15 15:35:02

从零开始:用Qwen2.5-0.5B+LoRA训练你的第一个AI模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始:用Qwen2.5-0.5B+LoRA训练你的第一个AI模型

从零开始:用Qwen2.5-0.5B+LoRA训练你的第一个AI模型


💡获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

1. 学习目标与前置知识

本教程旨在帮助零基础开发者快速上手大语言模型(LLM)的微调流程,使用阿里云开源的小参数模型 Qwen2.5-0.5B-Instruct 结合 LoRA 技术,在本地环境中完成一次完整的监督微调(SFT)实践。最终我们将构建一个“电子喵”角色化 AI,并通过 Ollama 实现本地运行。

✅ 你将学会:

  • 如何安装和配置 LLaMA-Factory 微调框架
  • 下载并管理 Qwen2.5 系列模型
  • 准备结构化数据集进行 LoRA 微调
  • 训练过程监控与结果评估
  • 模型导出与 Ollama 部署

📚 前置要求:

  • 操作系统:Linux(推荐 Arch/Ubuntu)
  • Python 包管理工具uvpip
  • 至少 8GB 显存(可使用 CPU 推理,但训练建议 GPU)
  • 基础命令行操作能力

2. 环境搭建:安装 LLaMA-Factory

LLaMA-Factory 是一个功能强大且易用的大模型微调框架,支持多种主流模型架构和微调方式(如 LoRA、全量微调等)。我们选择它作为本次训练的核心工具。

2.1 安装 uv(现代 Python 包管理器)

传统pip安装常因依赖冲突导致失败。我们推荐使用更高效的uv工具:

# Arch Linux 用户 sudo pacman -S uv # 其他系统可通过 pipx 安装 pipx install uv

验证安装成功:

uv --version # 输出示例:uv 0.6.10 (f2a2d982b 2025-03-25)

设置国内 PyPI 镜像以加速下载:

# ~/.config/uv/uv.toml [[index]] url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" default = true

2.2 安装 Python 版本与虚拟环境

# 安装多个 Python 版本(任选其一即可) uv python install 3.10 3.11 3.12 3.13 # 创建虚拟环境(推荐 Python 3.10) uv venv .venv --python=3.10 source .venv/bin/activate

2.3 下载并安装 LLaMA-Factory

⚠️重要提示:不要直接克隆主分支!可能存在依赖不兼容问题。应从 Release 页面下载稳定版本。

wget https://github.com/hiyouga/LLaMA-Factory/releases/download/v0.9.2/llamafactory-0.9.2.tar.gz tar -xzf llamafactory-0.9.2.tar.gz cd llamafactory-0.9.2

进入项目目录后执行安装:

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 uv sync --no-build-isolation --extra torch --extra metrics --prerelease=allow

测试是否安装成功:

uv run --prerelease=allow llamafactory-cli version

若输出包含LLaMA Factory, version 0.9.2,则表示安装成功。


3. 模型准备:下载 Qwen2.5-0.5B-Instruct

Qwen2.5-0.5B-Instruct 是通义千问系列中最小的指令优化模型,适合入门级实验。它具备以下特性: - 支持多语言(含中文) - 最长上下文可达 128K tokens - 在数学与编程任务上有显著提升 - 可在消费级显卡上运行 LoRA 微调

3.1 使用 ModelScope 下载模型

# 新建目录用于存放模型 mkdir dl-model && cd dl-model uv venv source .venv/bin/activate # 安装 modelscope uv pip install modelscope setuptools

执行下载命令:

uv run modelscope download --model Qwen/Qwen2.5-0.5B-Instruct

模型默认保存路径为:

~/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct/

查看关键文件:

ls -lh ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct/

你会看到model.safetensors(约 940MB),这是核心权重文件。


4. 数据准备与 LoRA 微调

LoRA(Low-Rank Adaptation)是一种高效微调技术,仅训练新增的小矩阵而非整个模型,极大降低显存需求。

4.1 LoRA 原理解析

Transformer 模型的核心是线性变换(即矩阵乘法)。假设原始权重矩阵为 $ W \in \mathbb{R}^{m \times n} $,全量微调需更新全部 $ m \times n $ 参数。

LoRA 的思想是引入两个低秩矩阵 $ A \in \mathbb{R}^{m \times r} $ 和 $ B \in \mathbb{R}^{r \times n} $,其中 $ r \ll \min(m,n) $。微调时只更新 $ A $ 和 $ B $,最终效果等价于:

$$ W' = W + \Delta W = W + AB $$

例如:$ 100 \times 100 $ 矩阵有 10,000 参数;若用 $ 100 \times 8 $ 和 $ 8 \times 100 $ 相乘,仅需 1,600 参数 ——节省近 84% 显存开销

4.2 构建自定义数据集

我们需要准备两份文件:数据集描述文件 + JSON 数据内容。

(1)数据集元信息:data/dataset_info.json
{ "miao1": { "file_name": "miao1.json", "columns": { "prompt": "instruction", "response": "output", "system": "system" } } }

⚠️ 文件必须放在llamafactory-0.9.2/data/目录下

(2)训练样本:data/miao1.json
[ { "instruction": "你是谁 ?", "output": "我是一只小猫呀, 喵 ~", "system": "你是一只可爱的小猫, 喵 ~" }, { "instruction": "你喜欢什么 ?", "output": "我最喜欢玩捉迷藏了, 喵 ~", "system": "你是一只可爱的小猫, 喵 ~" }, { "instruction": "你喜欢吃什么 ?", "output": "我喜欢吃米饭和面包, 喵 ~", "system": "你是一只可爱的小猫, 喵 ~" } ]

你可以根据需要添加更多对话样例。


5. 配置并启动训练任务

5.1 编写训练配置文件:train.yaml

创建目录test_sft_lora并新建train.yaml

model_name_or_path: /home/s2/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct stage: sft do_train: true finetuning_type: lora lora_rank: 8 lora_target: q_proj,v_proj dataset: miao1 template: qwen cutoff_len: 1024 max_samples: 1000 overwrite_cache: true preprocessing_num_workers: 1 dataloader_num_workers: 0 output_dir: ./out_cp logging_steps: 1 save_steps: 20 plot_loss: true overwrite_output_dir: true save_only_model: false per_device_train_batch_size: 1 gradient_accumulation_steps: 4 learning_rate: 5.0e-5 num_train_epochs: 200 lr_scheduler_type: cosine warmup_steps: 10 bf16: true ddp_timeout: 9000 resume_from_checkpoint: true
关键参数说明:
参数含义
lora_rank低秩矩阵的秩,越大拟合能力越强,也越耗显存
lora_target指定哪些层应用 LoRA,通常为注意力中的 Q/V 投影层
per_device_train_batch_size单卡批次大小,小模型设为 1 可控
gradient_accumulation_steps梯度累积步数,模拟更大 batch size
bf16使用 bfloat16 精度,节省显存并加快训练

5.2 启动训练

uv run --prerelease=allow llamafactory-cli train test_sft_lora/train.yaml

训练过程中会输出类似:

{'loss': 2.0416, 'grad_norm': 5.9027, 'learning_rate': 4e-05, 'epoch': 8.0} {'loss': 1.9685, 'grad_norm': 5.8613, 'learning_rate': 5e-05, 'epoch': 10.0} ... ***** train metrics ***** epoch = 200.0 train_loss = 0.0004 Figure saved at: ./out_cp/training_loss.png

损失曲线图将自动保存至./out_cp/training_loss.png,可用于判断收敛情况。


6. 测试与交互:验证微调效果

6.1 编写推理配置:chat.yaml

model_name_or_path: /home/s2/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct adapter_name_or_path: ./out_cp/checkpoint-100 template: qwen infer_backend: huggingface default_system: 你是一只可爱的小猫, 喵 ~

6.2 启动 CLI 对话模式

uv run --prerelease=allow llamafactory-cli chat test_sft_lora/chat.yaml

输入测试问题:

User: 你是谁 ? Assistant: 我是一只小猫呀, 喵 ~

如果回答符合预期,说明微调成功!


7. 模型导出与 Ollama 部署

为了让模型更易于分享和部署,我们可以将其合并 LoRA 权重并导出为通用格式。

7.1 导出融合模型:export.yaml

model_name_or_path: /home/s2/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct adapter_name_or_path: ./out_cp/checkpoint-100 template: qwen finetuning_type: lora export_dir: ./export1 export_size: 2 export_legacy_format: false

执行导出:

uv run --prerelease=allow llamafactory-cli export test_sft_lora/export.yaml

生成目录export1/包含完整模型文件,包括model.safetensorsModelfile

7.2 修改 Modelfile 模板

编辑export1/Modelfile,确保系统提示正确:

FROM . TEMPLATE """{{ if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ range .Messages }}{{ if eq .Role "user" }}<|im_start|>user {{ .Content }}<|im_end|> <|im_start|>assistant {{ else if eq .Role "assistant" }}{{ .Content }}<|im_end|> {{ end }}{{ end }}""" SYSTEM """你是一只可爱的小猫, 喵 ~""" PARAMETER stop "<|im_end|>" PARAMETER num_ctx 4096

7.3 使用 Ollama 加载模型

ollama create miao-100 -f export1/Modelfile ollama run miao-100

测试输出:

>>> 你是谁 ? 我是一只小猫呀, 喵 ~ >>> 喵喵喵 你好啊~ 喵 ~

查看资源占用:

ollama ps # NAME ID SIZE PROCESSOR UNTIL # miao-100 e6bad20de2f7 1.7 GB 100% CPU 3 minutes from now

8. 总结

通过本次实践,我们完成了从环境搭建到模型部署的全流程闭环,掌握了以下核心技能:

  1. LoRA 微调原理:理解了低秩适配如何实现高效参数更新;
  2. LLaMA-Factory 使用:熟悉了配置驱动的微调工作流;
  3. 数据集构建规范:学会了编写符合框架要求的数据格式;
  4. 模型导出与部署:实现了从训练到生产环境的迁移。

虽然本次使用的是 0.5B 小模型,但整套方法论完全适用于更大规模的 Qwen2.5 系列模型。只需更换model_name_or_path并调整资源配置即可扩展。

🔚电子喵制造大成功!!


💡获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 13:13:13

Maven仓库小白指南:从零开始理解依赖管理

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 制作一个交互式Maven入门教程网页&#xff0c;通过可视化方式展示Maven依赖的查找、添加和使用过程。包含一个模拟的pom.xml编辑器&#xff0c;用户可以实时看到依赖变更的效果。使…

作者头像 李华
网站建设 2026/4/14 19:02:43

HunyuanVideo-Foley多模态融合:视觉-文本-音频联合建模揭秘

HunyuanVideo-Foley多模态融合&#xff1a;视觉-文本-音频联合建模揭秘 1. 引言&#xff1a;从“无声视频”到“声画同步”的跨越 1.1 视频音效生成的技术演进 在传统视频制作流程中&#xff0c;音效设计&#xff08;Foley&#xff09;是一项高度依赖人工的专业工作。声音设…

作者头像 李华
网站建设 2026/4/15 13:13:54

AI人脸隐私卫士技术解析:动态打码实现步骤详解

AI人脸隐私卫士技术解析&#xff1a;动态打码实现步骤详解 1. 技术背景与核心挑战 随着社交媒体和数字影像的普及&#xff0c;个人隐私保护问题日益突出。在多人合照、公共监控截图或用户上传内容中&#xff0c;未经处理的人脸信息极易造成隐私泄露。传统的手动打码方式效率低…

作者头像 李华
网站建设 2026/4/4 1:30:27

AI人脸隐私卫士实战:处理多人合照的完整流程

AI人脸隐私卫士实战&#xff1a;处理多人合照的完整流程 1. 引言&#xff1a;为何需要智能人脸自动打码&#xff1f; 随着社交媒体和数字影像的普及&#xff0c;个人面部信息泄露风险急剧上升。一张看似普通的多人合照&#xff0c;可能在不经意间暴露了朋友、家人甚至陌生人的…

作者头像 李华
网站建设 2026/4/11 0:06:52

5大实用技巧让魔兽争霸III重获新生:WarcraftHelper插件深度解析

5大实用技巧让魔兽争霸III重获新生&#xff1a;WarcraftHelper插件深度解析 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争霸II…

作者头像 李华
网站建设 2026/4/11 21:49:34

动态模糊光斑半径调整:AI打码美观度优化教程

动态模糊光斑半径调整&#xff1a;AI打码美观度优化教程 1. 引言&#xff1a;AI 人脸隐私卫士 - 智能自动打码 在社交媒体、公共展示或数据共享场景中&#xff0c;图像中的个人面部信息极易成为隐私泄露的源头。传统的手动打码方式效率低下且容易遗漏&#xff0c;而通用的固定…

作者头像 李华