问题出现得很突然,日志倒是留得挺全。提交 jsonl 后微调任务一直停在 validating,两小时没有变化,文件上传时状态已经是 processed,样本 1200 条,每条平均 900 token。

刚开始盯着「账号并发微调任务已满,新任务在排队」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。文件刚上传完,后台还在做格式二次校验。还有一种是样本里有超长行,校验阶段卡在逐行解析。

少数情况下是文件里混了空行,解析器在等待后续内容。

动手时先查任务事件流看卡在哪一步

curl -s https://api.openai.com/v1/fine_tuning/jobs/$JOB_ID/events -H "Authorization: Bearer $OPENAI_API_KEY" | jq '.data[] | {level,message}'

接着检查文件里有没有空行和超长行

python -c "ls=[len(l) for l in open('train.jsonl')];print(len(ls),max(ls),ls.count(0))"

取消后去掉空行重新提交

python -c "lines=[l for l in open('train.jsonl') if l.strip()];open('clean.jsonl','w').writelines(lines);print(len(lines))"

剩下的就是确认当前账号在跑的任务数

curl -s 'https://api.openai.com/v1/fine_tuning/jobs?limit=20' -H "Authorization: Bearer $OPENAI_API_KEY" | jq '[.data[] | select(.status=="running")] | length'

别只看报错消失,验证要多做一步。重新提交后任务在十分钟内进入 running,事件流里出现 created 与 running 两条记录。

容易忽略的是,validating 阶段没有进度条,看事件流比看状态字段有用,空行是最常见的卡点。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189