跳到主要内容

错误码

公共 API 的每个拒绝都是一个 JSON 对象,包含稳定的 code、可读的 message 和本次调用的 request_id。平台知道你该改什么时,还会给出 hint 和 details。details 是扁平记录,写明受影响的任务和关键数值,例如大小和上限。el 会把它们全部打印出来。

{
"code": "DATASET_TASK_ARCHIVE_TOO_LARGE",
"message": "Task acme/claims-0042: The task archive is 40.0 MiB; a task archive can be at most 16 MiB.",
"hint": "Move large files out of the task directory (into the Runner or the task image), or split the task, then publish a new Dataset version.",
"details": [{"member_index": 3, "task": "acme/claims-0042", "size_bytes": 41943040, "limit_bytes": 16777216}],
"request_id": "6f1c…"
}

请按 code 分支处理,不要按 message。消息文字可能调整,错误码不会改名。遇到不认识的错误码时,它仍然带有消息和 HTTP 状态,可参考 HTTP API 中的状态表。

提交 Job​

提交时平台会在创建 Job 之前逐个检查任务。被拒绝的提交不会创建 Job,修正输入后重新提交即可。

错误码HTTP含义处理方式
DATASET_TASK_ARCHIVE_TOO_LARGE422某个任务发布的压缩包超过了单任务 16 MiB 的下发上限。details 中有 size_bytes 和 limit_bytes。把大文件移出任务目录:工具和模型放进 Runner 或任务的容器镜像,大数据在运行时下载。也可以拆分任务。然后发布新的 Dataset 版本再提交。
DATASET_DELIVERY_KEY_MISMATCH422某个任务发布的压缩包记录不属于所选的 Dataset 版本、配置、split 和任务。重新发布该 Dataset 版本。如果仍然出现,请报告 request ID。
DATASET_DELIVERY_INVALID422某个任务的压缩包记录不完整或格式错误。details.reason 说明是哪一部分:delivery_missing、size_invalid、sha256_invalid、fields_unexpected、url_not_allowed、reference_invalid 或 name_invalid。用当前版本的 EnvHub 客户端重新发布该 Dataset 版本。name_invalid 表示 Dataset、版本、配置、split 或任务名使用了字母、数字、.、_、- 以外的字符。
INVALID_RUNNER_ENVIRONMENT422Runner 或 Task 的 [environment] 表中有无效的值,消息会写明字段。修正该字段并发布新版本。
RUNNER_UNAVAILABLE422平台因意外原因无法准备某个任务。details 写明是哪个任务。重试一次。如果再次出现,请报告 request ID,运维人员能看到完整诊断。
DATASET_CONFIG_REQUIRED409该 Dataset 有多个配置且没有默认配置。加上 --config NAME。
COMPOSE_RUNNER_DISABLED422本平台未启用 compose(多容器)Runner。请平台运维为你的项目启用,或改用非 compose Runner。
COMPOSE_RUNNER_DENIED422该 compose Runner 版本、项目或任务形态未获批准。请平台运维批准,或选用已批准的 Runner(el runner list)。
COMPOSE_TASK_REQUIRED / COMPOSE_RUNNER_REQUIRED422compose Runner 需要多容器任务,多容器任务需要 compose Runner。让 Runner 与 Dataset 匹配。
AGENT_PROFILE_DENIED422Profile 的 Agent、模型或预算参数不被接受,消息会说明是哪一项。修正 Profile(el profile get)后重新提交。
MODEL_ACCESS_DENIED422该 Runner 在本项目开通了模型访问,而 Job 设置了显式 command。开通只覆盖 Runner 自己的入口。去掉 --command 再提交,或请项目 Admin 撤销开通。
MODEL_ACCESS_PROVIDER_UNSUPPORTED、MODEL_ACCESS_UNAVAILABLE422该 Runner 在本项目开通了模型访问,但 Job 固定了无法交付 Key 的 provider,或此时读不到开通记录。没有创建 Job。提交时不要固定 provider,或稍后重试。见 Runner 的模型访问。
UNSUPPORTED_CAPABILITY、DIND_UNAVAILABLE、TEMPLATE_NOT_READY422所选执行环境暂时无法运行这种 Runner 或任务形态,消息会说明原因。调整资源、超时或类型;TEMPLATE_NOT_READY 稍后重试;否则报告 request ID。

Train Job 提交被拒绝时返回下列错误码,不会创建 Job:

错误码HTTP含义处理方式
INVALID_TRAIN_JOB_SPEC422请求不符合配方的 schema:某个字段、取值或记录无效,两个字段互相冲突,或者同时设置了 dataset 和 records。details 列出每个出错的字段(适用时带 record_index 或 member_index)和规则,不包含提交的值。按 details 修改对应字段,有 hint 时照它操作。再对照 GET /v1/training-models 返回的 request_schema 检查请求。
TRAINING_DATA_UNAVAILABLE422训练数据引用无法读取:dataset 不是本项目的 record Dataset 版本、没有这个 split、已经下线,或与固定的 manifest_sha256、sha256 或 row_count 不一致。用 el data list --type dataset 核对 Dataset 和 split 名称,再重新提交。
TRAINING_DATA_TOO_LARGE422所选 Dataset split 超过了单个 Train Job 的读取上限:64 MiB 或 10,000 行。把数据拆到多个 Job,或从 parent checkpoint 继续训练。
TRAIN_JOB_IDEMPOTENCY_CONFLICT409这个 request_id 已经属于输入不同的 Train Job。重新发送原请求,或换一个新的 request_id。

16 MiB 上限由平台固定。通过平台的 EnvHub 发布流程(envhub:deploy)发布 Dataset 时,超过上限的任务现在会在上传前被拒绝;更早发布的版本里仍可能有这样的任务。

较旧的平台版本对这三种下发错误统一返回 INVALID_DATASET_DELIVERY,有些拒绝只返回通用的 INVALID_REQUEST。

Trial 失败​

已经开始运行的 Trial 失败时会记录自己的 error 错误码。el job get、el job result 和 el trial get 会为每个失败的 Trial 打印一行,例如:

Trial trial_01… failed: EXECUTOR_INTERNAL_ERROR during scheduling - PermissionError: [Errno 13] Permission denied

JSON 中有同样的字段:error、error_message(平台记录了原因时提供的一行文字)和 failed_phase(Trial 失败时所处的阶段:scheduling 或 running)。Job 事件中也带有这些字段。Train Job 的错误码同时出现在 Job 的 training.error_code 中。

错误码含义处理方式
EXECUTOR_INTERNAL_ERROR平台在准备或运行 Trial 时遇到意外错误。error_message 给出错误类型。这不是你的任务导致的。重试该 Job。如果再次出现,请报告 Job ID 和时间,运维人员能看到完整诊断。
EXECUTOR_PERMISSION_DENIED、EXECUTOR_FILE_NOT_FOUND、EXECUTOR_IO_ERROR、EXECUTOR_TIMEOUT平台无法读写自己的某个文件或目录,或平台操作超时。这是平台问题,不是你的任务导致的。报告 Job ID 和时间;运维修复前重试通常会以同样方式失败。
DATASET_DELIVERY_UNAVAILABLE平台无法为任务下载签发授权。稍后重试;持续出现请报告。
TIMEOUTTrial 运行时间超过了时限。调大 Runner 的超时时间,或让任务更快完成。
SANDBOX_START_FAILED平台已为 Trial 创建沙箱,但它没有启动:启动过程中停止、镜像没有可用的 /bin/sh,或执行环境让它等待超过了平台的启动上限(例如没有容量,或大镜像拉取太慢、无法拉取)。沙箱已删除,没有运行任何内容,不计费。这是基础设施失败,不是你的任务导致的。用新的 request_id 重新提交。同一 Runner 反复出现时,确认其镜像是公开的或平台可以拉取,再报告 Job ID。
EXECUTION_QUEUE_TIMEOUTTrial 或 Train Job 等待执行名额的时间超过了平台的排队上限,默认 30 分钟(平台设置 EXECUTION_QUEUE_TIMEOUT_SEC)。执行 provider 或项目并发 Trial 上限已满时,Agent 或 Sandbox Trial 会排队。等待本 Job 预算的时间不计入。有多个 Trial 的 Train Job 中,后面的 Trial 等前一个 Trial 结束,上限从那时开始计时。没有运行任何内容,也没有分配 GPU。稍后用新的 request_id 重新提交。
TRAINING_TIMEOUTTrain Job 的 Trial 达到了配方的时间上限,平台停止了它。上限从 Trial 开始时计时,同一个 Job 的每个 Trial 都有完整的上限,排队时间不计入。Job 和 Trial 以 failed 结束。你主动停止的 Job 以 cancelled 结束,不带这个错误码。从 GET /v1/training-models 读取该配方的 limits.timeout_seconds(见运行时长上限)。减少 max_steps、记录数或 max_length,再用新的 request_id 提交新 Job。
RUNNER_COMMAND_FAILEDRunner 命令以错误退出。用 el job log JOB_ID 查看 Trial 日志。
MODEL_ENV_SETUP_FAILED沙箱已启动,但没能收到 Runner 的模型凭据文件。这是基础设施故障,不是任务本身的结果。用新的 request_id 重新提交;反复出现时报告 Job ID。
MODEL_ACCESS_UNAVAILABLE、MODEL_ACCESS_PROVIDER_UNSUPPORTED、LLM_KEY_UNAVAILABLE该 Runner 在本项目开通了模型访问,但平台此时无法为这个 Trial 提供。没有启动任何资源。查看项目执行设置里的 model_access,再联系平台运营方。见 Runner 的模型访问。
BUDGET_EXCEEDEDJob 达到了 budget.max_cost_usd。对 Train Job,也表示某个 Trial 因为剩余预算不够跑满它的整个时长上限而没有启动。Trial 以 cancelled 结束;被停止的 Train Trial 不登记 Checkpoint。查看 Job 的 cost。Train Job 可以把上限和 GET /v1/training-models 返回的 limits.max_trial_cost_usd 比较,然后用新的 request_id 提交新 Job,提高上限或减少 Trial 数(Train Job 的花费上限)。
BUDGET_UNMETEREDJob 的部分用量,或 Train Job 配方的 GPU,没有价格,所以上限无法执行。没有启动新的内容。不带上限重新提交,或报告 Job ID。
INSUFFICIENT_BALANCE工作区可用余额不足以支持本次运行。Inference Job 或端点被拒时,details 给出副本需要预先预留的金额(见提交 Inference Job)。请具备账务权限的工作区成员检查后重试。
EXECUTION_FAILED该失败没有公开的错误码。查看 Trial 日志;日志无法说明原因时请报告 Job ID。

错误消息从不包含 URL、文件路径、存储键或凭据。如果不暴露这些就无法说得更具体,平台只给出错误类型,详细信息留给运维人员。

Train Job 失败​

失败的 Train Job 在 training.error_code 中给出错误码,它的 Trial 在 error 中带同一个错误码。Trial 的 failed_phase 在训练开始运行之前失败时为 scheduling,之后为 running。error_message 是这个错误码对应的固定说明。上文的 TRAINING_TIMEOUT、EXECUTION_QUEUE_TIMEOUT 和 INSUFFICIENT_BALANCE 同样适用。

错误码含义处理方式
GPU_JOB_FAILEDGPU 任务失败。failed_phase 为 scheduling 时训练从未开始,例如没能拿到 GPU;为 running 时训练进程出错退出。scheduling:稍后用新的 request_id 重新提交,这是平台或容量问题,与你的数据无关。running:用 el job log JOB_ID --source runtime 查看训练错误,修正数据或参数。日志无法说明原因时请报告 Job ID。
CHECKPOINT_NOT_DURABLE训练已经完成,但 checkpoint 没能保存到持久存储。报告 Job ID。如果现在就需要 checkpoint,用新的 request_id 重新提交。
BATCH_INPUTS_UNAVAILABLE平台无法准备训练输入,没有分配 GPU。training.error_detail 指出出错的输入、记录和规则。修正指出的记录或参数,提交新 Job。
BATCH_DRY_RUN_NOT_EXECUTED仅出现在不使用 GPU、只规划 Train Job 的部署上:输入已经打包,没有启动 GPU 任务。Job 以 cancelled 结束。无需处理;需要真实训练时使用能运行训练的部署。
PRICE_MISSING配方需要的 GPU 在本平台没有价格,无法预留。联系平台支持。
RESERVATION_CONFLICTTrial 的计费预留与已有预留冲突。用新的 request_id 重新提交;反复出现时报告 Job ID。
TRAINING_BILLING_REQUIRED该工作区没有可用的训练计费,Trial 没有启动。联系平台支持。
TRAINING_BACKEND_UNAVAILABLE本平台没有开放 Runner 训练,Trial 没有启动。联系平台支持。
PROFILE_AUTHORIZATION_UNAVAILABLETrial 的 Profile 输入不再对本项目授权,Trial 没有启动。检查 Profile(el profile get)及其输入,再重新提交。
TRAIN_RUNNER_LAUNCH_REJECTED平台拒绝启动 Runner 训练容器。对照 Runner 训练 检查 Runner 和资源,再重新提交。
TRAIN_RUNNER_TIMEOUTRunner 训练容器运行超过了时限,被停止。调大 timeout_seconds,或缩短训练。
TRAIN_RUNNER_PROCESS_FAILEDRunner 训练命令以非零退出码结束。用 el job log JOB_ID 查看 Trial 日志。
TRAIN_RUNNER_RESULT_INCOMPLETERunner 训练容器结束时没有完整结果。查看 Trial 日志,确认命令写出了声明的输出。
TRAIN_RUNNER_OUTPUTS_FAILED无法收集 Runner 声明的输出。检查 execution.outputs 和命令写出的文件。
TRAIN_RUNNER_CHECKPOINT_FAILED无法登记 Runner 的 checkpoint 输出。对照 Runner 训练 检查 checkpoint 输出。
NATIVE_TRAIN_FAILED、NATIVE_TRAIN_INTERRUPTED仅限本地部署:进程内训练失败,或被重启打断。用新的 request_id 重新提交。
TRIAL_CLEANUP_UNKNOWN平台无法确认 Trial 的资源已经释放。报告 Job ID;不要假设资源已经释放。

等待与待确认状态​

这些错误码说明 Job 还没有结束,它们不是失败。

错误码出现位置含义处理方式
EXECUTION_RECONCILING未结束 Trial 的 error;Train Job 的 training.error_code平台正在向 provider 核实某个 Trial 的执行结果,例如平台重启之后。核实完成前 Job 状态为 unknown。不要重复提交相同的工作。稍后再读取 Job,结果确认后它会变为实际状态。
BATCH_PROVIDER_UNAVAILABLE未结束 Train Job 的 training.error_code平台无法从 provider 读取 GPU 任务的状态。读取成功前 Job 状态为 unknown。同 EXECUTION_RECONCILING。

unknown 不是最终状态。只要 Job 有未结束的 Trial 带 EXECUTION_RECONCILING,或 Train Job 带上面两个错误码之一,Job 就显示 unknown。正在取消或已经结束的 Job 保持原来的状态。

服务超时​

API 背后的平台服务没有应答时,API 返回这些错误码。

错误码HTTP含义处理方式
UPSTREAM_TIMEOUT504API 已经转发请求,但平台没有在时限内应答。请求可能已经被处理。重试写操作前先查看资源。提交 Job 时先查看 el job list。如果提交带有 request_id,也可以原样再次提交:相同的重试会返回已经存在的 Job。
CANCELLATION_TIMEOUT504停止请求没有在时限内得到确认。Job 可能仍在停止中。再次停止前先查看 Job 状态。
SOURCE_UNAVAILABLE503API 无法连接平台服务,或服务意外出错。稍后重试。重试写操作前,按 UPSTREAM_TIMEOUT 的方式先查看资源。

较旧的平台版本对超时返回 503 SOURCE_UNAVAILABLE。

el 的连接错误​

这些错误码由客户端产生,不来自 API。

错误码含义处理方式
NETWORK_ERROR客户端无法建立连接:DNS、TLS、代理问题或服务不可达。请求没有发出。检查 API 地址和网络后重试。
REQUEST_TIMEOUT请求已经发出,但在时限内没有收到应答。请求可能已经被处理。重新提交前先查看 Job 或资源(el job list)。
RESPONSE_INTERRUPTED应答完成前连接被关闭,服务可能出错或重启。与 REQUEST_TIMEOUT 相同。反复出现时请报告发生时间。

报告问题时请附上错误码、HTTP 状态和 request_id。参见故障排查。