範本
報價決定你拿到什麼硬體。範本決定上面跑什麼。部署時兩者都要有:你在市集中挑選報價,部署頁面會把它一路帶著走,同時讓你挑選範本。
範本是一份啟動配方
範本是對「這台機器應該開機進入什麼」這個問題所存下的答案。它帶著:
| 部分 | 它決定的事 |
|---|---|
| 映像檔與標籤 | 要拉取的容器映像檔,也可以來自私有登錄檔。 |
| 啟動模式 | 容器如何啟動,以及隨附哪些連接埠。 |
| 連接埠 | 哪些容器連接埠會被發布,每個都附一個標籤。 |
| 環境 | 交給容器的變數。值可以標示為機密。 |
| 啟動時腳本 | 容器第一次啟動時在容器內執行的指令。之後再啟動不會重跑。 |
| 限制條件 | 最低 CUDA 版本、最低 VRAM,以及部署頁面在讓你啟動前會檢查的其他硬體下限。 |
範本永遠不會指名某一台機器。它的限制條件是下限 — 最低 CUDA 版本、最低 VRAM — 而不是綁死的主機,所以同一個範本不用修改就能部署到 1× RTX 4090 或 8× H100 PCIe 上,只要兩者都跨過那些下限。這就是為什麼值得存一個範本,而不是每次都重新輸入同樣的設定。
啟動模式
啟動模式是唯一會改變執行個體形態而非內容的欄位。
| 模式 | 你會得到什麼 |
|---|---|
ssh | 一台 SSH 伺服器。系統會替你加上連接埠 22。 |
jupyter | JupyterLab 加上一個 SSH shell。系統會替你加上連接埠 22 與 8080。 |
args | 映像檔本身的進入點,以你提供的引數執行。無互動介面。 |
vm | 完整的 KVM 虛擬機器。只能部署到支援 VM 的報價上。 |
ssh 與 jupyter 需要以 Superheat 基礎映像檔為基底的映像檔,因為這兩種模式仰賴基礎映像檔的進入點來啟動 SSH 常駐程式與 JupyterLab。args 與 vm 可以跑任何映像檔。請參閱啟動模式。
不論你的範本設定什麼,平台都會把自己的環境疊在上面,而且以疊上去的那層為準。你無法從範本覆寫 JupyterLab 權杖或 GPU 數量。環境變數說明平台控制了哪些部分。
可見性
每個範本都是三種可見性層級之一。
| 可見性 | 誰看得到 | 誰能編輯 |
|---|---|---|
system | 所有人。這些是 Superheat 維護的精選起點。 | 沒有人。系統範本透過 API 是不可變更的。 |
private | 只有擁有它的組織。這是你所建立的任何東西的預設值。 | 該組織。 |
public | 所有人。任何帳號都可以讀取這份配方。 | 擁有它的組織。 |
機密的環境值對擁有組織以外的任何人都會遮蔽,所以公開範本只會分享配方,不會洩漏其中內建的憑證。
你不能編輯不屬於你的系統範本或公開範本,但你可以複製任何你看得到的範本。副本會以 private 落在你的組織裡,由你自由修改。複製別人的範本會清空它的機密值與私有登錄檔憑證 — 這些要你自己填。
為什麼範本有兩個身分
範本有一個固定的 id 和一個 hash_id。hash_id 是與啟動相關欄位的內容雜湊 — 映像檔、標籤、儲存庫、模式、引數、啟動時腳本、環境、連接埠、限制條件、Jupyter 目錄與 JupyterLab 開關,以及私有登錄檔使用者名稱 — 並加上 th_ 前綴。
只要其中任何一項改變,它就會重新產生;當擁有者編輯名稱、描述、readme、可見性或排序時,它維持不變。啟動配方有自己的身分,與存放它的那筆資料是分開的。
這個切分讓你有兩種方式指向一個範本:
| 你分享的東西 | 行為 |
|---|---|
| id | 跟著範本走。如果擁有者改變了它啟動的內容,你的連結就會啟動新的版本。 |
hash_id | 指向一份確切的配方。如果擁有者改變了它啟動的內容,舊的雜湊就再也解析不到。 |
當有人需要重現你的執行結果時,要用第二種。過期的雜湊連結會明確地失敗,而不是默默啟動一個已經不是你測過的東西。API 在 GET /v1/templates/by-hash/{hash_id} 解析它。