マネージド・ワークフローの紹介
Qiskit Functions とマネージド・ワークフローはベータ機能であり、Premium、Flex、On-Prem(IBM Quantum® Platform API 経由)の各プランのユーザーのみが利用できます。
マネージド・ワークフローは、IBM Quantum Platform が管理する古典コンピュートリソース上で、お客様のカスタム Python コードを実行します。コンピュートインフラストラクチャやストレージを管理することなく、量子・古典ハイブリッドのワークフロー、大規模な対角化、長時間実行される並列タスクを実行できます。
マネージド・ワークフローを使用する場合
構築済みの Catalog Function がお客様のタスクに対応していない場合、または独自の手法を再利用可能な関数としてパッケージ化したい場合に、マネージド・ワークフローを使用してください。マネージド・ワークフローは、次のようなことをしたい場合に適しています。
-
クラウドで長時間のジョブを実行する。 ノートパソコンを閉じてもマネージド・ワークフローは実行し続けるため、後からジョブに再接続できます。
-
大容量メモリや GPU を備えたノードを使用する。 ワークロードに必要なメモリ、CPU、GPU のリソースを選択できます。
-
タスクを並列実行する。 多数のシングルノードジョブを同時に開始できます。
お客様は、ワークフローのコード、その依存関係、およびワークフローがサポートするコンピュートサイズを提供します。マネージド・ワークフローは、お客様のパッケージがインストールされた構築済み環境の IBM® 管理のコンピュート上でワークフローを実行し、ワークフローが読み書きするファイル用のクラウドストレージを提供します。
マネージド・ワークフローの仕組み
ワークフローは一度アップロードすれば、必要な数だけジョブを実行できます。すべてのジョブは次のように動作します。
-
ジョブは、ローカルディスクが空の新しい環境で開始されます。マネージド・ワークフローは、ジョブの終了後にその環境をシャットダウンします。
-
ジョブは、ワークフローのアップロード時に定義したコンピュートサイズのいずれかで実行されます。実行ごとに異なるサイズを選択できます。
-
ジョブは、ワークフローのファイルストレージを読み書きできます。ファイルストレージ内のファイルは、ジョブの終了後も保持されます。
各ジョブはローカルディスクが空の状態で開始されるため、後続のジョブが見つけられるのは、先行のジョブがファイルストレージに保存したファイルだけです。
実行のライフサイクル
各ジョブは非同期で最大 24 時間実行されます。インスタンスに十分な割り当てがある場合、最大 50 件のアクティブなジョブを同時に持てます。
次の表は、図の各ステージと、そのステージ中に表示されるジョブのステータスを説明しています。
| ステージ | 何が起こるか | ジョブのステータス |
|---|---|---|
| アップロード | ワークフローのコード、依存関係、サイズをアップロードします。無効なアップロードは、ジョブが実行される前にワークフローによって拒否されます。 | なし(まだジョブはありません) |
| キュー | run() を呼び出します。ワークフローは、インスタンスに十分な割り当てがあるかを確認し、コンピュートが利用可能になった時点でジョブをスケジュールします。 | QUEUED |
| 開始 | ワークフローは、選択したコンピュートプロファイルで環境を作成します。 | INITIALIZING |
| 実行 | ワークフローのエントリポイントが実行されます。エントリポイントは update_status() で進行状況を報告でき、実行中は logs() でログを読み取れます。 | RUNNING、または RUNNING: WAITING_FOR_QPU のように設定したステージ |
| 結果 | ジョブが終了し、ワークフローは結果とログを保持したまま環境をシャットダウンします。 | DONE、ERROR、または CANCELED |
実行中のジョブがアクセスできるもの
各ジョブは分離された環境で実行されます。次の図と表は、実行中のジョブが使用できるリソースを示しています。
| リソース | ジョブが使用できるもの |
|---|---|
| コンピュート | ジョブ用に選択したコンピュートプロファイルの CPU、メモリ、GPU。 |
| コードとパッケージ | ワークフローと一緒にアップロードしたファイルと、環境にインストールされているサポート対象のパッケージ。 |
| 引数 | run() に渡した引数。get_arguments() で読み取れます。 |
| QPU アクセス | run() の呼び出しに使用した認証情報とインスタンス。ワークフローが送信する QPU ジョブはお客様のインスタンス上で実行され、使用量に計上されます。 |
| 出力 | ジョブが save_result() で保存する結果、ジョブが出力するログ、ジョブが update_status() で設定するステータス更新。 |
| ファイルストレージ | ワークフローのすべての実行で共有されるファイル。ファイルはジョブの終了後もストレージに残ります。 |
| インターネット | アクセスできません。ジョブは外部への接続を行えません。パッケージはワークフローのアップロード時に宣言し、データは引数またはファイルとして提供してください。 |
セキュリティと分離
マネージド・ワークフローは、各ジョブを他のジョブから分離し、その中で実行されるコードの権限を制限します。前の表に示したアクセス境界は、この分離の一部です。マネージド・ワークフローは、次の保護も適用します。
-
ジョブの分離。 お客様のジョブの環境では、他のジョブは実行されません。これには、他のユーザーのジョブや、同時に実行されるお客様自身のジョブも含まれます。
-
結果、ログ、ストレージ。 ジョブの結果とログを読み取れるのは、そのジョブを実行したユーザーだけです。
-
認証情報。 マネージド・ワークフローは、ジョブが使用する認証情報(API トークンを含む)を保存する際に暗号化します。ワークフローのコードは、ジョブの実行中にこれらの認証情報を読み取れます。
-
権限。 マネージド・ワークフローは、エントリポイントが開始される前に、環境から管理者レベルの権限を削除します。
オンプレミス HPC との比較
マネージド・ワークフローは、コンピュート時間の取得方法、ソフトウェアのセットアップ、ジョブの送信方法の点でオンプレミスの HPC クラスターと異なります。次の表で、一般的なタスクを比較します。
| タスク | オンプレミス HPC クラスター | マネージド・ワークフロー |
|---|---|---|
| コンピュート時間の取得 | クラスター管理者に割り当てまたは予約を依頼します。 | IBM Quantum インスタンスの割り当てを使用します。run() を呼び出すと、ワークフローが各ジョブをキューに入れます。 |
| システムへのアクセス | SSH でログインノードに接続します。 | ローカルコンピューター上の Python クライアントを使用します。マネージド・ワークフローにはログインノードはありません。 |
| ソフトウェアのインストール | ソフトウェアをビルドする、モジュールをロードする、または管理者にパッケージのインストールを依頼します。 | すべての環境にインストールされているサポート対象のパッケージを使用するか、その他のパッケージ用に wheel をアップロードします。 |
| ジョブの送信 | バッチスクリプトを書き、スケジューラーに送信します。 | ジョブの引数を指定して run() を呼び出します。 |
| リソースの要求 | ノード、CPU、メモリ、GPU を要求します。 | ワークフローに定義されたコンピュートサイズのいずれかを選択します。各ジョブは単一のノードで実行されます。 |
| パラメータースイープの実行 | ジョブ配列を送信します。 | 引数のセットごとに run() を 1 回呼び出します。 |
| 共有ファイルの保存 | 共有スクラッチファイルシステムに書き込みます。 | ワークフローのファイルストレージに書き込みます。 |
| 実行時間の制限 | 実行時間(ウォールタイム)の上限を設定します。 | ワークフローは 24 時間後にジョブをキャンセルします。 |
| 長時間ジョブのチェックポイント | スクラッチストレージにチェックポイントを書き込みます。 | 中間結果をファイルストレージに保存します。 |
| 失敗したジョブの再実行 | ジョブを再送信します。 | run() を再度呼び出します。ワークフローは、失敗したジョブを自動的に再試行しません。 |
| ジョブの監視 | ログインノードからキューとログファイルを確認します。 | ローカルの Python セッションから、各ジョブのステータス、ログ、結果を確認します。 |
次のステップ
- クライアントパッケージをインストールし、認証します。
- 最初のマネージド・ワークフローをデプロイして、ワークフローのアップロード、実行、結果の取得を行います。