Skip to content

在 Jetstream2 上部署 Potato

藉助 ACCESS 分配額度,用 potato deploy 和一份 OpenStack 憑據,在 NSF 科研雲 Jetstream2 上免費執行 Potato 標註研究。

potato deploy up --provider openstack --cloud jetstream2 把一項標註研究放到由 NSF 資助的科研雲 Jetstream2 上,除了分配額度中的服務單位之外不產生任何費用。美國機構的研究人員通過 ACCESS 分配額度獲得 Jetstream2 的使用時間,所以沒有預算的研究也能執行在一臺專用機器上,磁碟在重啟後保留。每個實例都會在 projects.jetstream-cloud.org 下得到一個 DNS 名稱,所以標註者看到的是普通的主機名和普通的 HTTPS 證書。本頁需要 Potato 2.10 或更高版本,以及一份你已經用 potato start 執行過的配置。

獲取 Jetstream2 分配額度和憑據

Jetstream2 執行在 OpenStack 雲軟體上,Potato 通過 OpenStack 訪問它。Potato 使用 OpenStack 的應用憑據進行身份驗證,這是一把繫結到單個分配額度、可以單獨吊銷的金鑰。設定它需要三步:

  1. 在 allocations.access-ci.org 申請 ACCESS Explore 分配額度,並申請 Jetstream2 的 CPU 時間。
  2. 在 js2.jetstream-cloud.org 登入 Jetstream2 的 Horizon 控制台,建立一個應用憑據,並下載它的 clouds.yaml 檔案。
  3. 把檔案儲存為 ~/.config/openstack/clouds.yaml,並把其中的條目命名為 jetstream2,Potato 的 Jetstream2 預設設定就是按這個名字對應的。

然後安裝 OpenStack extra,並檢查憑據是否可用:

bash
pip install 'potato-annotation[deploy-openstack]'
potato deploy providers --verify

決定誰可以登入

potato deploy 不會改動你的登入設定,而 Jetstream2 的主機名是公開的。如果配置允許任何人註冊,下面的試執行會報告警告 D003,“Anyone who finds the URL can register and annotate.”(任何找到這個 URL 的人都能註冊並標註。)對眾包研究來說,開放註冊通常是有意為之。對於實名標註者,請在部署之前把他們列在 user_config.users 下並設定 allow_all_users: false(密碼管理),或者讓他們通過你所在機構登入(SSO 與 OAuth 認證)。

檢查計劃

試執行不建立任何東西,它會列印部署的每一步、任務將使用的主機名,以及這個實例要消耗你多少分配額度:

bash
potato deploy up myproject/config.yaml --provider openstack --cloud jetstream2 --dry-run

計劃會用 Featured-Ubuntu24 映像建立一個 2 vCPU 的 m3.small 實例,放在你的分配額度自動分配的網路上,並從 public 網路獲取一個浮動 IP。安全組只允許 22、80 和 443 埠的入站連線。由於 Jetstream2 各映像的預設登入使用者不同,Potato 會建立自己的 potato-deploy 使用者,持有為這次部署生成的部署金鑰。--size 選擇另一種實例規格,分配額度沒有自動分配的網路時用 --network 指定網路,--volume-gb 為任務資料另加一個卷。一個 m3.small 每小時消耗 2 個服務單位(SU,分配額度的計量單位),如果一直開著,一年約消耗 17,520 個,所以研究結束後請銷燬實例。

部署

去掉 --dry-run 運行同一條命令,並在 Potato 詢問時確認計劃:

bash
potato deploy up myproject/config.yaml --provider openstack --cloud jetstream2

任務的地址是 https://potato-<name>.<allocation>.projects.jetstream-cloud.org,其中 <name> 來自任務名稱。浮動 IP 繫結後一兩分鐘,Jetstream2 會發布 DNS 名稱,Potato 會等到它生效,再申請有效期 90 天的 Let's Encrypt 證書。部署最後會列印 URL 以及管理員金鑰檔案的路徑,也就是配置旁邊的 .potato/secrets.json。用管理員金鑰可以開啟 /admin 上的管理儀表板。

研究期間,potato deploy status 報告伺服器和證書是否正常,potato deploy logs myproject/config.yaml -f 持續輸出伺服器日誌。修改配置後再次執行 up,會把新版本上傳到同一個實例。

結束研究

標註存放在實例的磁碟上,磁碟會隨實例一起刪除。請先把標註拉取到你的機器上並檢查,然後再刪除實例:

bash
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yaml

pull 把部署收集到的全部內容寫入一個新的 potato-pull-<name>-<timestamp> 目錄。destroy 不會在從未拉取過的部署上執行。它執行之後,實例就不再消耗服務單位。

校園 OpenStack 雲

同一個提供商也適用於校園內的 OpenStack 雲。把它的 clouds.yaml 條目放在任意名稱下,再把這個名稱傳給 --cloud。沒有 Jetstream2 的預設設定時,Potato 使用 m1.small 規格、Ubuntu 24.04 映像和 public 外部網路,可以用 --size、--os-image 和 --network 覆蓋。校園雲不會給實例分配 DNS 名稱,所以任務通過它的浮動 IP 提供服務,使用短期有效的 IP 證書,與 AWS Lightsail 目標相同。

故障排查

“No --network given and this project has no auto-allocated network” 表示分配額度沒有預設網路。在 Horizon 或 Exosphere 中建立一個網路和路由器,然後傳入 --network <name>。

首次部署時證書需要幾分鐘,因為 DNS 名稱要先能解析,Let's Encrypt 才能簽發證書。

延伸閱讀