拒绝原因
先看版本的 reject_reason,它来自 GET /v1/me/versions/{id}。提交请求被拒绝、审核拒绝、试赛失败和对局失败是各自独立的事件,所处的阶段决定了你下一步该做什么。
被拒绝的请求
Soma 在记录新版本之前就会拒绝这些请求。
| 错误或情况 | 含义 | 下一步 |
|---|---|---|
hashes_required | 没有声明哈希,或哈希的格式一眼就不对 | 同时提供 weights_hash 和 manifest_hash,格式为 sha256:<64 hex> |
unknown_game | 没有这个 slug 的游戏 | 通过 GET /v1/games 查看各游戏的 slug |
season_not_open | 你指定的赛季(未指定时为精选赛季)目前不接受提交 | 用 season 指定你想要的赛季,或查看它的日期并等待提交窗口开放 |
not_a_participant | 该赛季仅限名单上的人参赛,而你不在参与者名单上;或者你登录所用的登录方式不被该赛季接受 | 请赛季组织者把你加入名单,或用他们列出的身份登录 |
season_admin_cannot_enter | 你是本赛季的管理员,而赛季管理员不能参加自己管理的赛季 | 参加其他赛季 |
weights_already_entered | 该赛季不接受重复的权重,而另一位参赛者的参赛模型(在 user 范围下则是任何其他模型)已经使用了这组权重 | 查看该规则的范围,提交符合条件的模型 |
version_in_flight | 这个模型在本赛季已有一个候选版本在审核中(testing 或 verified) | 等那个候选版本出结果;你的其他模型,以及这个模型在其他赛季的参赛,都不受影响 |
unknown_model | 这个模型 id 不属于你 | 先创建模型;提交从不会自动创建模型 |
model_retired | 这个模型不再接受新版本 | 恢复它,或提交到另一个模型 |
too_many_in_flight | 你同时在审核中的版本数量已达本赛季的上限 | 等其中一个出结果 |
too_many_versions | 你提交的版本数量已达本赛季的上限 | 下个赛季会重新开始计数 |
cooling_down | 本赛季规定同一模型两次提交之间要有间隔 | 响应中给出了你可以再次尝试的时刻 |
note_too_long、note_word_listed | 版本备注超过了长度限制,或含有本站不允许使用的词 | 缩短备注,或不填备注 |
entries_max | 你在本赛季参赛的模型数量已达上限 | 提交到已在本赛季参赛的模型,或让一个模型退役以空出名额 |
name_required | 创建请求没有带名称 | 发送一个名称:一个参赛模型要声明的只有这一项 |
model_name_taken | 你已经有一个同名模型 | 名称用来区分 你自己的 模型;其他参赛者可以使用相同的名称 |
name_invalid | 改名时用了本站不接受的名称 | 换一个 |
reenter_invalid | 重新参赛的请求缺少 game、model、season 或 from | 四项都要发送 |
nothing_to_reenter | 你重新参赛的模型在 from 赛季中没有参赛中的版本 | 检查 from 中的 slug,或改为直接提交文件 |
401 / session_revoked | 会话缺失、无效、过期或已被撤销 | 重新登录 |
weights_already_entered 来自赛季的 unique_weights 规则,也是提交可能遇到的唯一一种唯一性冲突。版本没有可供重复的发布标签,所以不存在 duplicate_release 这个错误码。
cooling_down 是唯一取决于当前时间的拒绝,所以相隔一秒的两次调用可能得到不同的答复。因此它只报告你可以重试的时刻,而不给出是或否。
上传与收到的文件
| 原因 | 含义 | 下一步 |
|---|---|---|
ARTIFACT_MISSING | 三十分钟的上传窗口关闭时,存储桶中你这个版本的键下没有计算图 | 你没有上传。重新提交以获得新版本和新的 URL,然后 PUT 两个文件 |
MANIFEST_MISSING | 窗口关闭时计算图已到达,清单还没有 | 同样的修法,用在第二个文件上 |
MANIFEST_MISMATCH | 你上传的文件的哈希与 manifest_hash 不符 | 对你发送的文件重新运行 shasum -a 256 |
MANIFEST_INVALID | 文档中没有 inputs 或没有 outputs | 把它写成 orion:model@1.0.0 清单,这种清单两者都带 |
RESULT_NOT_ALLOWED | 清单中带有 result 表达式 | 策略头由平台来读。删掉这个表达式;见清单 |
DIGEST_FAILED | 节点重新对计算图做哈希,得到了另一个值 | 与 MANIFEST_MISMATCH 同样的修法,用在 model.onnx 上 |
计算图与策略
| 原因 | 含义 | 下一步 |
|---|---|---|
PARSE_FAILED | ONNX 能解析,但构建不出执行计划 | 重新导出。自己计算索引的计算图无法声明命名的空间轴,所以请给它具体的维度 |
PROBE_FAILED | 能加载,但在你的 probe_dims 下无法运行 | 检查声明的形状是否就是计算图所接受的形状 |
PROBE_TOO_SLOW | 探测的中位数(在你的 probe_dims 下推理五次)在每次尝试中都超过了游戏的回合时限(Ants 为 1,000 ms) | 让计算图在 probe_dims 下跑得更快。版本的 infer_us 是最后一次的中位数,tinybrains check 测的是同一个探测 |
TOO_LARGE | S'(两个文件的字节数)在本赛季的重量级表中找不到能容纳它的重量级 | 测量两个文件的大小,缩小较大的那个 |
OPSET_UNSUPPORTED | opset 在本赛季的范围之外 | 按赛季公布的范围导出 |
OP_NOT_ALLOWED | 计算图使用了本赛季不允许的算子 | 检查导出的节点,包括 If/Loop/Scan 的子图,只使用支持的算子 |
CLASS_NOT_OFFERED | 它只能进入本赛季不开设的重量级 | 缩到赛季开设的重量级。TOO_LARGE 是另一个原因,针对超出所有重量级的模型 |
PARAMS_EXCEEDED | 参数量超过本赛季的允许值 | 除了字节数,也要减少参数量。参数量统计文档中携带的每一个数值,不论它在哪里 |
TOO_SLOW | 慢于本赛季的推理上限 | 少见:大多数赛季不设此项。简化计算图 |
慢的计算图留在它自己的重量级;审核不会把它移到更大的重量级。见模型格式和重量级。
适配器与接口
| 原因 | 含义 | 下一步 |
|---|---|---|
ADAPTER_INVALID | 某个适配器没有产生计算图所接受的张量,或者对某个已声明的输入什么都没产生 | 检查操作符、作用域、数据类型和形状。拼错的操作符在这里失败:加载时是接受它的 |
ADAPTER_OVER_BUDGET | 某个适配器在某条参考观测上超出了它的操作预算 | 测量各个用例并减少工作量;见预算 |
HEAD_UNREADABLE | 策略输出的形状裁判读不了 | 把它做成 2 阶或 4 阶:[N, 5] 或 [1, 5, H, W]。见两种策略头形状 |
ADAPTER_OVER_BUDGET 表示适配器开销太大,ADAPTER_INVALID 表示它是错的;平台有意把这两个词分开。这三个原因都可以用 tinybrains check 复现,它测量的正是审核所测量的,并指出失败的是哪条观测、哪个操作符。
版本只带着这一个词。平台不在它旁边存任何细节,所以要在你自己的机器上运行 check,才能知道是哪条观测或哪个节点出了问题。
记忆
这些只适用于声明了名为 memory 或 ant_memory 的输出的清单;见记忆。
| 原因 | 含义 | 下一步 |
|---|---|---|
MEMORY_NOT_ALLOWED | 清单声明了记忆输出,而它所在的重量级在本赛季不允许记忆 | 删掉这个输出,或进入一个赛季给了记忆的重量级 |
MEMORY_TOO_LARGE | 在最小或最大的地图上,记忆的开销超过了该重量级的上限 | 缩小它的形状或数据类型,或进入更大的重量级 |
MEMORY_SHAPE | 某个记忆输出命名了太多维度、把同一维度命名了两次,或缺少数据类型或形状 | memory 可以命名两个维度,ant_memory 一个 |
MEMORY_ROUND_TRIP | 在参考观测上喂入模型自己的记忆后,模型调用失败了 | 让每个记忆输入恰好接受其对应输出所写的内容,并用 tinybrains 打一场对局 |
试赛与管理上的结果
| 原因 | 含义 | 下一步 |
|---|---|---|
FORFEIT | 候选版本在一场完整的试赛中达到了判罚上限(赛季未另行设定时为五次) | 检查超时和适配器故障,然后重新测试 |
UNPLAYABLE | 试赛用完了修复次数上限 | 检查故障来自模型还是基础设施 |
RUNNER_UNAVAILABLE | 没有运行器能为试赛加载候选版本,次数达到了修复次数上限 | 不是你的模型的问题。用同样的文件再提交一次 |
SEASON_CLOSED | 候选版本等待期间赛季结束了 | 参加之后一个符合条件的赛季 |
TIMED_OUT | 审核用完了所有尝试次数,仍未完成验证 | 不是你的模型的问题。检查服务是否可用,然后再提交一次 |
被撤回的排队中的对局在 withdrawn_reason 中带有自己的词,而不是拒绝原因:
SUPERSEDED:后继版本通过试赛并取代了某个席位的版本,successor指明新版本。REJECTED:平台拒绝了某个席位的版本。BASELINE_DISABLED:管理员停用了占据某个席位的基线。MAP_DISABLED:管理员停用了这场对局的地图。ROUND_ENDED:对局开打之前,新一轮或决赛已经开始。SEASON_CLOSED:赛季已结束。ENGINE_RETIRED:赛季换到了另一个引擎。SEAT_LEFT:某个席位的版本因其他原因离场。
被撤回的对局不算失利,也不改变评分;见版本的生命周期。
平台出故障时
平台一侧的故障会让候选版本留在 testing 状态并送回队列:对象存储无法访问、没有运行器在线、认领它的运行器没能取到模型文件、没能连上自己的节点或没能及时报告。版本等待运行器期间的故障不消耗任何东西。已认领它的运行器上的故障消耗三次尝试中的一次,三次尝试都用完则以 TIMED_OUT 结束。这些重试最终的超时说明不了你的网络有任何问题。你永远看不到中间的那些词:版本的 reject_reason 只会是本页上的某个词,不会是别的。
ARTIFACT_MISSING 和 MANIFEST_MISSING 看起来像平台故障,但不属于这一类。空的存储桶是你这次提交的状态,再多的重试也变不出字节来。
候选版本被拒绝后,你参赛中的版本保持不变。查明原因后,把修正后的文件及其哈希作为下一个版本提交。在你提交的任何报告中都保留失败版本和试赛的 ID:运维人员需要用它们来找证据。
赛季管理
赛季管理员会遇到几个他们专属的拒绝。其中请求的措辞说不清楚的有:
| 错误 | 含义 | 下一步 |
|---|---|---|
season_admin_only | 你不是本赛季的管理员 | 请平台管理员把你指派为管理员 |
unknown_season | 没有这个赛季,或者它是你无权查看的私有赛季 | 检查 slug |
baseline_name_reserved | 另一个赛季已有同名基线。基线账户跨赛季共用,所以只有平台管理员才能为它添加版本 | 为本赛季的基线另起一个名字,或导入那个基线 |
寻求帮助
当拒绝原因说得不够清楚,或者故障看起来出在我们这边时,到 Discord 上提问。平台某个部分的 bug 也可以提到该仓库在 GitHub 上的 issues。