メインコンテンツへスキップ

Qiskit Runtime 実行モードの概要

Qiskit Runtimeが導入された当初、ユーザーは回路を個別のジョブとして実行することしかできませんでした。さまざまな種類の量子ワークロードが登場するにつれて、異なるスケジューリング戦略の必要性が明らかになりました。実行モードはジョブのスケジュール方法を決定し、適切な実行モードを選択することで、ワークロードを予算内で効率的に実行できます。実行モードには、ジョブ、セッション、バッチの3種類があります。

ジョブモード

コンテキストマネージャーを使用せずに実行する、EstimatorまたはSamplerへの単一のプリミティブリクエストです。回路と入力はプリミティブ統合ブロック(PUB)としてパッケージ化され、量子コンピューター上の実行タスクとして送信されます。ジョブモードで実行するには、プリミティブをインスタンス化する際に mode=backend を指定します。使用例についてはプリミティブの例を参照してください。

バッチモード

複数ジョブからなるワークロードを効率的に実行するための、マルチジョブ管理機能です。これらのワークロードは、互いに条件的な依存関係のない、独立して実行可能なジョブで構成されています。バッチモードでは、ユーザーはすべてのジョブを一度に送信します。

システムは各プリミティブジョブの前処理(古典計算)ステップを並列化またはスレッド化し、ジョブをまたいで量子実行をより密にパッケージ化してから、各ジョブの量子実行を連続して実行することで、最も効率的な結果を提供します。スレッド化の詳細については、実行モードFAQページを参照してください。

バッチモードで実行される一連のジョブ。各ジョブの古典計算部分が同時に行われ、その後すべてのジョブがQPUに送信されます。QPUは最初のジョブがQPUに到達した時点からロックされ、最後のジョブのQPU処理が完了するまでお客様専用となります。ジョブ間にQPUがアイドル状態になるギャップはありません。

注意事項
  • バッチ処理の場合、ジョブが送信された順序で実行される保証はありません。また、バッチジョブはできる限り近い時間帯に実行されますが、バックエンドへの排他的アクセスは保証されません。そのため、QPUの処理能力が十分であれば、バッチジョブが他のユーザーのジョブと並行して実行される場合があります。また、バッチジョブの間にQPUキャリブレーションジョブが実行される場合があります。
  • バッチ内に送信される最初のジョブのキューイング時間は短縮されません。そのため、単一ジョブを実行する場合、バッチによるメリットはありません。

バッチモードで実行するには、プリミティブをインスタンス化する際に mode=batch を指定するか、バッチコンテキストマネージャー内でジョブを実行します。例についてはバッチでのジョブ実行を参照してください。

セッションモード

マルチジョブワークロードを実行するための専用ウィンドウです。このウィンドウの間、ユーザーはシステムへの排他的アクセスが保証され、キャリブレーションジョブを含む他のジョブは実行できません。これにより、ユーザーは変分アルゴリズムをより予測可能な方法で実験したり、スタック内の並列性を活用して複数の実験を同時に実行したりすることができます。セッションを使用することで、各ジョブを個別にキューに入れることによる遅延を回避でき、これは古典リソースと量子リソース間で頻繁な通信を必要とする反復タスクに特に有効です。

セッションモードで実行される一連のジョブと、バッチモードで実行される別の一連のジョブ。各ジョブの間にはインタラクティブTTL(インタラクティブ存続時間)があります。アクティブウィンドウは最初のジョブが開始されると始まり、最後のジョブが完了した後に終了します。最初のジョブセットの最終ジョブが完了すると、アクティブウィンドウが終了しセッションが一時停止します(ただし終了はしません)。その後、別の一連のジョブが開始され、同様の形式でジョブが続きます。QPUはセッション全体を通じてお客様専用に予約されます。

セッションモードで実行するには、プリミティブをインスタンス化する際に mode=session を指定するか、セッションコンテキストマネージャー内でジョブを実行します。例についてはセッションでのジョブ実行を参照してください。

注意事項
  • セッション内に送信される最初のジョブのキューイング時間は短縮されません。そのため、単一ジョブを実行する場合、セッションによるメリットはありません。
  • Openプランのユーザーはセッションジョブを送信できません。

基本的なワークフロー

バッチとセッションの基本的なワークフローは似ています。

  1. バッチまたはセッションの最初のジョブは通常のキューに入ります。バッチの場合、ジョブのバッチ全体がまとめてスケジュールされます。
  2. 最初のジョブが実行を開始すると、最大存続時間(TTL)タイマーが始まり、終了に達するまで停止または一時停止しません。
  3. インタラクティブTTLタイマーは各ジョブの完了後に開始されます。インタラクティブTTLウィンドウ内でワークロードジョブの準備ができていない場合、ワークロードは一時的に非アクティブ化され、通常のジョブ選択が再開されます。バッチまたはセッションが最大TTL値に達していない場合、ジョブが非アクティブ化されたワークロードを再アクティブ化できます。
    備考

    ワークロードを再アクティブ化するには、ジョブが通常のキューを通過する必要があります。

  4. 最大TTL値に達すると、ワークロードは終了し、残りのキュー内のジョブはすべて失敗します。現在実行中のジョブは、インスタンスのコスト制限を超える場合、完了まで実行されません。

以下のビデオは、セッションを例として基本的なワークフローを説明しています。

TTLタイマーの詳細については、最大実行時間ガイドを参照してください。

次のステップ