Skip to content

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つの手順で済みます。

  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を見つけた人は誰でも登録してアノテーションできます)を表示します。クラウドソーシングの研究では、公開登録は通常は意図したとおりの設定です。名前の決まったアノテーターの場合は、デプロイする前に、allow_all_users: falseを設定してuser_config.usersの下に一覧を書くか(パスワード管理)、所属機関を通じてサインインしてもらうようにしてください(SSOとOAuth認証)。

計画を確認する

ドライランは何も作成せず、デプロイのすべての手順、タスクに付くホスト名、インスタンスが割り当てから消費する量を表示します。

bash
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に求められたら計画を確認します。

bash
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して内容を確認し、それからインスタンスを削除してください。

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

pullはデプロイが収集したものをすべて新しい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名が名前解決できる必要があるためです。

関連