メインコンテンツへスキップ
このプロジェクトはベータ版です。バグを見つけましたか?GitHub Issueを開く。質問やアイデアがありますか?Discussionsで質問する — フィードバックをお待ちしています!
このページの翻訳品質はいかがですか?

マネージド・ワークフローの紹介

プランの提供状況

Qiskit Functions とマネージド・ワークフローはベータ機能であり、Premium、Flex、On-Prem(IBM Quantum® Platform API 経由)の各プランのユーザーのみが利用できます。

マネージド・ワークフローは、IBM Quantum Platform が管理する古典コンピュートリソース上で、お客様のカスタム Python コードを実行します。コンピュートインフラストラクチャやストレージを管理することなく、量子・古典ハイブリッドのワークフロー、大規模な対角化、長時間実行される並列タスクを実行できます。

マネージド・ワークフローを使用する場合​

構築済みの Catalog Function がお客様のタスクに対応していない場合、または独自の手法を再利用可能な関数としてパッケージ化したい場合に、マネージド・ワークフローを使用してください。マネージド・ワークフローは、次のようなことをしたい場合に適しています。

  • クラウドで長時間のジョブを実行する。 ノートパソコンを閉じてもマネージド・ワークフローは実行し続けるため、後からジョブに再接続できます。

  • 大容量メモリや GPU を備えたノードを使用する。 ワークロードに必要なメモリ、CPU、GPU のリソースを選択できます。

  • タスクを並列実行する。 多数のシングルノードジョブを同時に開始できます。

お客様は、ワークフローのコード、その依存関係、およびワークフローがサポートするコンピュートサイズを提供します。マネージド・ワークフローは、お客様のパッケージがインストールされた構築済み環境の IBM® 管理のコンピュート上でワークフローを実行し、ワークフローが読み書きするファイル用のクラウドストレージを提供します。

マネージド・ワークフローの仕組み​

ワークフローは一度アップロードすれば、必要な数だけジョブを実行できます。すべてのジョブは次のように動作します。

  • ジョブは、ローカルディスクが空の新しい環境で開始されます。マネージド・ワークフローは、ジョブの終了後にその環境をシャットダウンします。

  • ジョブは、ワークフローのアップロード時に定義したコンピュートサイズのいずれかで実行されます。実行ごとに異なるサイズを選択できます。

  • ジョブは、ワークフローのファイルストレージを読み書きできます。ファイルストレージ内のファイルは、ジョブの終了後も保持されます。

各ジョブはローカルディスクが空の状態で開始されるため、後続のジョブが見つけられるのは、先行のジョブがファイルストレージに保存したファイルだけです。

実行のライフサイクル​

各ジョブは非同期で最大 24 時間実行されます。インスタンスに十分な割り当てがある場合、最大 50 件のアクティブなジョブを同時に持てます。

From your Python session, you call upload() one time to upload the workflow's code, packages, and compute profiles. No job exists yet. Each call to run(args) creates a job that moves through these stages: Queue, where it waits for allocation with status QUEUED; Start, where the managed workflow creates the environment with status INITIALIZING; Running, where your code can optionally set stages with update_status(): Mapping (RUNNING: MAPPING), Optimizing (RUNNING: OPTIMIZING_FOR_HARDWARE), Waiting for QPU (RUNNING: WAITING_FOR_QPU), Executing QPU (RUNNING: EXECUTING_QPU), and Post-processing (RUNNING: POST_PROCESSING); and Result, where the environment shuts down with status DONE, ERROR, or CANCELED. While running, the job reads and writes workflow file storage, which exists outside the job, is shared by all runs, and persists before and after each job. From your session, you can read status() from Queue onward, logs() from Running onward, and result() after the job reaches Result. All three remain available after the job ends.

次の表は、図の各ステージと、そのステージ中に表示されるジョブのステータスを説明しています。

ステージ何が起こるかジョブのステータス
アップロードワークフローのコード、依存関係、サイズをアップロードします。無効なアップロードは、ジョブが実行される前にワークフローによって拒否されます。なし(まだジョブはありません)
キューrun() を呼び出します。ワークフローは、インスタンスに十分な割り当てがあるかを確認し、コンピュートが利用可能になった時点でジョブをスケジュールします。QUEUED
開始ワークフローは、選択したコンピュートプロファイルで環境を作成します。INITIALIZING
実行ワークフローのエントリポイントが実行されます。エントリポイントは update_status() で進行状況を報告でき、実行中は logs() でログを読み取れます。RUNNING、または RUNNING: WAITING_FOR_QPU のように設定したステージ
結果ジョブが終了し、ワークフローは結果とログを保持したまま環境をシャットダウンします。DONE、ERROR、または CANCELED

実行中のジョブがアクセスできるもの​

各ジョブは分離された環境で実行されます。次の図と表は、実行中のジョブが使用できるリソースを示しています。

You call run() with arguments from your Python session and receive status, logs, and the result. Inside the managed workflow, each run executes in an isolated job environment with access to its compute (CPU, RAM, and optionally GPU), your code and packages, and its arguments. The job produces outputs with save_result(), logs, and update_status(), and submits QPU jobs that run on your instance. File storage and your instance, which provides access and cost management, are shared across all managed workflow jobs and persist after the job ends. The job has no internet access.

リソースジョブが使用できるもの
コンピュートジョブ用に選択したコンピュートプロファイルの 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 セッションから、各ジョブのステータス、ログ、結果を確認します。

次のステップ​

推奨事項