Jetstream2へのPotatoのデプロイ
NSFの研究用クラウドJetstream2で、ACCESSの割り当てを使って費用をかけずにPotatoのアノテーション研究を実行します。potato deployとOpenStackの認証情報を使います。
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を通じてJetstream2を操作します。Potatoの認証にはOpenStackのアプリケーション認証情報を使います。これは1つの割り当てに結び付いたキーで、単独で取り消せます。設定は3つの手順で済みます。
- 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を見つけた人は誰でも登録してアノテーションできます)を表示します。クラウドソーシングの研究では、公開登録は通常は意図したとおりの設定です。名前の決まったアノテーターの場合は、デプロイする前に、allow_all_users: falseを設定してuser_config.usersの下に一覧を書くか(パスワード管理)、所属機関を通じてサインインしてもらうようにしてください(SSOとOAuth認証)。
計画を確認する
ドライランは何も作成せず、デプロイのすべての手順、タスクに付くホスト名、インスタンスが割り当てから消費する量を表示します。
potato deploy up myproject/config.yaml --provider openstack --cloud jetstream2 --dry-run計画は、Featured-Ubuntu24イメージから2 vCPUのm3.smallインスタンスを1つ、割り当ての自動割り当てネットワーク上に作成し、publicネットワークからフローティングIPを付けます。セキュリティグループが許可する受信ポートは22、80、443だけです。デフォルトのログインユーザーはJetstream2のイメージによって異なるため、Potatoは独自のpotato-deployユーザーを作成し、このデプロイ用に生成したデプロイキーをそのユーザーに持たせます。--sizeで別のフレーバーを選べます。割り当てに自動割り当てネットワークがない場合は--networkでネットワークを指定し、--volume-gbでタスクのデータ用に別のボリュームを追加します。m3.smallは1時間あたり2サービスユニット(SU、割り当ての単位)を消費し、動かしたままにすると1年で約17,520になるため、研究が終わったらインスタンスを削除してください。
デプロイする
同じコマンドを--dry-runなしで実行し、Potatoに求められたら計画を確認します。
potato deploy up myproject/config.yaml --provider openstack --cloud jetstream2タスクはhttps://potato-<name>.<allocation>.projects.jetstream-cloud.orgで提供され、<name>はタスク名から作られます。Jetstream2はフローティングIPが付いてから1、2分後にDNS名を公開し、Potatoはそれを待ってから90日間有効なLet's Encryptの証明書を要求します。デプロイの最後に、URLと、設定の隣にある管理者キーファイル.potato/secrets.jsonのパスが表示されます。管理者キーで/adminの管理者ダッシュボードを開けます。
研究の間は、potato deploy statusがサーバーと証明書が正常かどうかを報告し、potato deploy logs myproject/config.yaml -fでサーバーのログを追い続けられます。設定を編集した後にもう一度upを実行すると、新しいバージョンが同じインスタンスにアップロードされます。
研究を終える
アノテーションはインスタンスのディスク上にあり、このディスクはインスタンスと一緒に削除されます。先に自分のマシンにpullして内容を確認し、それからインスタンスを削除してください。
potato deploy pull myproject/config.yaml
potato deploy destroy myproject/config.yamlpullはデプロイが収集したものをすべて新しいpotato-pull-<name>-<timestamp>ディレクトリに書き出します。destroyは一度もpullされていないデプロイでは実行されません。実行が済めば、インスタンスはSUを消費しなくなります。
学内のOpenStackクラウド
同じプロバイダーは学内のOpenStackクラウドでも使えます。そのクラウドのclouds.yamlエントリーを任意の名前で保存し、その名前を--cloudに渡してください。Jetstream2のデフォルト値がない場合、Potatoはm1.smallフレーバー、Ubuntu 24.04イメージ、public外部ネットワークを使い、--size、--os-image、--networkでそれぞれを変更できます。学内のクラウドではインスタンスにDNS名が付かないため、タスクはAWS Lightsailのデプロイ先と同じく、フローティングIPと有効期間の短いIP証明書で提供されます。
トラブルシューティング
**「No --network given and this project has no auto-allocated network」**は、割り当てにデフォルトのネットワークがないことを意味します。HorizonかExosphereでネットワークとルーターを作成し、--network <name>を渡してください。
初回のデプロイでは証明書の発行に数分かかります。 Let's Encryptが発行できるようになるには、DNS名が名前解決できる必要があるためです。
関連
- Potatoをローカルまたはクラウドで実行する:ほかのクラウドデプロイ先
- アノテーションサーバーのデプロイ:ホストの選び方
- Jetstream2とOpenStackのリファレンス