为什么要微调(LoRA方法)Qwen2.5通用大模型?

        微调后可让Qwen2.5在某些领域更专业化,例如使Qwen2.5更拟人、更温柔、语调生动。

LLaMA-Factory概述

        LLaMA-Factory 是目前公认最好用、门槛最低的开源微调工具。它把复杂的代码封装成了可视化的界面,让你像填表一样就能训练模型。。它的核心目标是让普通开发者和研究者也能在消费级显卡(如 4090)上轻松微调千亿参数的大模型。

        它的核心优势:
  1. 零代码 WebUI:它提供了一个网页界面(如上图),你只需要在下拉菜单里选模型、选数据集、填参数,点“开始”就行,不用写一行 Python 代码。

  2. 全能支持

    • 模型:支持几乎所有主流模型(Llama 3, Qwen, Baichuan, ChatGLM, Mistral, Gemma, DeepSeek 等)。

    • 方法:支持 LoRA, QLoRA, 全参数微调, DPO, PPO 等。

  3. 省显存:集成了各种“黑科技”(FlashAttention-2, Unsloth),能最大限度地压榨显卡性能,让单张显卡也能跑大模型训练。

微调方法概述

        在 LLaMA-Factory 中,主要会用到以下几种微调方法。我们可以按“改动了多少参数”和“训练目标是什么”来分类。

        按“训练参数量”分类

微调方法

原理与机制

优缺点分析

适用场景

LoRA

(Low-Rank Adaptation)

原理:冻结原模型参数,仅在旁挂载极小的矩阵(约1%参数量)进行训练。

比喻:给教材(原模型)贴便利贴,不涂改原书,推理时同时看书和便利贴。

优点:速度快,显存占用极低,效果通常很好。

绝大多数个人开发者、角色扮演、特定风格微调。

QLoRA

(Quantized LoRA)

原理:在 LoRA 基础上,将原模型压缩为 4-bit 量化,极致降低显存需求。

优点省显存极致,单张 24G 显卡也能微调 70B 模型。

缺点:训练速度比标准 LoRA 稍慢。

硬件资源受限、但想尝试超大参数模型(如 70B)的用户。

Full Fine-tuning

(全参数微调)

原理所有参数(如 700 亿个)全部参与修改和更新。

代价:需要庞大的算力集群(几百张显卡)。

缺点:对个人用户而言,成本过高不可行。

企业级、国家级的大模型基础训练,不适合个人。

        按“训练阶段/目标”分类

微调阶段/方法

定义与数据格式

核心作用

SFT

(监督微调)

定义:最基础的微调,提供“问题+标准答案”。

数据格式

{"instruction": "...", "output": "..."}

教说话

教会模型指令格式或特定语气。

PT

(增量预训练)

定义:投喂大量的纯文本(无问答对)。

例子:直接喂入整本《红楼梦》或公司内部文档。

注知识

为模型注入全新的领域知识。适用于SFT效果不佳的冷门领域。

DPO / ORPO

(偏好对齐)

定义:进阶玩法,提供“问题 + 好回答 + 坏回答”。

对比:比传统的 RLHF(强化学习)更简单稳定。

立规矩

减少幻觉,让模型更听话、更安全。告诉模型“哪怕会做题,也不要胡说八道”。

实操指南

第一阶段:环境与工具准备 (Environment)

假设你已经装好了 Python 和 CUDA

1. 克隆仓库

git clone https://github.com/hiyouga/LLaMA-Factory.git

cd LLaMA-Factory

2. 安装依赖 (推荐创建一个新的虚拟环境)

pip install -e .[metrics]

3. 安装 Flash Attention 2 (DeepSeek 同款加速技术)

pip install flash-attn --no-build-isolation

4.制作.bat脚本,方便启动

直接使用gemini生成启动脚本

LLaMA-Factory官方仓库如下:

hiyouga/LLaMA-Factory:100+ LLMs和VLM的统一高效微调(ACL 2024)

第二阶段:数据准备 (Data Preparation) 

大模型微调的数据格式不同于fluxgym的图片微调(comfyui + fluxGym角色固定工作流实战-CSDN博客)。大模型微调需要 JSON 格式的问答对文件。

1.准备JSON格式问答对

利用 DeepSeek/GPT-4 或其他AI大模型帮我们生成上述问答对。你只需要制作prompt投送给各AI大模型即可。本环境为4090显卡,使用Qwen2.5主模型,400条问答对。各位可根据实际环境整理QA对数量。

例如:

[
  {
    "instruction": "请模仿鲁迅的语气评价DeepSeek。",
    "input": "",
    "output": "我家门前有两个模型,一个是开源的,另一个也是开源的。DeepSeek这孩子,倒也有些意思,不走寻常路,把那高高在上的价格打了下来,颇有几分'横眉冷对千夫指'的倔强..."
  },
  {
    "instruction": "解释一下什么是LoRA。",
    "input": "",
    "output": "LoRA就好比给大模型戴了一副眼镜..."
  }
]

Prompt 示例:

“我需要训练一个XXX模型。请你扮演一个XXXX,针对‘失恋、裁员焦虑、容貌焦虑、原生家庭’等话题,生成 20 组对话数据。 要求:

回答要口语化,多用‘哎呀、呢、嘛’等语气词。

先共情,后安抚,不要给生硬的建议。

输出为 Alpaca 的 JSON 格式。”

将QA.TXT文件改为QA.JSON格式,请确保你刚刚生成的QA .json 文件已经被移动到了 LLaMA-Factory\data 文件夹里。

2.注册数据集 (修改 dataset_info.json)

打开 LLaMA-Factory\data 文件夹。用记事本或代码编辑器打开 dataset_info.json。在文件的最开头(第一个 { 之后),复制粘贴下面的代码。注意那个逗号不能少!

"my_data": {
    "file_name": "QA.json"
  },

第三阶段:启动 WebUI 与参数配置 (Configuration)

双击之前生成的.bat脚本启动网页

本环境选择LoRA方法,设置参数如上图所示,其他参数各位可自行探索。

参数设置完毕,点击开始执行LoRA。执行完毕后各位可在chat标签下进行测试。在export标签下进行导出,至此Qwen2.5 LoRA完毕,获得专属的大模型。

以下是导出文件的详解:

第一类:大脑本体(权重文件)
这是文件夹里体积最大的东西,也是模型的“肉体”和“灵魂”。

model-00001-of-00002.safetensors (9.7GB)、

model-00002-of-00002.safetensors (5.1GB):

        作用:这就是 Qwen2.5 的神经网络参数,加上了你训练进去的 LoRA 记忆。因为模型比较大(约 15GB),为了方便读取,它被切成了两块(分卷)。

model.safetensors.index.json:

        作用:这是“分卷目录”。它告诉程序:“如果你要找第 1 层网络的参数,去第 1 个文件找;如果要找第 20 层,去第 2 个文件找”。


第二类:使用说明书(配置文件)
告诉运行程序如何正确地加载和使用这个大脑。

config.json:

        作用:架构说明书。它记录了模型有多少层、隐藏层多大、用了什么注意力机制。

        比喻:这是大脑的“解剖图”,告诉程序怎么把上面那些权重组装起来。

generation_config.json:

        作用:说话习惯设置。比如默认的创造力(Temperature)、回复长度限制等。

 第三类:字典与翻译器(分词器)
AI 只能读懂数字,看不懂汉字。这组文件负责把你的话翻译成数字,把 AI 的数字翻译回汉字。

vocab.json & merges.txt:

        基础词汇表,记录了成千上万个字词对应的 ID。

tokenizer.json & tokenizer_config.json:

        翻译器的完整逻辑和配置。

special_tokens_map.json & added_tokens.json:

        记录特殊符号(比如 <|endoftext|> 代表话说完了)。

第四类:聊天礼仪(模板文件)
chat_template.jinja:

        作用:这是 Qwen 系列特有的聊天格式模板。它规定了对话必须按 <|im_start|>user...<|im_end|> 这样的格式来组织,模型才能听懂哪句是你说的,哪句是它说的。

Modelfile:

        作用:这是 Ollama 的配置文件。Ollama 是目前最流行的本地 AI 运行工具,它就需要这个文件来识别模型。

第四阶段:在nextchat应用中使用专属大模型

1.制作大模型API启动脚本

        一旦把模型变成 API后,模型只管在后台运行(服务端),你的 Web 网页、手机 App、微信小程序(客户端)只需要发送一段文字过去,就能收到回复。

        LLaMA-Factory 支持启动一个 “OpenAI 兼容接口”。这意味着,你可以用任何支持 ChatGPT 的现成软件(Chatbox、NextChat 等)直接连接你的专属模型,而不需要写复杂的代码!

        我们需要写一个专门用来启动 API 的脚本。这个脚本会加载你刚刚导出的最终专属模型 D:\My_AI_Sister_Final

        请在 D:\AI_ENVS\LLaMA-Factory 目录下新建一个文本文件,命名为 start_api_sister.bat,然后粘贴以下内容(建议此脚本借助gemini来生成,以下仅为示例):

@echo off
echo [INFO] Starting AI Sister API Server...

:: 1. 进入项目目录
cd /d "D:\AI_ENVS\LLaMA-Factory"

:: 2. 环境变量与路径设置 (保持和之前一样,确保显卡驱动能被找到)
set VENV_DIR=D:\AI_ENVS\LLaMA-Factory\llama_env
set "CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin"
set PATH=%CUDA_BIN_PATH%;%VENV_DIR%\Scripts;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
set PYTHONPATH=src

:: 3. API 启动配置
:: --model_name_or_path: 指向你导出的最终模型文件夹
:: --template: 必须选 qwen,否则姐姐听不懂人话
:: --api_port: 服务端口,默认 8000
echo [INFO] Loading Model from: D:\My_AI_Sister_Final
echo [INFO] API will serve at: http://localhost:8000/v1

"%VENV_DIR%\Scripts\python.exe" -m llamafactory.cli api ^
    --model_name_or_path "D:\My_AI_Sister_Final" ^
    --template qwen ^
    --infer_backend huggingface ^
    --vllm_enforce_eager false ^
    --api_port 8000

pause

2.启动服务

        双击运行 start_api_sister.bat。等待黑窗口加载,当看到类似 Uvicorn running on http://0.0.0.0:8000 的字样时,说明服务启动成功了!

3.使用前端界面调用后台服务

        假设你已经按我上一条回复,运行了 start_api_sister.bat,并且黑窗口显示服务运行在 http://localhost:8000。

        请按以下步骤配置 ChatGPT-Next-Web(Releases · ChatGPTNextWeb/NextChat):

        前往Releases · ChatGPTNextWeb/NextChat  下载开源免费的前端界面EXE文件,文件名通常叫:ChatGPT-Next-Web-Win-x64.exe,点击它,下载到本地。双击运行,一键安装。

        安装好打开后,界面是空的。你需要做最后一步连接:

        点击左下角 设置 (Settings) 图标。在 接口地址 (Base URL) 一栏:默认是:https://api.openai.com改为:http://localhost:8000(这就是你刚才用 start_api_sister.bat 启动的地址)。

        在 API Key 一栏:随便填一个字符,比如 sk-123456。(因为是本地运行,不需要验证,但不填可能会报错)

        模型 (Model):选择你的专属模型。(你的后端只有一个模型,不管你选什么,回复你的都是专属大模型)。

        其余参数可根据需求填写。以下截图为测试表现:

        可以看到我们的LoRA效果明显,经过微调后,大模型说话语气更加拟人化。

        作者同样测试了大模型进行数学求导,只能说情绪价值拉满,计算结果胡言乱语,这是因为作者准备的数据集没有数学相关,全部为情绪价值问答对,测试结果如下:

整个过程建议全程使用gemini,遇到任何报错都可借用gemini进行分析错误,在错误中学习,在错误中成长。

如果您觉得此文对您有帮助,请点赞收藏转发,以便让更多人看到。

此账号持续更新各种comfyui实战工作流,欢迎关注!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐