2026/3/27 13:57:34
网站建设
项目流程
四方区企业型网站建设,泰安网签成交量最新,企业宣传网站模板下载,上海市建设厅网站checkpoint路径填不对#xff1f;教你快速定位训练结果
微调大模型时#xff0c;最让人抓狂的不是显存爆了、不是训练崩了#xff0c;而是——模型训完了#xff0c;却找不到权重在哪。 你翻遍 /root/output#xff0c;看到一堆带时间戳的文件夹#xff1a;v2-20250412-…checkpoint路径填不对教你快速定位训练结果微调大模型时最让人抓狂的不是显存爆了、不是训练崩了而是——模型训完了却找不到权重在哪。你翻遍/root/output看到一堆带时间戳的文件夹v2-20250412-163245、v3-20250412-170822……点进去又是层层嵌套的checkpoint-50、checkpoint-100、checkpoint-150。运行推理命令时把路径一粘报错FileNotFoundError: Cant find adapter_config.json再换一个又提示ValueError: Expected state dict to contain base_model.model.embed_tokens.weight。别急——这不是你操作错了也不是镜像有问题而是LoRA微调产物的结构逻辑和传统全参微调完全不同而绝大多数教程只告诉你“填对路径”却没说清“为什么这个路径才对”。本文不讲原理推导不堆参数表格就用最直白的方式带你三步锁定正确checkpoint路径并彻底理解背后的设计逻辑。哪怕你是第一次接触ms-swift、第一次跑LoRA也能在2分钟内确认该用哪个文件夹、哪个子目录、哪一行命令。1. 先搞懂LoRA微调产物到底长什么样很多新手默认“微调完的模型一个完整模型文件夹”但LoRA不是这样工作的。它不修改原始模型权重而是额外训练一组小规模适配器adapter推理时动态加载到基础模型上。因此训练产物里没有.bin或.safetensors主模型文件只有adapter相关的配置与权重。在本镜像中执行swift sft后所有输出都落在/root/output下。我们先看一眼典型结构cd /root/output ls -l # 输出示例 # drwxr-xr-x 3 root root 4096 Apr 12 16:32 v2-20250412-163245 # drwxr-xr-x 3 root root 4096 Apr 12 17:08 v3-20250412-170822每个vX-xxxx文件夹是一个独立训练任务对应一次sft命令。进入任一任务目录cd v2-20250412-163245 ls -l # 输出示例 # drwxr-xr-x 3 root root 4096 Apr 12 16:32 checkpoint-50 # drwxr-xr-x 3 root root 4096 Apr 12 16:33 checkpoint-100 # -rw-r--r-- 1 root root 242 Apr 12 16:32 adapter_config.json # -rw-r--r-- 1 root root 128 Apr 12 16:32 README.md # -rw-r--r-- 1 root root 512 Apr 12 16:32 trainer_log.json注意这三点adapter_config.json是关键入口它定义了LoRA的秩rank、alpha、目标模块等是swift infer识别adapter的唯一依据checkpoint-XX是真正的权重快照每个checkpoint文件夹里都包含adapter_model.safetensors或.bin和adapter_config.json❌根目录下的adapter_config.json只是模板它不带权重不能直接用于推理。所以正确路径 output/vX-xxx/checkpoint-XX完整路径而不是output/vX-xxx或output/vX-xxx/checkpoint-XX/adapter_model.safetensors。一句话记住swift infer --adapters后面填的必须是一个包含adapter_config.json和adapter_model.*的完整目录路径且该目录里不能有其他同名文件干扰。2. 三步法快速定位唯一可用checkpoint不用猜、不用试、不靠运气。按顺序执行以下三步100%锁定你要的路径。2.1 第一步确认训练任务IDvX-xxx打开训练日志找第一行带Saving model checkpoint的记录tail -n 50 /root/output/v2-20250412-163245/trainer_log.json | grep Saving model checkpoint # 输出示例 # {step: 50, loss: 0.1234, learning_rate: 1e-04, epoch: 0.5, timestamp: 2025-04-12T16:32:45, message: Saving model checkpoint to /root/output/v2-20250412-163245/checkpoint-50}这里明确告诉你最新保存的checkpoint是checkpoint-50所属任务是v2-20250412-163245。如果日志被覆盖直接看文件夹修改时间ls -t /root/output | head -n 1 # 输出v2-20250412-163245 → 这就是最新任务2.2 第二步验证checkpoint是否完整关键很多同学卡在这一步看到checkpoint-100就直接用结果报错。因为checkpoint-100可能只保存了部分文件比如训练中断后未写完。安全做法检查该目录下是否存在两个核心文件ls -l /root/output/v2-20250412-163245/checkpoint-100/ # 必须同时存在 # -rw-r--r-- 1 root root 242 Apr 12 16:33 adapter_config.json # -rw-r--r-- 1 root root 1.2M Apr 12 16:33 adapter_model.safetensors如果只有adapter_config.json没有adapter_model.*说明该checkpoint写入失败跳过如果文件大小为0如0 bytes也跳过只有两者都存在且非空才是可使用的checkpoint。2.3 第三步一键生成可用推理命令写个简单脚本自动拼出完整命令复制即用# 替换为你的真实路径 TASK_DIRv2-20250412-163245 CKPT_DIRcheckpoint-100 echo CUDA_VISIBLE_DEVICES0 \\ echo swift infer \\ echo --adapters /root/output/$TASK_DIR/$CKPT_DIR \\ echo --stream true \\ echo --temperature 0 \\ echo --max_new_tokens 2048执行后输出CUDA_VISIBLE_DEVICES0 \ swift infer \ --adapters /root/output/v2-20250412-163245/checkpoint-100 \ --stream true \ --temperature 0 \ --max_new_tokens 2048粘贴进终端回车——这次一定能跑通。3. 常见填错路径的5种情况及修复方案下面这些错误90%的新手都踩过。对照自查立刻解决。3.1 错误1填了output/vX-xxx缺checkpoint子目录现象报错ValueError: Cannot find adapter_config.json in /root/output/v2-20250412-163245原因vX-xxx目录下只有adapter_config.json模板没有实际权重修复补上/checkpoint-XX例如/root/output/v2-20250412-163245/checkpoint-1003.2 错误2填了output/vX-xxx/checkpoint-XX/adapter_model.safetensors现象报错OSError: adapter_config.json not found原因--adapters参数要求传目录不是文件路径修复删掉文件名只留目录/root/output/v2-20250412-163245/checkpoint-1003.3 错误3路径里有中文或空格如我的微调结果现象bash: syntax error near unexpected token newline原因shell无法解析含空格路径未加引号修复用单引号包裹路径--adapters /root/output/我的微调结果/checkpoint-50但本镜像默认路径无中文此问题多见于自定义部署3.4 错误4用了旧任务的checkpoint如v1-xxx现象模型回答仍是原始身份“我是阿里云开发的…”原因训练数据或参数不同旧checkpoint未注入新身份修复确认trainer_log.json里dataset字段是否为self_cognition.json只用匹配任务的checkpoint3.5 错误5路径拼写错误大小写、横线、数字错位现象No such file or directory原因Linux严格区分大小写v2写成V2、checkpoint-100写成checkpoint_100均失败修复用tab键自动补全路径或先ls /root/output/确认真实名称4. 进阶技巧让路径管理不再混乱训练多了output里几十个文件夹手动找太低效。这里给你三个实用技巧4.1 技巧1训练时指定唯一任务名推荐下次运行sft加--output_dir参数自定义路径名避开时间戳swift sft \ --model Qwen2.5-7B-Instruct \ --train_type lora \ --dataset self_cognition.json \ --output_dir output/self_cognition_v1 \ # ← 关键自定义清晰名称 ... # 其他参数不变训练完路径直接是/root/output/self_cognition_v1/checkpoint-100一目了然。4.2 技巧2用软链接固定最新checkpoint每次训练完自动创建latest软链接指向最新可用checkpoint# 训练结束后执行替换为你的实际路径 ln -sf /root/output/v2-20250412-163245/checkpoint-100 /root/output/latest之后推理命令永远用swift infer --adapters /root/output/latest ...4.3 技巧3写个检查脚本一键诊断保存为check_checkpoint.sh放在/root下#!/bin/bash if [ ! -d $1 ]; then echo ❌ 路径不存在: $1 exit 1 fi if [ ! -f $1/adapter_config.json ]; then echo ❌ 缺少 adapter_config.json exit 1 fi if [ ! -f $1/adapter_model.safetensors ] [ ! -f $1/adapter_model.bin ]; then echo ❌ 缺少 adapter_model.* 权重文件 exit 1 fi echo 路径有效可直接用于 swift infer使用chmod x check_checkpoint.sh ./check_checkpoint.sh /root/output/v2-20250412-163245/checkpoint-100 # 输出 路径有效可直接用于 swift infer5. 总结路径问题的本质是理解LoRA的加载机制你填不对路径根本原因不是手误而是没意识到LoRA不是“替换模型”而是“挂载插件”。--adapters不是指向一个模型而是指向一个插件包——它必须同时包含描述adapter_config.json和功能adapter_model.*缺一不可。所以下次再遇到路径报错别急着重训按这三步走① 找最新任务目录ls -t output | head -1② 进入其checkpoint-XX确认两个文件都在③ 用完整绝对路径填入--adapters。10秒定位零失败率。现在打开你的终端cd到/root/output敲下ls——那个让你纠结半天的checkpoint其实一直安静地躺在那里只等你用对的方式把它请出来。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。