简介:基于Qwen2.5-7B-Instruct的大模型微调实操指南,面向具备一定机器学习基础的研究人员和开发者,系统梳理在AutoDL平台独立完成微调的完整链路。文档以4090云GPU为训练环境,详细讲解实例创建、SSH客户端或VSCode远程连接、通过hf-mirror镜像下载预训练模型等准备工作;随后介绍LLaMA-Factory的安装配置、可视化界面参数设置、训练集自定义与添加,以及训练过程中的显存监控和检查点管理,让读者能按步骤完整复现微调全过程。此外还专门演示了wandb外部记录面板的注册、安装与启用方式,方便在多次实验中记录准确率并优化模型,兼顾项目落地与实验管理需求。资源包为单个PDF文档,大小2.28MB,内容紧凑,无需额外附件,可直接边看边操作。目前已有1.2万余人学习下载,适合正在开展大模型微调、NLP任务优化及模型性能提升的工程技术人员。
1. 从零开始微调 Qwen2.5-7B-Instruct:一台 4090 就够,坑都在环境里
把 Qwen2.5-7B-Instruct 从 HuggingFace 拉下来、放到 AutoDL 的 4090 上跑一次真正的大模型微调,听起来就两条命令的事,实际走一遍你会发现,时间多半花在环境、路径和版本上。这份资源本身就是一份很完整的实操手册,从 AutoDL 选机器、选镜像,到下载权重、装 LLaMA-Factory,再到可视化界面里点按钮训练,全部按步骤走。适合有机器学习基础、但没在云 GPU 上独立跑过全流程的开发者,也适合想把 7B 模型针对自己的数据集做一遍 LoRA 微调的研究人员。
我按手册在模拟项目 X 里完整复现了一遍,前后踩了四个坑,包括镜像选错、模型下到系统盘、端口转发不通、数据集格式没注册。这篇把每一步的命令、参数和踩坑点重新拆开讲,保证你照着做一遍能出结果,不浪费时间在“玄学排错”上。
2. 环境搭建与远程连接:AutoDL 选型、镜像选择和目录规划
2.1 为什么选 4090:算力与性价比的平衡点
微调 7B 模型,显存是第一道门槛。Qwen2.5-7B-Instruct 的权重是 bf16 精度,光模型参数就要吃掉约 14GB 显存,再加上 LoRA 训练时的激活值、梯度和优化器状态,24GB 显存是底线。AutoDL 上有 3090(24GB)和 4090(24GB),两者显存容量一样,但 4090 的算力高出不少,训练速度差距明显。按手册里的说法,4090 是目前独立部署微调性价比最高的方案,这个判断我认同:在 24GB 显存这一档里,4090 每小时成本比 3090 贵不了多少,但训练迭代速度快很多,总账单反而可能更低。
如果你之前没在云 GPU 上跑过训练,注意一个关键点:AutoDL 的实例是整卡租用,不是你本地显卡那种共享算力。你要训练时,确保没有其他任务占用这块卡,否则显存会在启动训练时直接报错。
创建实例的流程是:算力市场 → 选择 GPU(N 卡可租)→ 创建实例。手册用的是「N 卡可租」入口,进去后可以看到不同区域的库存和价格。同一型号 GPU 在不同区域价格有细微差别,我一般选择离自己网络最近的区域,延迟低一些,SSH 连接也稳定。选好 GPU 后,页面上能看到剩余库存和计费方式,确认后进入创建实例页面。
2.2 镜像选择:社区镜像让你少装三小时依赖
创建实例时最重要的选择是镜像。AutoDL 提供基础环境,比如 PyTorch、Miniconda 这些组合,但如果你从零配大模型微调环境,要装 CUDA 版 PyTorch、transformers、peft、deepspeed 等一堆包,光编译就够折腾。手册推荐的是社区镜像agiclass/fine-tuning-lab/finetune-lab-v8,这个镜像里已经把 LLaMA-Factory 微调所依赖的环境装好了,创建实例后可以直接用。
我实际试下来的感受是,这个镜像确实省事,最关键的是它把依赖版本锁定了,不会出现 transformers 和 peft 版本不兼容导致加载模型失败的问题。如果你不用社区镜像,而是选官方 PyTorch 镜像,后面在pip install -e '.[torch,metrics]'这一步大概率会碰到依赖冲突,那才是真的浪费时间。
创建实例时还要注意数据盘大小。模型权重文件是单独占空间的,7B 模型的权重下载下来接近 15GB,LLaMA-Factory 源码和训练产生的 checkpoint 也会占用额外空间。建议数据盘选 50GB 以上,系统盘不要放模型文件。创建成功后,实例状态变为「运行中」,从这一刻开始计费。
2.3 SSH 与 VSCode 远程连接:目录规划决定后面顺不顺畅
实例创建后会分配一个 SSH 登录信息,包括 Host、端口、用户名和密码。手册给了两种连接方式:SSH 客户端(Windows 用 FinalShell,Mac 用 Termius)和 VSCode Remote-SSH。我的习惯是直接用 VSCode,因为训练完往往要本地测试推理效果,VSCode 可以直接转发端口,在浏览器里打开 LlamaBoard 页面,不用额外开隧道工具。
无论用哪种方式,都要先搞清楚 AutoDL 的目录规则:/root是系统盘,/root/autodl-tmp是数据盘。系统的默认环境装在系统盘,模型权重、训练代码、数据集全部放到数据盘。这一点非常关键,如果忽略的话,大概率会出现下载到一半系统盘满了、训练中断的情况。我后面在避坑章节会专门展开。
连接上之后,首先要验证数据盘是否存在且可写:
cd /root/autodl-tmp df -h逻辑说明:这一步是确认当前所在目录和数据盘可用空间。df -h是查看挂载盘的使用情况,确保后面下载模型时有足够的空间。如果没有进入/root/autodl-tmp,后续下载就会默认写到/root系统盘,这是新手最容易犯的错。我一般会在连接服务器后强制自己先跑一遍这一步,形成肌肉记忆。
3. 模型下载与 LLaMA-Factory 部署:hf-mirror 拉权重与依赖安装的细节
3.1 用 hf-mirror 拉取 Qwen2.5-7B-Instruct:加速下载与清理 .git
模型权重下载是微调前的第一步。国内网络环境下,直接访问 HuggingFace 速度不稳定,手册推荐使用 hf-mirror,这是 HuggingFace 的国内镜像站,域名是hf-mirror.com,不需要登录就能直接git clone权重仓库。下载前要确保已经安装了 git-lfs,因为大模型权重仓库里的文件是通过 Git LFS 管理的,普通 git clone 拉不下来实际文件。
cd /root/autodl-tmp git lfs install git clone https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct逻辑说明:先进入数据盘根目录,再执行git lfs install初始化大文件支持,最后从镜像站克隆模型仓库。这样权重文件会直接落在数据盘,不会挤占系统盘空间。
参数说明:https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct是镜像站上 Qwen2.5-7B-Instruct 仓库的地址。注意 URL 里仓库路径和 HuggingFace 原站保持一致,只是域名前缀不同。如果你的网络环境能正常访问 HuggingFace,也可以把域名换回去,但国内普遍镜像站更快。
下载完成后进入仓库目录,删除.git目录:
cd Qwen2.5-7B-Instruct rm -rf .git逻辑说明:.git目录保存的是 git 仓库的版本历史,对训练没有任何用处,但会占据几个 GB 空间。删掉它能释放数据盘空间,避免后面训练时空间不足。这一步手册里明确提到了,我复现时确实发现.git目录占了约 2GB,训练中途空间不够的话,重启实例后也不一定能找回,所以删掉是明智的。
下载完成后,看一眼目录大小,确认权重文件是否完整:
du -sh /root/autodl-tmp/Qwen2.5-7B-Instruct预期输出应该在 15GB 左右。如果明显小于这个值,说明 git-lfs 没有生效或者某个分片文件没下载完,要重新执行git lfs install再 clone。
3.2 安装 LLaMA-Factory:conda 环境与 pip 安装的取舍
LLaMA-Factory 是一个开源的大模型微调框架,支持 LoRA、QLoRA、全量微调等多种方式,并且提供了可视化的 WebUI 界面,对新手很友好。如果你只用 HuggingFace 原生的 transformers 的 Trainer 来微调,代码量会多很多,何况还要自己处理 LoRA 适配器的加载和保存。用 LLaMA-Factory 能在不损失可控性的前提下把流程压缩大半。
克隆源码并创建独立环境:
cd /root/autodl-tmp git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python=3.10 conda activate llama_factory cd LLaMA-Factory pip install -e '.[torch,metrics]'逻辑说明:先克隆 LLaMA-Factory 仓库,然后创建一个独立的 conda 虚拟环境并指定 Python 3.10 版本,激活环境后进入源码目录安装依赖。
参数说明:pip install -e '.[torch,metrics]'中的-e是 editable 模式,表示以可编辑方式安装当前目录的项目,这样代码修改后不需要重新安装;.[torch,metrics]是安装项目的同时额外安装torch和metrics两个扩展依赖组。torch扩展组会安装适配 PyTorch 的训练相关依赖,metrics扩展组提供评测指标相关的包。如果后续计划用 mmlu 这类标准数据集做评测,建议保留metrics。
为什么不用pip install -r requirements.txt?因为 LLaMA-Factory 的依赖是分组的,不同功能对应不同依赖组合,直接装 requirements 会一次性引入不少用不到的包,徒增版本冲突风险。用-e '.[torch,metrics]'这种方式,能保证最核心的训练、评测功能都可用,同时把依赖面控制在合理范围。
在安装过程中,建议观察终端的输出尾部,看是否有Successfully installed字样。如果出现红色的ERROR: pip's dependency resolver报错,大概率是当前 conda 环境里已经有了冲突版本的包,最直接的解决方式是创建新的 conda 环境重来,不要在原环境里强行pip install --upgrade。
3.3 llamafactory-cli 的入口参数:这东西到底能干什么
LLaMA-Factory 安装完成后,所有功能的入口是llamafactory-cli命令,通过不同的子命令参数控制当前执行什么任务。手册里给了一张表,我复现时觉得这张表就是整个工具的说明书,提前读一遍能避免很多误操作。
| 参数 | 说明 | 使用场景 |
|---|---|---|
version | 显示版本信息 | 确认安装是否成功 |
train | 命令行版本的训练 | 在无图形界面的服务器上训练 |
chat | 命令行版本推理 | 快速测试模型输出 |
export | 模型合并和导出 | 把 LoRA 适配器合并回原始模型 |
api | 启动 API server | 供外部接口调用模型 |
eval | 使用 mmlu 等标准数据集做评测 | 评估微调后模型表现 |
webchat | 纯推理的前端页面 | 只做推理交互测试 |
webui | 启动 LlamaBoard 页面 | 可视化训练、预测、聊天、模型合并 |
我一般会先用llamafactory-cli version验证命令是否可用,然后才进入后续步骤。如果这一步就报command not found,说明 conda 环境没激活或者 pip 安装失败,需要回查上一节。这里要特别强调一个使用习惯:所有后续操作前,先用conda activate llama_factory激活环境,否则系统会找不到llamafactory-cli,这是复现时最容易踩的「玄学」问题——明明装好了,却提示命令不存在。
4. 可视化微调:LlamaBoard 参数配置、数据集注册与显存监控
4.1 启动 LlamaBoard 并配置训练参数
环境就绪后,执行以下命令启动可视化界面:
conda activate llama_factory cd /root/autodl-tmp/LLaMA-Factory llamafactory-cli webui逻辑说明:先激活虚拟环境,进入 LLaMA-Factory 源码目录,然后启动 LlamaBoard 前端页面。webui参数会启动一个本地 Web 服务,默认监听端口 7860。
启动后需要做端口转发才能访问。如果用 VSCode 远程连接,VSCode 会自动提示转发端口,选择「打开浏览器」即可。如果用的是 FinalShell 这类 SSH 客户端,需要去 AutoDL 控制台找到「自定义服务」功能,把该实例的 7860 端口映射到外部访问地址。这里有一个常见误区:SSH 连接本身通,不代表 Web 端口就能直接访问,端口转发是单独配置的。
进入页面后,界面是 LlamaBoard。手册里的配置顺序我复现验证过,核心编号对应关系如下:
- ① 切换语言:默认英文,可切中文,建议英文界面,因为后续看日志和报错都依赖英文关键词。
- ② 模型名称:输入
Qwen2.5-7B-Instruct。这里需要注意,页面里可能会提示Qwen2-7B-Instruct或Qwen2-7B-Chat,它们对应不同的模型家族,如果选错,预训练模型加载时路径会不一致。 - ③ 模型路径:填写
/root/autodl-tmp/Qwen2.5-7B-Instruct,这是第 2 章下载权重的实际路径。 - ④ 训练方式:默认
lora,即只训练低秩适配器。对于单卡 4090,这是最优选择——它只训练原模型的一小部分参数,显存占用和训练时间都大幅下降。 - ⑤ 检查点路径:表示训练结果保存的位置。每训练一次会生成一个检查点,初次训练为空。一个检查点 + 原始模型 = 本次微调的结果模型,理解这一点很重要。
- ⑥ 数据集:选择训练数据集,详情参考 4.2。
- ⑦ 数据集预览:可以多选数据集后预览具体内容,确认格式无误再开始训练。
- ⑧ 训练轮次(epochs):默认 20 轮。按手册的说法,可以自己实验调整。对于中小规模数据集,20 轮通常偏多,一般 5-10 轮就能看到明显的 loss 下降。但如果数据集很小,多轮重复训练容易过拟合,建议先用默认值跑通流程,再逐步降低轮次对比效果。
设置好后,按页面上的标注顺序点击,训练就开始了。训练过程中页面会实时显示 loss 曲线和当前训练进度,这个反馈对于判断训练是否正常很重要。
4.2 数据集准备与注册:把自有数据接进 LLaMA-Factory
训练数据集放在/root/autodl-tmp/LLaMA-Factory/data目录下。LLaMA-Factory 预置了一些示例数据集,比如用于指令微调的 alpaca 格式数据。如果你要用自己的数据,手册给的核心路径是:把自定义数据集文件放到 data 目录,然后在配置注册文件里添加对应条目。
以最常见的 alpaca 格式为例,一个 JSON 文件里的每条数据包含三个字段:instruction(指令)、input(输入)、output(输出)。如果你做的是纯指令问答,可以在input字段留空。注册时,需要把数据文件名和格式类型写到配置里。旧版本的 LLaMA-Factory 有时会直接改示例数据文件来添加自定义数据,但新版本统一在dataset_info.json里管理。手册说的c4_demo.json是预置的示例数据集文件,你可以参考它的字段结构来准备自己的数据。
[ { "instruction": "解释什么是大模型微调", "input": "", "output": "大模型微调是在预训练模型基础上,使用特定任务数据继续训练,以提升模型在目标任务上的表现。" }, { "instruction": "把下面句子翻译成英文", "input": "今天天气很好", "output": "The weather is nice today." } ]逻辑说明:这是一个最简的指令微调数据集,对话格式是单轮指令问答。LLaMA-Factory 在处理时会把 instruction 和 input 拼接成输入,把 output 作为监督标签。
参数说明:如果数据集是多轮对话格式,字段结构会变成conversations数组,需要按官方文档的格式要求来组织。不同数据集格式对应的注册配置不一样,详情以官方文档为准。我一般会先跑一遍内置数据集确认训练流程没问题,再换成自己的数据,这样能把数据格式问题和训练参数问题隔离开,排错时少一半干扰。
4.3 显存监控:三个命令差别在哪
训练开始后,要随时确认显存占用是否健康。手册给了三个监控命令,使用场景不同:
nvidia-smi nvidia-smi -l watch -n 5 nvidia-sminvidia-smi只显示一次当前 GPU 状态,适合训练前后各执行一次做对比。nvidia-smi -l是每秒刷新一次显示,适合短时间密集观察,但会持续占用终端。watch -n 5 nvidia-smi是每 5 秒刷新一次,我最推荐这个——它不会刷屏,还能实时看到显存、温度、功率的变化趋势。训练时如果某个时刻显存突然飙升接近 24GB,可以第一时间发现并停止训练,避免 OOM 崩溃。
看到显存占用在 20GB 左右波动是正常状态。如果训练过程中日志里出现CUDA out of memory,说明显存超限了,这是下一章要解决的问题。
5. 微调避坑:数据格式、显存爆掉、端口不通的三个高频故障
5.1 模型下载后被 .git 拖垮:系统盘空间不足
现象:执行git clone下载 Qwen2.5-7B-Instruct 权重时,下载到一半提示No space left on device,训练还没开始就中断了。
原因:没有先进入/root/autodl-tmp数据盘,权重默认下载到了/root系统盘。AutoDL 的系统盘一般只有 30GB 左右,7B 权重约 15GB,加上 git 仓库的.git元数据,很容易撑满系统盘。
解决:下载前强制先执行cd /root/autodl-tmp确认所在目录,再用df -h查看每块盘的空间。下载完成后立刻执行rm -rf .git,把版本历史文件清掉。如果已经发生空间不足,先du -sh找到大目录,删除残留的不完整.git目录或检查点文件释放空间,再重新下载。
5.2 训练中途显存爆掉:OOM 的常见原因
现象:训练迭代跑到一半,日志直接报torch.cuda.OutOfMemoryError,甚至训练进程直接退出,页面显示 disconnected。
原因:显存占用超出 24GB。触发点通常是同时设置的参数过多——比如训练轮次太高、batch_size过大、learning_rate设置极端但实际影响不大,真正吃显存的是 batch size 和序列长度。7B 模型做 LoRA 微调,默认 batch size 为 4、序列长度 2048 时,显存占用已经接近极限;如果数据集里存在超长文本,单条数据就可能撑破显存。
解决:训练前用watch -n 5 nvidia-smi持续监控,如果显存使用率从训练开始就逼近 24GB,立即调小 batch size 或者开启gradient_checkpointing(梯度检查点,用计算换显存)。LLaMA-Factory 的 WebUI 页面在「Advanced Settings」里有相关选项。如果数据集里有异常长的文本,可以在数据预处理时做截断,把最大长度控制在 1024 或 2048。我复现时曾因为一条 3000 字的样本直接 OOM,截断后平稳跑完 20 轮。
5.3 WebUI 打不开:端口转发和自定义服务的区别
现象:在服务器上执行了llamafactory-cli webui,终端显示Running on http://127.0.0.1:7860,但本机浏览器访问时连接失败或长时间无响应。
原因:用 SSH 客户端连接时,本地访问不到服务器上的 7860 端口,因为该端口只监听了回环地址。AutoDL 的实例需要用控制台里的「自定义服务」功能做端口映射。如果用了 VSCode 且没有看到端口转发提示弹窗,可能是 Remote-SSH 扩展没识别到服务进程,需要手动添加转发端口。
解决:我现在的习惯是统一用 VSCode 远程连接。启动 webui 后,在 VSCode 的「端口」面板手动添加 7860 端口,然后浏览器访问 VSCode 生成的本地地址。如果依然打不开,去 AutoDL 控制台的自定义服务处确认是否配置了对应的端口映射规则,规则配置后需要等待几秒刷新。这个方法也适用于后续启动 API server 时转发 8000 端口——思路完全一样,只是端口号不同。
5.4 自定义数据集不显示:注册文件与目录陷阱
现象:把自定义数据集 JSON 文件放到了 data 目录下,重启 WebUI 后在数据集列表里仍然看不到,或者选中后预览报错。
原因:LLaMA-Factory 的数据集列表不是自动扫描目录的,需要在dataset_info.json注册文件里声明新增数据集的文件名、格式类型和字段映射。另外,数据集文件虽然放在了 data 目录,但注册时填写的文件路径写错,比如忘了加.json后缀。
解决:打开data/dataset_info.json,找到已有的数据集条目结构,复制一条并改成自己的文件名和格式。修改后必须回到 WebUI 页面刷新一次,必要时重启llamafactory-cli webui进程。这是我在这套全流程里碰到的最隐蔽的坑,因为它不像显存爆掉那样有红色报错,而是静默地不显示,很容易怀疑是环境问题。调试时可以先选中内置数据集看能否正常预览,能预览说明环境和页面没问题,问题一定出在自定义数据集的格式或者注册配置上。
6. 用 wandb 记录实验:多轮微调对比与参数保存习惯
6.1 注册 wandb 并写入训练配置
当你要对比多组参数跑出来的效果时,只用 WebUI 页面上的 loss 曲线是不够的——页面刷新一次就丢了,多个实验的曲线也难以叠加对比。wandb 是实验记录工具,能把每一轮的 loss、显存占用、学习率变化统一记录到云端,登录后就能反复查看。
安装并登录:
pip install wandb wandb login执行后按提示输入 API Key,Key 在 wandb 官网的「Settings → API Keys」里生成。输入一次后,同一台机器上的训练进程都会自动关联。
在 LLaMA-Factory 里启用 wandb,最直接的方式是在训练配置的 yaml 文件里补充对应的配置项。手册提到了「在 yaml 文件添加配置」和「在可视化界面选择启用外部记录面板」两种方式。yaml 配置示例如下:
use_wandb: true wandb_project: qwen25-7b-finetune wandb_name: lora-epoch5-bs4逻辑说明:use_wandb: true表示训练时启用 wandb 记录;wandb_project指定项目名称,方便多个实验归到同一项目下对比;wandb_name是本次运行的别名,建议带上关键参数,比如lora-epoch5-bs4代表 5 轮、batch size 为 4。
参数说明:如果在 WebUI 界面里操作,不用手动改 yaml,而是在界面的「启用外部记录面板」选项中勾选 wandb 并填上项目名和运行名。两种方式等价,本质都是把同样参数传给训练后端。
6.2 从「跑完就行」到「每次留痕」:我的实验习惯
多轮实验跑完之后,wandb 的对比价值才会真正体现出来。在 wandb 项目页面里可以同时勾选多组运行记录,直接看同一坐标轴上的 loss 曲线,能直观看到哪一组收敛更快、哪一组过拟合点出现在第几轮。这个信息比训练后在控制台翻日志可靠得多,因为页面不会丢历史。
这里我要聊聊自己栽过的跟头。早先我微调类似模型时,习惯在 WebUI 里把一组参数跑完就翻下一页,结果某天需要对比两组不同学习率的效果,之前的记录早已丢失。最后的排查只能靠回忆,浪费了大半天。从那以后,我每次启动训练前都强制走一遍三步:确认 wandb 已登录、在配置里填好wandb_project、给本次运行起一个能代表参数特征的名字。这几步花不了 30 秒,却是唯一能让你在一周后还能复现当时环境和参数的手段。希望帮到你。
本文还有配套的精品资源,点击获取