在 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 的应用凭据进行身份验证,这是一把绑定到单个分配额度、可以单独吊销的密钥。设置它需要三步:
- 在 allocations.access-ci.org 申请 ACCESS Explore 分配额度,并申请 Jetstream2 的 CPU 时间。
- 在 js2.jetstream-cloud.org 登录 Jetstream2 的 Horizon 控制台,创建一个应用凭据,并下载它的
clouds.yaml文件。 - 把文件保存为
~/.config/openstack/clouds.yaml,并把其中的条目命名为jetstream2,Potato 的 Jetstream2 默认设置就是按这个名字对应的。
然后安装 OpenStack extra,并检查凭据是否可用:
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 认证)。
检查计划
试运行不创建任何东西,它会打印部署的每一步、任务将使用的主机名,以及这个实例要消耗你多少分配额度:
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 询问时确认计划:
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,会把新版本上传到同一个实例。
结束研究
标注存放在实例的磁盘上,磁盘会随实例一起删除。请先把标注拉取到你的机器上并检查,然后再删除实例:
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yamlpull 把部署收集到的全部内容写入一个新的 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 才能签发证书。
延伸阅读
- 在本地或云端运行 Potato:其他云端目标
- 部署标注服务器:如何选择主机
- Jetstream2 与 OpenStack 参考