detail 字段的 JSON,HTTP 状态码说明这是哪一类失败。
detail 是字符串。请求体校验是例外:FastAPI 返回数组,每个被拒的字段一条。
loc 是出问题字段的路径,用点连接起来即可;msg 是值得展示给人看的那句。
状态码
读懂一次被拒的提交
POST /api/jobs 在任何调度动作之前就会拒绝,detail 会点名是哪道闸拦下的。下面这几种值得认识:
Recipe 握手失败
Recipe 握手失败
提交里的
recipe.lock.json 和服务端 catalog 对不上——名字、版本、digest 或 framework.runtime_id
有差异。通常是平台发布了新的 recipe 版本,而你的实验还锁在旧版本上。sf recipe status <exp> 看差异,sf recipe upgrade <exp> 应用它。配额不足
配额不足
申请的 GPU 数超过了账号能同时占用的上限。在队列里排队不是这个错误——排队的作业是已经被准入的。
这是在门口就被拒绝,只有管理员能改。
镜像仓库不在允许列表里
镜像仓库不在允许列表里
--image 指向的仓库主机不在部署允许的范围内。允许列表放在服务端是有意的:它是阻止提交去任意地方
拉代码执行的那道闸。拒绝覆盖 entrypoint
拒绝覆盖 entrypoint
spec.source.entrypoint 非空。entrypoint 归 recipe 所有,作业不能替换它。
确实要跑自己的命令,用 custom/custom recipe。打包里有敏感文件
打包里有敏感文件
打包器发现了
.env、*.pem、id_rsa* 之类,拒绝生成归档——这一步在你本机就失败了,请求根本没发出去。
密钥通过平台的注入通道进入作业,不走工作目录。一部分老代码路径抛出的错误文案目前仍是中文,正在随着相关代码被修改而逐步改成英文。
遇到这种情况,报缺陷时引用状态码和接口路径更可靠。