主な新機能、改善点、非推奨となった機能などQiskit SDK v1.1.0リリースの要点をご紹介します。
2024年5月29日にQiskit SDK v1.1.0のリリースを発表しました!これは今年メジャーバージョンv1となったQiskit SDKの初めてのマイナーリリースです。これはマイナーリリースであるため、ユーザーにQiskit SDK v1.0から移行を求めなければならないような、抜本的な変更は導入されていません。詳細なリリースノートはこちらのドキュメントで確認できます。ここでは重要なハイライトを簡単にまとめます。
このブログで触れる重要な更新点は次の通りです。
このセクションでは、Qiskit SDK v1.1.0リリースに含まれる最重要の新機能や改善点のいくつかについて説明します。これらの変更について詳しく知りたい場合や、この記事に掲載されていない機能について知りたい場合は、全新機能のリストをご確認ください。
QuantumCircuitsでの古典変数のサポート
量子回路オブジェクトは、今回のリリースで型指定あり古典変数を含めることができるようになりました。これにより、回路実行中のリアルタイムの古典計算の基本的表現が可能になります。これらの変数は、回路への入力として指定するか、スコープ付き変数として指定するかの二つの方法があります。
リアルタイム計算は、quantum.circuit.classicalに導入された新しい式と型システムによって管理されています。それらの変数は、量子ビット測定やターゲット制御フロー操作の出力を格納する新しいExprやVar変数を扱うqiskit.circuit.classical.exprインターフェイスを介して管理されます。
(サンプルコードは原文ブログをご参照ください)
これらのオブジェクトは、QuantumCircuit内で古典的な式がサポートされる場所であればどこでも使用することができます。現在これらは制御フロー操作の式のみですが、将来、ゲートのパラメーターにも拡張する予定があります。
重要なポイントとして、この新機能は頑健なリアルタイム古典計算への第一歩にすぎず、ハードウェアやシミュレーター・バックエンドで完全にサポートされるまでにはまだ時間がかかるということに留意してください。これらの変数はまだプリミティブ・インターフェース(訳註:EstimatorとSampler)ではサポートされていませんが、今後の発展に応じて開発に反映されるでしょう。
実行速度
v1.1.0のマイナー・リリースには、トランスパイラーの実行速度に関するいくつかの重要な改善が含まれています。特に、TwoQubitWeylDecompositionとTwoQubitBasisDecomposerクラスにおける2量子ビット合成ルーチンがRustで再実装され、実行速度の大きな改善が得られています。これらの二つのクラスは、UnitarySynthesisパスのデフォルトのユニタリ合成プラグインによって利用されます。UnitarySynthesisパスは、QuantumCircuitに明示的に追加されるユニタリ行列を合成します。そして、optimization_level=3のプリセット・パスマネージャーでは、2量子ビット・のぞき穴的最適化(peephole optimization)を実行します。
(グラフは原文ブログをご参照ください)
さらに、私たちは実行時間と最適化のバランスをより良く調整し、将来のリリースで最適化レベル2をデフォルトの最適化レベルとして設定することを目指し、最適化レベル2に対していくつかの重要な変更を行いました。
たとえば、いくつかの論理的な最適化パスをレベル2初期化段階で実行するようにしました(ElidePermutations、RemoveDiagonalBeforeMeasure、InverseCancellation、CommutativeCancellationが含まれます)。レイアウトとルーティングについてヒューリスティック・レベルを変更し、ユーザーがほとんどの状況でより良い結果を得ることができるようにプリセットパスを調整しました。さらに、レベル2の最適化段階でユニタリ合成とあわせて2量子ビット・のぞき穴的最適化を実行するようにしましたが、それは最適化ループの外で1度だけの実行です。その処理の後、従来と同様な最適化ループを実行しますが、これには可換性キャンセル(commutative cancellation)と、1量子ビット・のぞき穴的最適化、すなわちOptimize1qGatesDecompositionパスだけが含まれます。
(グラフは原文ブログをご参照ください)
最後に、複数制御Xゲート(MCXGate)や複数制御位相ゲート(MCPhaseGate)オブジェクトの分解に関してのいくつかの改善と、NLocal系列(EfficientSU2、TwoLocal、ExcitationPreserving、RealAmplitudesなど)での回路合成の大幅な効率化を行いました。MCXGateとMCPhaseGateに対する改善では、合成されるゲート数が2桁以上減少しています。
新しいトランスパイラー・パス
このリリースでは、いくつかの新しいトランスパイラー・パスが導入されました。特にご紹介したいのは、新しいElidePermutations変換パスとStarPreRoutingパスです。
ElidePermutationsパスは、トランスパイルのパイプラインで、ルーティングやレイアウトが行われる前に実行される最適化処理です。これは、スワップゲートを削除し、その代わりに仮想的な量子ビットの位置を入れ替えます。
StarPreRouting変換パスは、星形に接続された一連の2量子ビット・ゲートを、線形に接続された2量子ビット・ゲートとスワップに書き換えます。ここでいう星形の接続とは、複数の2量子ビット・ゲートが連続するところで、1つの量子ビットがそれらのターゲットないし制御量子ビットとして共有されている状況です。そのようなパスの回路変換例を以下に示します:
以下にある断片的なコードを使って、このパスの性能をご自分で試していただくことができます。
(図とサンプルコードは原文ブログをご参照ください)
このセクションでは、このリリースで導入された非推奨措置のうち重要なものについて説明します。ここで扱うのは、Qiskitの公式な非推奨措置ポリシーに従って、今後、非推奨であるという警告をまず出力し、その後Qiskit 2.0で削除される予定がある機能です。 (公式な非推奨措置ポリシーのドキュメントはこちらです。) 非推奨警告に対処する方法についてのガイダンスをお探しの場合は、前の記事の非推奨機能についてのセクションをご覧ください。今回のリリースに特有の非推奨機能については、こちらを参照してください。
Python 3.8のライフサイクル終了に備える
Python 3.8のサポートは既に廃止されていますが、Python 3.8は今後いくつかのマイナー・リリースでは引き続きサポートされます。Qiskit v1.2.0が、Python 3.8がライフサイクルを終了する前に登場する最後のリリース、すなわち Python 3.8で実行できる最後のリリースになります。その後のQiskit v1.3.0からのリリースはPython 3.8での実行をサポートしません。
Providerの非推奨化
抽象基本クラス Provider と ProviderV1 は今回から非推奨となり、Qiskit 2.0で削除されます。これらのインターフェイス定義が提供する抽象化は、単に属性名、バックエンド、そしてget_backend() メソッドをカプセル化するだけで、実質的な価値を提供していませんでした。
「プロバイダー」という概念は、バックエンドの群として存続します。現在プロバイダーを実装している方は、あなたの実装している親クラスとしてのProviderV1を削除するだけでコードを調整することができます。(この変更の一環として、後方互換性のために get_backend の実装を追加することをお勧めします。)
いくつかのトランスパイラー・パスの非推奨化と一般化
qiskit.transpiler.passesモジュールに存在するトランスパイラー・パスに対して、いくつかの非推奨化が決められました。以下が含まれます。
以上が、最新リリースの一番重要なポイントでした。今後のQiskitのバージョンについてアイデアを提供したいときには、新機能の要望やバグの報告するGitHubイシューをオープンすることができます。次のリリースについての情報を確認するには、Qiskit SDKのマイルストーンを参照してください。
このリリースに貢献した多くの人に特別な感謝を申し上げます。そのリストは原文ブログをご参照ください。
このブログ投稿はKaelyn Ferrisが執筆したものですが、Abby Mitchell、Blake Johnson、Jake Lishman、Kevin Krsulich、Luciano Bello、Matthew Treinish、Robert Davisによる貢献がありました。
この記事は英語版IBM Researchブログ「Release news: Qiskit SDK v1.1.0 is here!」(2024年5月29日公開)を翻訳し一部更新したものです。