執行個體狀態
每個執行個體都恰好處於八種狀態之一。執行個體 頁面上的徽章、執行個體詳細頁面上的徽章,以及 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 裡列出目前允許的操作。