量子コンピューティング

ユーティリティー・スケールの計算タスクを効率化する実行モード

記事をシェアする:

Qiskit v1.xで改善された新しい実行モード(execution mode)は、量子ワークロードの信頼性、予測可能性、そして効率を大幅に向上させています。

ユーティリティー・スケールの研究を行うためには、ユーティリティー・スケールのワークロード(計算タスク)を多数実行することができる必要があります。一つのワークロードに開始から終了まで何十時間もかかる場合があるので、IBM®の量子システム群はいくつかの重要な要件を満たす必要があります。すなわち、十分な台数の(ユーティリティー・スケールの)プロセッサーが提供されている必要があり、それらは安定していなければいけませんし、そしていつでも、つまり毎日24時間利用できる必要があります。

IBMはこれらすべての基準を満たすよう努めています。今では、世界で最大の100量子ビット以上のシステム群を所有しています。利用可能なマシン時間において業界をリードし、システム全体で95%以上のアップタイムを実現しています。これにより、IBMのシステムは多様な実行モードをサポートできるようになりました。実行モードとは、異なる種類のワークロードを実行するプロセスを最適化するフレームワークです。

このブログでは、Qiskitユーザーが量子ワークロードを実行する際に利用できる3種の改善した新しい実行モードについて説明します。すなわち、ジョブ・モードセッション・モードバッチ・モードです。これらそれぞれのモードは、ユーザーが実行したいワークロードの種類に応じるために、異なる種類の効率性を提供します。しかし、これら個々のモードとそれぞれが役立つワークロードの種類について解説する前に、以下ではまず、実行モードとは何か、それがユーザーにどのように有用かを明らかにします。

 

実行モードとは

実行モードとは、ユーザーの量子回路が、量子や古典の計算リソースでどのように実行されるかを決定するルールや手続きです。IBMが2016年にクラウドに最初の量子コンピューターを設置したとき、ユーザーは回路を個々のジョブとしてのみ実行できました。2022年には、Qiskit Runtimeセッションという新しい実行モードが導入され、初めてQiskit Runtimeユーザーは、複数ジョブから構成される反復的なワークロードを量子ハードウェア上で効率的に実行することができるようになりました。

それからも私たちはユーザー・エクスペリエンスをさらに改善する方法を探し続けてきました。このブログで詳しく説明する3つの実行モードは、ユーザーが実行したい回路を最適に実行できるようなジョブのグルーピングに、かつてない柔軟性を提供します。

 

ジョブ・モード:必要なすべてのコンテキストを含んだリクエスト

ユーザーが複数ジョブから構成される複雑なワークロードを実行できるように、私たちは多大な努力をしてきましたが、単純なスタンドアロン・ジョブも引き続き非常に重要です。量子の初心者が学習を開始する時には必ずスタンドアロン・ジョブを投入するという点で、学習の基礎であると言うことができますし、また、初期実験やテストを実行する時に最も費用対効果の高い方法でもあります。ユーザーが小規模なワークロードをユーティリティー・スケールに拡張する際にも、不可欠なプロセスとして、ジョブのテストおよびデバッグにスタンドアロンのジョブを必ず使います。

私たちが、個々のジョブの実行を最適化する方法を探求していく中で、「ジョブ」と呼んでいたこの基本的な構造を、トランスパイル後の3つのランタイム・ステップに分割できることを見出しました。 (1) ランタイム・コンパイル、(2) 量子実行、(3) 結果を生成するための後処理、です。

これまでユーザーのジョブは、これらの3つのステップが終了するまでシステムを「ロック」していました。しかし私たちは、3ステップのフレームワークを使ってシステムのロックをより細かいレベルで定義すれば、システムの利用効率を向上させることができると気づきました。この新しいジョブ・モードでは、ランタイム・コンパイルと古典での後処理をロック期間から除外することで、全体としてユーザーが量子システムで実行できる合計作業量を増やしました。

 

 

バッチ・モード:複数ジョブから構成されるワークロードを一度に投入

バッチ・モードは、ユーザーが複数ジョブのワークロードで構成される実験をより効率的に実行できるようにするコンテキスト・マネージャーです。ここでのワークロードは、お互いに条件的関係がなく独立して実行可能な複数のジョブで構成されています。

バッチ・モードでは、ユーザーはすべてのジョブを一度に投入します。システムは、各プリミティブ・ジョブの前処理ステップを並列化またはスレッド化し、複数ジョブにわたる量子実行をより高密度にパッケージングします。そして、それぞれのジョブの量子実行を速やかに続けて実行し、最も効率的な結果を得られるようにします。このフレームワークは、ユーティリティー・スケールのワークロードの実行効率を大幅に向上させることが期待されます。

 

 

以下の例は、複数回路を含む長いリストを複数のジョブに分割し、バッチとして実行して、並列処理の利点を活かす方法を示しています。


(このプログラムのテキストをコピーするには英語ブログをご参照ください)

新しいバッチ・モードの詳細については、こちらのドキュメントを参照してください。

 

セッション・モード: 条件付き更新を伴う複数ジョブ・ワークロード

私たちは、2022年に初めて導入されたQiskit Runtimeセッション実行モードに対して、重要な改善を加えました。これらの改善は、反復的なワークロードで発生する不必要な待ち時間を取り除き、それらのワークロードの信頼性を向上し、予測可能なものにします。

反復的なワークロードとは、再帰的に準備される複数のジョブのワークロードです。これらのワークロードでは、実験が収束するまで、前のジョブの結果が後続のジョブの入力に反映される形でジョブを繰り返しますが、言い換えればここで後続のジョブの入力は、前のジョブの結果に対する条件式に基づいて設定されます。このフレームワークが利用できる有名な例として、VQEやQAOAといった量子アルゴリズムがあります。ユーザーがこの反復的なプロセスをより効率的に管理できるように、私たちはQiskit Runtimeセッションを開発しました。

元のQiskit Runtimeセッションは、反復的なワークロードとそれに含まれる複数のジョブをまとめて1つの実験として管理するためのコンテキスト・マネージャーとして機能していました。ワークロードの最初のジョブが開始されると、不要なキュー時間を最小化するように、後続のジョブには優先度が与えられました。

最近のアップデートでは、Qiskit Runtimeセッションの効率、信頼性、予測性をさらに向上させるために、新しいセッション・モードに対して「システム・ロック」の概念を拡張しています。セッション・モードでは、システムは同一セッションにグループされたジョブを優先して処理するだけではなく、最初のジョブの開始から最後のジョブの終了まで、システムを独占的かつ専用で使用することになります。

 

 

言い換えるならば、新しいセッションモードを使うことは、システムがそのセッションにロックされることを意味します。これにより、ユーザーは自分のジョブ・ループが反復的なルーチンでどのように動作するかについて、より詳細な理解が得られて、自分のセッション・ランタイムをより正確に予測することができます。重要なのは、これらの専用セッションはスレッド・セーフであるため、ユーザーは1セッション内で複数のワークロードを実行できるということです。また、実行時コンパイルと後処理ステップの両方について複数の並列実行パイプラインを利用することができるため、この新しいセッション・モードを使えばリソースへの排他的なアクセスが得られ、複数ジョブを同時に実行してシステム全体を効率的に使えるようになります。

これがどのように機能するのか例を見てみましょう。例として、以下の2つのコード・ブロックは、スレッドを使ったセッション・モードで2つのVQEアルゴリズムを実行する方法を示しています。初めに、実行するアルゴリズムに必要なツールをインポートしています。ここでは、アンザッツ(ansatz)としてEfficientSU2を、オペレーター・クラスとしてSparsePauliOPを使用します。

 


(このプログラムのテキストをコピーするには英語ブログをご参照ください)

入力を確立した後、セッションを設定し、複数の反復的なワークロードを開始できます。


(このプログラムのテキストをコピーするには英語ブログをご参照ください)

新しいセッション・モードについて詳しくは、こちらのドキュメントを参照してください。

 

ユーティリティー・スケールのワークロードの効率を向上する

私たちは、今回導入した新しい実行モードは、ユーティリティー・スケールのワークロードを探求するユーザーにとって大きな価値を持っていると信じています。これらの実行モードは、個々のジョブ、反復ジョブを含む複数ジョブ・ワークロード、そして独立に実行できる複数ジョブ・ワークロードを実行する便利なフレームワークを提供します。同時に、新しい実行モードは、ジョブの信頼性・予測性・効率を上げ、ユーザーがシステムから最大限の恩恵を得ることを助けます。

 

表:異なる実行モードの利点の比較
モード 用途 利点
ジョブ・モード 量子計算のみ 少数のジョブ向け。手早く実験を実行する時に最も使いやすい。バッチ・モードよりも短時間で実行できるかもしれないため、小規模なジョブには最速の選択肢となると思われます。
バッチ・モード 量子計算のみ ユーティリティー・スケールのジョブに対して最大5倍の速度。反復的ではないジョブが多数あるとき、バッチを用いると合計時間を削減できます。複数ジョブから構成されるバッチ全体がまとめてスケジュールされるため、それぞれのジョブについてのキュー時間が追加でかかることがありません。1つのバッチに含まれたジョブは近接して実行されます。
セッション・モード 古典および量子計算 古典と量子のリソースを一貫して完全な制御を行うことで、コストは高いですが、ワークフローを一貫した体験として最適化します。セッションのアクティブ・ウィンドウの期間中、システムに対して専用で排他的なアクセスを確保し、他のユーザーや他のシステム・ジョブが実行されないようにします。

 

実験に新しい実行モードを活用するための、詳細な情報や豊富なコード例が含まれているドキュメントをご確認ください。

 


この記事は英語版IBM Researchブログ「How execution modes enable efficient, utility-scale workloads」(2024年5月6日公開)を翻訳し一部更新したものです。

佐藤 綾祐
監訳:佐藤 綾祐
IBM Quantum, Backend Developer
立花 隆輝
監訳:立花 隆輝
IBM Quantum, シニア・テクニカル・スタッフ・メンバー
量子コンピューターの社会実装に携わる。
More 量子コンピューティング stories

Qiskit向けの新しい推奨ノートブック環境

OVHcloudやqBraidが提供するJupyterベースの環境は、クラウド上でQiskitを扱うプロセスを簡略化します。 IBM®は、量子回路に初めて取り掛かろうとしている初心者に対しても、既に100量子ビットを持っ […]

さらに読む

Qiskit SDK v1.1.0がリリースされました!

主な新機能、改善点、非推奨となった機能などQiskit SDK v1.1.0リリースの要点をご紹介します。 2024年5月29日にQiskit SDK v1.1.0のリリースを発表しました!これは今年メジャーバージョンv […]

さらに読む

AIで強化したトランスパイラー・パスで量子回路を最適化

Qiskit Transpiler Serviceのベータ版がIBM Quantum Premium Planで利用可能になりました。これにより、ユーザーはAIとIBM Cloudリソースを活用してトランスパイル処理を高 […]

さらに読む