简介这是一份面向具备机器学习基础的开发者与研究人员的Qwen2.5-7B-Instruct大模型微调实战指南聚焦AutoDL云GPU上的完整微调链路。资源为1个PDF文件大小2.28MB内容自带操作截图与命令示例可当作随查随用的部署手册。文档从注册AutoDL、选购4090显卡、创建实例讲起依次覆盖通过hf-mirror下载预训练模型、安装LLaMA-Factory、配置训练数据集、启动可视化界面、监控显存以及接入wandb记录实验等环节并给出每步的关键配置和注意事项能够帮助读者减少环境配置层面的踩坑。作者结合具体场景说明了LoRA微调、检查点保存与模型合并等概念便于在NLP任务优化、模型效果提升等实际项目中按需调整参数。该资源已有12452人学习适合希望独立完成大模型微调并能复现全流程的研究人员和开发者。1. 为什么是 AutoDL 4090 Qwen2.5-7B-Instruct一次不算顺利的微调开局大模型微调这件事卡住大多数人的不是算法而是第一步的硬件和依赖环境。我最初在本地用一张消费级显卡试着跑 Qwen2.5-7B-Instruct还没等到训练开始光是装 CUDA、适配 PyTorch、解决显存溢出就折腾了两天。后来换成 AutoDL 的 4090 云 GPU整套流程才真正走通。如果你也打算用自己的数据集微调 7B 级模型又不想为了一张卡去配整机这篇记录就是给你参考的——从租卡、建实例、拉模型到启动 LLaMA-Factory 可视化界面完成一次完整微调每一步我都按实际操作写下来包括那些花了钱才买到的教训。2. 租卡建环境AutoDL 实例创建和三种连接姿势2.1 注册实名与选卡4090 为什么是性价比首选先去 AutoDL 官网注册账号然后按平台要求完成实名认证。这一步没什么技巧跟着平台指引走就行几分钟的事。认证通过之后首页进入「算力市场」选择 GPU。选卡这件事我多说两句。7B 模型的微调主流做法是 LoRA显存占用比全参微调小一个量级。4090 有 24GB 显存跑 Qwen2.5-7B-Instruct 的 LoRA 训练、序列长度 2048、batch size 4显存占用在 1418GB 之间浮动既有余量又不至于浪费钱。比它便宜的卡容易中途 OOM比它贵的 A100、H800 对个人跑实验来说成本又太陡。所以 4090 是现阶段个人微调 7B 模型比较平衡的选项。选卡时注意看地区、价格和库存不同地区的价格差异挺明显。选定后点击「创建实例」进入配置页面。2.2 创建实例社区镜像 finetune-lab-v8 省掉半天依赖时间实例创建页面的关键配置有三项GPU 数量选 1 张计费方式按自己的实验节奏选按量或包时镜像选择是整套流程里最值得花心思的一项。镜像下拉框里会有官方镜像和社区镜像两类这里选社区镜像搜索agiclass/fine-tuning-lab/finetune-lab-v8用最新版本。这个镜像我已经验证过里面预装好了微调所需的主流依赖包括 PyTorch、CUDA 工具链、HuggingFace 相关库、LLaMA-Factory 的运行时依赖等。等于别人把最容易出问题的依赖安装环节替你跑完了。有一点要提醒镜像里的预装环境只是一个起点后面我们还要自己创建 conda 虚拟环境来隔离版本避免和镜像自带的 Python 环境互相污染。这是我在多次实验中养成的习惯虚拟环境一旦乱了排查依赖冲突的时间比重新训练还长。实例创建成功后状态会变为「运行中」从这一刻开始计费。不用的时候在控制台点「关机」暂停计费下次使用再「开机」。注意 AutoDL 对关机状态有保留策略长时间不用的实例可能被释放重要数据记得随时同步走。2.3 SSH 连接FinalShell / Termius 与服务端口转发实例创建完成后控制台会显示 SSH 连接信息包括主机地址、端口和密码。Windows 上我用 FinalShellMac 上推荐 Termius两个都是图形化 SSH 客户端填上连接信息就能登录。命令行方式也可以但图形化工具同时提供 SFTP 面板上传下载训练数据、下载检查点都方便。需要注意 AutoDL 的目录约定系统盘空间有限数据要放在数据盘/root/autodl-tmp下。如果直接往/root写模型文件很可能几十 GB 的模型没下完系统盘就满了。连接成功后需要用网页版 LLaMA-Factory 时需要做端口转发。如果用 SSH 客户端连接需要到 AutoDL 控制台的「自定义服务」页面添加端口映射如果后面用 VSCode 连接可以直接在 VSCode 里做端口转发两种方式选一个就行。2.4 备用连接VSCode Remote-SSH 直接开端口如果你的日常工作流在 VSCode 里建议直接在扩展市场安装Remote - SSH插件然后选择「Connect to Host」新建一个连接配置填上控制台给的 SSH 信息。VSCode 远程连接的好处有三个一是内置终端跑命令不用切窗口二是可以直接编辑远程文件比如改 train 的 yaml 配置、改数据集 json三是有「端口转发」面板启动 webui 后把端口映射到本地直接在浏览器操作。我用 FinalShell 做文件传输用 VSCode 做代码编辑和端口转发两个工具各管一段整个微调流程会顺手很多。3. 拉模型装依赖hf-mirror 下载与 LLaMA-Factory 环境3.1 先搞清楚 /root/autodl-tmp 数据盘AutoDL 实例的磁盘分两块系统盘和数据盘。系统盘主要放操作系统和预装软件数据盘挂载在/root/autodl-tmp容量更大适合放模型权重、数据集和训练产物。初次使用的人容易犯一个错拿到 SSH 后直接在当前目录也就是/root底下开始git clone模型下到一半磁盘满了。我一开始也这么干过后来发现模型文件根本放不下。正确做法是先进入数据盘所有大文件都放在这里。cd /root/autodl-tmp df -hdf -h用来查看两个挂载点的剩余空间。一般数据盘的可用空间远大于系统盘。之后的模型下载、LLaMA-Factory 源码、数据集全部统一放在/root/autodl-tmp下面这个习惯能省下很多麻烦。3.2 用 hf-mirror 拉 Qwen2.5-7B-Instruct预训练模型从 HuggingFace 下载是常规路径但直接拉取对大文件不太友好断点续传和速度都不稳定。国内一般用 hf-mirror 镜像站域名前缀替换为https://hf-mirror.com其余路径和 HuggingFace 一致模型 ID 仍为Qwen/Qwen2.5-7B-Instruct。下载方式用的是 Git LFS。先确认 Git LFS 已安装然后按三步走cd /root/autodl-tmp git lfs install git clone https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct第一行进入数据盘第二行初始化 Git LFS仅首次需要第三行开始克隆模型仓库。整个 Qwen2.5-7B-Instruct 仓库包含模型权重、配置文件、分词器文件总量在 15GB 左右具体大小取决于版本和是否包含 safetensors 分片。下载耗时取决于网络状况耐心等待即可。下载完成后cd Qwen2.5-7B-Instruct查看文件列表确认这些文件都齐全model.safetensors.index.json、多个model-00001-of-0000X.safetensors分片、config.json、tokenizer.json、tokenizer_config.json。缺少任何一个文件后续加载模型都会报错。可以用ls -lh查看每个文件大小确认不是 0 字节的残废文件。3.3 删掉 .git给数据盘省出十几 GB这一步是我觉得特别值得分享的细节。用git clone拉下来的模型仓库里带着完整的.git目录里面存着 Git LFS 的指针文件和历史记录少则几 GB、多则十几 GB。这些对训练毫无用处却会白白占用数据盘空间。cd /root/autodl-tmp/Qwen2.5-7B-Instruct rm -rf .git执行完再看df -h会发现数据盘可用空间明显增加。这个操作在处理 7B、13B 甚至更大模型时尤其有用模型文件越大.git占的空间越可观。删掉之后模型文件本身不受影响因为在 Git LFS 拉取完成后实际权重文件已经完整落地到工作区了。3.4 conda 虚拟环境与 LLaMA-Factory 安装模型就位后开始搭建微调框架。微调工具用的是 LLaMA-Factory一个把训练、推理、评测、模型合并都封装成命令行和 Web 界面的开源框架对 Qwen 系列支持比较完善。环境隔离这步不能省。社区镜像预装的是基础 Python 环境直接在里面装 LLaMA-Factory 的依赖很可能和镜像自带的包版本冲突。创建一个独立的 conda 虚拟环境conda create -n llama_factory python3.10 conda activate llama_factorypython3.10是我验证过的版本LLaMA-Factory 在 3.10 下依赖解析最稳3.11 也能跑但某些依赖包需要额外编译没必要给自己找麻烦。接下来拉取源码并安装依赖cd /root/autodl-tmp git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e .[torch,metrics]-e表示可编辑安装源码目录直接作为包引入方便后续改代码调试[torch,metrics]这个 extra 会安装 PyTorch 和评测相关的依赖比如 mmlu 评测要用的 metrics 库。如果只想跑训练和推理.[torch]就够要跑标准评测才需要 metrics。安装过程需要一点时间因为要拉不少依赖包。装完后验证一下环境llamafactory-cli version能输出版本号说明框架安装成功。后文所有操作——启动 Web 界面、命令行训练、命令行推理、模型合并、启动 API 服务——都从这个命令入口进用不同的子命令控制行为。这是 LLaMA-Factory 的核心逻辑理解了它后面就不会迷路。4. 开始微调llamafactory-cli webui 界面参数逐个过4.1 启动 webui 并打通端口LLaMA-Factory 提供了可视化界面 LlamaBoard通过llamafactory-cli webui启动。这条命令会读本地配置、加载依赖然后起一个 Web 服务默认监听127.0.0.1:7860。llamafactory-cli webui启动日志里出现Running on local URL: http://127.0.0.1:7860就说明服务起来了。但这时候在本地浏览器直接访问是打不开的因为服务跑在云服务器上且默认只监听本地回环地址。需要做端口转发用 VSCode 连接的在「端口」面板添加转发填 7860自动映射到本地浏览器访问http://localhost:7860即可。用 FinalShell/Termius 这类 SSH 客户端的到 AutoDL 控制台的「自定义服务」页面添加 7860 端口的映射平台会给一个访问地址。端口打通后浏览器里就是 LlamaBoard 界面。首次加载需要一点时间因为要读模型配置和模板列表。如果页面白屏或转圈多半是端口转发没生效先回控制台检查自定义服务状态。4.2 界面 11 个参数怎么填LlamaBoard 打开后默认是英文界面左上角可以切到中文。模型训练相关的参数集中在顶部我把每个影响训练行为的参数逐个说清楚① 模型名称输入Qwen2.5-7B-Instruct如果下拉框里显示Qwen2.5-7B-Chat也不要慌新版本框架对旧命名做了兼容输入框里手动补成Qwen2.5-7B-Instruct即可。② 模型路径填/root/autodl-tmp/Qwen2.5-7B-Instruct也就是第 3 章里模型实际下载到的目录。这个路径是训练时真正去读权重的地方填错直接报错找不到模型。③ 微调方法默认lora。LoRA 只训练低秩适配矩阵参数效率高、显存占用小是个人开发者微调 7B 模型的默认选择。全参微调full在 4090 上基本跑不动 7B不要尝试。④ 检查点路径置空。每训练完一轮框架会生成一个检查点checkpoint相当于「原始模型 本轮微调增量」。初次训练没有检查点跑完一次之后这里就能选到之前生成的检查点可以在上次基础上继续训练。⑤ 数据集选择你注册好的训练集。刚开始可以用c4_demo或alpaca_zh_demo验证流程能否走通等流程没问题再换自己的数据。数据集预览按钮可以检查选中数据的格式。⑥ 训练轮次默认 20。这是个大坑后面排错章节会细说。20 轮基本是过拟合起步小数据集一般 35 轮就够。初次验证流程建议先设 3 轮跑通后再按效果调整。⑦ 学习率LoRA 默认1e-4左右7B 模型常用区间是1e-5到2e-5。学习率太大会让 loss 震荡太小则收敛极慢。我一般从2e-5起步。⑧ 序列长度默认 2048 或 1024取决于界面版本。这个受限于你的数据长度文本超过序列长度会被截断序列越长显存占用越大。⑨ Batch Size默认 2 或 4。显存不够就把 batch size 减半同时可以调大梯度累积步数来弥补。⑩ 梯度累积当显存不足以支撑大 batch 时用多步小 batch 累积近似大 batch 的效果。⑪ 学习率调度器默认cosine7B 模型微调里比较稳妥的选择。填完之后点页面底部的「开始」按钮训练就启动了。界面会实时打印当前轮的 loss、学习率、显存占用等日志。4.3 注册训练数据集c4_demo.json 里加一行LLaMA-Factory 的数据集统一登记在一个清单文件里源码目录data/下的dataset_info.json。界面里能选到的所有数据集都从这个文件读取。自己加数据集的正确姿势分两步放文件、注册。cd /root/autodl-tmp/LLaMA-Factory/data ls先把自定义数据集 json 文件放到这个目录。这一步注意数据格式是 LLaMA-Factory 规定的模板结构常见的是alpaca格式每条数据有三个字段instruction指令、input输入可空、output期望输出。{ custom_sft: { file_name: custom_data.json, format: alpaca, columns: { prompt: instruction, query: input, response: output } } }上面这段是需要在dataset_info.json中追加的注册片段其中custom_sft是数据集在界面中的显示名file_name对应实际文件format告诉框架解析格式columns把数据文件的字段映射到框架要求的三个标准字段。具体索引键的拼写以当前版本dataset_info.json内已存在条目的格式为准直接仿照c4_demo的写法在文件末尾追加即可。之后回到 webui 页面刷新数据集下拉框就能看到custom_sft出现在列表里。4.4 训练时盯显存watch -n 5 nvidia-smi训练跑起来之后很多人关心「显存够不够」但只看一次nvidia-smi说明不了问题——训练过程中显存占用是波动的前向传播、梯度计算、优化器状态在不同阶段占用量不一样。需要周期性刷新看趋势nvidia-smi -l watch -n 5 nvidia-smi-l是每秒刷新一次刷新太快日志刷屏watch -n 5每 5 秒刷新一次是盯着训练显存时最常用的方式。看的时候重点看MiB列和「Volatile GPU-Util」利用率。如果显存接近 24GB 上限训练大概率要 OOM 中断利用率长期接近 0 就说明 GPU 在等数据数据加载是瓶颈。4.5 用 wandb 记录每次实验曲线单次训练看终端日志就够但要对比多组实验——比如不同学习率、不同数据集规模下的效果差异就需要一个集中记录实验结果的工具。wandbWeights Biases是我一直在用的方案每次训练的 loss 曲线、学习率变化、显存占用都会打包记录浏览器里就能对比。接入分两步。第一步注册 wandb 账号在 Python 环境里安装客户端pip install wandb wandb login登录时会提示粘贴 API key到 wandb 官网的个人设置里复制即可。第二步在训练配置中开启记录LLaMA-Factory 的 yaml 配置文件里加上use_wandb: true或者直接在 webui 界面勾选「启用外部记录面板」。勾选后训练开始的同时会自动创建一条 wandb 记录训练完成后在 wandb 网页端就能看到完整的曲线。5. 避坑微调路上翻车的五个典型场景5.1 模型下拉框找不到 Qwen2.5-7B-Instruct现象webui 的模型名称下拉列表里只有Qwen2.5-7B-Chat或者搜不到Qwen2.5-7B-Instruct界面报「模型不存在」。原因LLaMA-Factory 不同版本对 Qwen2.5 系列模型的命名兼容有差异。你本地模型目录名虽然是Qwen2.5-7B-Instruct但框架内置的模型注册表可能还在用旧命名或待更新的映射。解决不要死磕下拉框。直接在下拉框位置手动输入Qwen2.5-7B-Instruct模型路径填成/root/autodl-tmp/Qwen2.5-7B-Instruct。代码里真正加载模型读的是路径只要路径指向了正确的模型目录名字对得上就正常。我在多个版本的 LLaMA-Factory 上都这么干过还没出过问题。5.2 训练到一半 OOM显存不够绝不是加钱换卡一条路现象训练日志出现CUDA out of memory也有写作torch.cuda.OutOfMemoryError训练进程被杀。OOM 高发在开始训练后的前几步有时也在某个大 batch 的前向传播阶段。原因7B 模型即使只训练 LoRA 权重也要加载完整基座模型到显存。当序列长度和 batch size 设置偏大时激活值占用的显存会迅速膨胀24GB 的 4090 也会被顶爆。解决按顺序做三件事。先把max_length从 2048 降到 1024再把 batch size 从 4 降到 2如果还不够调大梯度累积步数gradient accumulation steps保持等效 batch 不变。这三板斧下去基本能解决大多数 OOM。我自己训练时习惯先用一个只有几十条的 mini 数据集跑通流程再换正式数据用最小配置验证环境能省下不少真金白银的 GPU 时间。5.3 模型下载到一半数据盘满了现象git clone模型仓库时报No space left on device或ls看到的权重文件只有几百 KB 到几 MB。原因第一个可能是你忘记进/root/autodl-tmp就在/root下执行了下载模型填满了系统盘第二个可能是 Git LFS 下载不完整剩余文件还在排队拉取。解决先df -h确认哪个盘满了。如果系统盘满把/root下已下载的部分移到数据盘清空系统盘再做git clone。如果数据盘满先看看是不是模型的.git目录占了太多空间参考第 3.3 节删掉.git。数据盘满了也是这个思路把rm -rf .git提前到下载完成后立即执行能腾出好几个 GB 的空间。5.4 关机后 SSH 连不上现象实例关机再开机SSH 客户端报连接超时或拒绝连接。原因AutoDL 的实例在「关机」状态下是完全停止的不分配算力也不占网络端口SSH 自然连不上。很多人以为关机只是暂停某些功能实则是整机下线状态。官方对关机状态还有保留时长限制长时间关机数据可能被回收。解决先在浏览器登录 AutoDL 控制台确认实例状态。如果是「关机」点「开机」等状态变为「运行中」再连 SSH。开机过程一般需要十来秒到半分钟启动完成后 SSH 就能正常连接。我从这之后养成的习惯是每天实验结束时看一眼控制台确认实例是关机还是运行心里有数。5.5 训练报「数据集格式错误」的 RuntimeException现象点了开始训练几秒后日志报数据集解析异常常见的有KeyError: instruction、ValueError:之类指向你注册的数据集。原因数据集 json 里的字段名和dataset_info.json中columns映射的字段对不上。比如你的数据文件里写的是prompt注册时却映射到instruction框架按映射去找字段找不到就崩。解决先确认数据格式。打开数据文件看每条记录的实际字段名再对照dataset_info.json里columns映射的键名。自己写数据时最省事的办法是直接照抄框架内置 demo 数据的字段结构instruction、input、output然后注册表里columns三个键映射到这三个字段。改完后到 webui 点「数据集预览」能正常预览出内容再启动训练。6. 验证跑通微调完怎么确认这个模型真的能用了训练日志显示 loss 降到 0.5 甚至更低界面输出「训练完成」——这只能说明程序跑完了模型质量到底如何还得靠下面几步验证。6.1 检查训练产物训练完成后webui 界面会产生一个检查点checkpoint目录通常位于LLaMA-Factory源码目录下的output里比如output/qwen2_5_7b_instruct_lora/。里面应该有adapter_config.json和adapter_model.safetensors两个文件——前者是 LoRA 配置后者是训练出来的适配器权重。展开看adapter_model.safetensors大小不是 0 字节说明训练确实落盘了。6.2 用对话页面实测更直观的验证方式是直接和微调后的模型对话。在 webui 里切到「Chat」页面选择刚才训练出的检查点作为微调权重基座模型路径保持原样输入一条和你的训练数据同类型的问题。我建议同时准备两个问题来测一个来自训练集看模型是否「记住」了期望输出一个来自训练集之外看模型是否从训练数据中泛化出了能力。如果两个问题都能答出合理的定向内容而不是基座模型那种空泛的套话微调就是有效的。如果训练集里的问题答得好、集外问题答得跟基座模型没区别说明微调过拟合了需要减小训练轮次。6.3 导出合并模型验证没问题后还需要把 LoRA 适配器和基座模型合并成一份完整的模型权重这样后续部署 API 服务或下载到本地使用都不需要再带一份 LoRA 适配器。LLaMA-Factory 提供 export 命令llamafactory-cli export \ --model_name_or_path /root/autodl-tmp/Qwen2.5-7B-Instruct \ --adapter_name_or_path /root/autodl-tmp/LLaMA-Factory/output/qwen2_5_7b_instruct_lora \ --template qwen \ --finetuning_type lora \ --export_dir /root/autodl-tmp/merged_model--model_name_or_path指基座模型路径--adapter_name_or_path指训练出的 LoRA 检查点--export_dir是合并后模型的输出目录。合并完成后建议用df -h确认数据盘剩余空间够用——7B 模型合并后的体积和基座模型相当大约 15GB 上下。从那以后我每次微调完都强制自己走一遍这个流程先看检查点文件再开 Chat 页面对话测试最后合并导出。对话测试这一步最不能省——它能在十分钟内告诉你这次微调是有效还是白跑。这套验证流程帮我挡下了至少三次「看 loss 以为成功、实际效果一塌糊涂」的情况。希望这篇记录能帮你在微调路上少走几步弯路一次跑通。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?