实例状态
每个实例在任意时刻都恰好处于八种状态中的一种。实例页面上的状态标签、实例详情页上的状态标签,以及 API 返回的 status 字段,报告的都是同一个值。
各个状态
| 状态 | 是否过渡状态 | 含义 | 计费内容 | 可执行的操作 |
|---|---|---|---|---|
creating | 是 | 你的部署已被接受,Superheat 正在置备切片并拉取镜像 | 不计费 | 等待,或者销毁 |
starting | 是 | 一个已停止的实例正在同一台机器上、用同一块磁盘重新启动 | 不计费 | 等待,或者销毁 |
running | 否 | 工作负载已就绪,连接信息已发布 | GPU:按报价的整片小时价,按秒计量 | 通过 SSH 连接、打开 JupyterLab、查看日志、停止、销毁 |
stopping | 是 | 工作负载正在关闭;磁盘予以保留 | 不计费 | 等待,或者销毁 |
stopped | 否 | 工作负载已关闭;磁盘留在机器上。GPU 仍为你保留——除非余额用完时平台在机器支持的情况下把它们释放了 | 磁盘:你的磁盘容量乘以每 GB 每小时的存储费率 | 启动、销毁 |
destroying | 是 | 销毁流程进行中,切片正在被释放 | 不计费 | 等待。再次销毁会重新发送拆除请求 |
destroyed | 否 | 终态。磁盘已删除,报价已回到市场 | 不计费 | 无。已销毁的实例不会出现在列表中,除非你主动请求查看 |
error | 否 | 工作负载无法启动、失败或丢失,自己运行结束了,或者停止期间它的容器不见了。error_code 说明是哪一种 | 不计费 | 查看日志、销毁 |
error 不产生费用。一旦平台看到工作负载已经结束——失败、丢失或运行完毕——那些 GPU 就会被释放,回到这份报价的 available_units 里。工作负载还没到达主机就失败的部署,会一直占着它们,直到实例被销毁。每个出错的实例在被销毁之前都算进 25 个实例的上限。
过渡状态
有四种状态——creating、starting、stopping 和 destroying——属于过渡状态:Superheat 正在完成这次变更,没有任何计量在跑,你做什么都无法让它更快 —— 不过处于 creating、starting 或 stopping 的实例可以直接销毁,而不必干等。控制台会为这些状态绘制一个闪烁的状态标签,并在你有任一实例处于其中时每 3 秒轮询一次,等一切稳定下来后再退回到每 15 秒一次。
实例处于 creating 期间,控制台会显示提示 正在为你准备机器…。拉取大镜像可能让它在这里停上几分钟,而拉取所花的时间一分钱都不收。
哪些转换是合法的
| 从 | 你可以请求 | 平台还可能把它转到 |
|---|---|---|
creating | destroying | running、error |
starting | destroying | running、stopped(恢复被拒绝或一直未确认,包括原来的 GPU 已被别人占用或已停止服务)、error |
running | stopping、destroying | stopped、error |
stopping | destroying | stopped、running(停止一直未确认)、error |
stopped | starting、destroying | running、error(停止期间容器不见了) |
destroying | —(再次请求会重新发送拆除) | destroyed、error |
destroyed | 无——该状态是终态 | 无 |
error | destroying | running、stopped(发现工作负载其实是健康的) |
正常路径是 creating → running → stopping → stopped → starting → running。销毁流程始终是 destroying → destroyed。
destroying 可以从每一个仍然存活的状态到达,这是刻意的。一次永远落不了地的部署 —— 因为机群里没有匹配的机器而一直在等待放置,或者主机已经不认得这个作业了 —— 或者一次主机始终不回应的停止或启动,否则就会变成一个你删不掉的实例。你可以销毁一个还在创建、启动或停止中的实例。对已经处于 destroying 的实例再发一次 DELETE 也不会被拒绝:它会再请求一次拆除。
平台自己的转换是为了让状态保持真实。主机在 30 分钟内没有确认的停止,会把实例放回 running——容器其实还在运行,所以 GPU 计量重新开始——并继续重试停止。主机拒绝、连不上或在 30 分钟内没有确认的启动,会把实例放回 stopped。实例上的 error_code 会说明发生了什么,实例页面也会解释它。
GPU 被释放过的实例启动时,如果原来那几块 GPU 正被别人使用,或者在那台机器上已停止服务,启动会被拒绝:请求本身以 409 CAPACITY_UNAVAILABLE 失败,或者实例先进入 starting、再回到 stopped,error_code 为 gpus_unavailable。实例停止期间容器在机器上不见了的,会转到 error,error_code 为 workload_gone:没有东西可以启动了,只能销毁。
任何要求执行“你可以请求”一栏之外转换的请求都会被拒绝,返回 409 INVALID_STATE,实例保持原样。API 在实例的 allowed_actions 里列出当前允许的操作。