Qiskit 0.38 リリースノート
0.38.0
Terra 0.21.2
変更なし
エア 0.11.0
前奏曲
Qiskit Aer 0.11.0 リリースのハイライトは以下の通り:
- 新しい自己完結型 Python ネームスペースへの移行
qiskit_aer AerStatevectorクラスの導入- を導入した。
primitives,SamplerそしてEstimator - との共同走行のサポートの導入 cuQuantum
新機能
-
のサポートを追加した。
BackendV2from_backend()をサポートした。 これで、入力インスタンスからNoiseModel。BackendV2インスタンスからオブジェクトを生成できるようになった。 入力がBackendV2入力がfrom_backend()で使われる場合、2つの非推奨オプション、standard_gatesとwarningsは潔く無視される。 -
の実装を追加した。
primitives,SamplerおよびBaseSamplerBaseEstimatorインターフェイスは、qiskit aerを活用して原始演算の計算を効率的に実行します。 プリミティブAPIの詳細についてはqiskit.primitivesドキュメントを参照してください。 -
Qiskit Aerに共有ライブラリを追加し、外部プログラムからAerのシミュレーション手法を使用できるようにしました。 これは実験的な機能であり、APIは非推奨期間なしに変更される可能性がある。
-
M1 macOS システムのサポートを追加。 arm64 macOS でサポートされている Python バージョン >= 3.8 用のプリコンパイル済みバイナリは、今回および今後のリリースについては PyPI で公開される予定です。
-
状態ベクトル、密度行列、ユニタリーシミュレータをGPUで高速化するために、 cuQuantum, NVIDIA の量子コンピューティング用APIのサポートを追加しました。 これは cuQuantum Beta 2 のための実験的な実装です。 ( 0.1.0 ) cuQuantum のパスを
CUSTATEVEC_ROOTに設定することで、Aerをビルドする際に、Aerの実装の代わりに cuStateVec のAPIを高速化することができる。 (バイナリ配布は現在行っていません) cuStateVector は、device='GPU'とcuStateVec_thresholdオプションを設定することで有効になる。 cuStateVec は、入力回路の量子ビット数がcuStateVec_threshold以上のときに有効になる。 -
ppc64le および s390x Linux プラットフォームでの動作を部分的にサポート。 このリリースでは、 ppc64le および s390x Linux プラットフォーム用のコンパイル済みバイナリを、すべての Python バージョンで公開する予定です。 しかし、他のサポートされているプラットフォームとは異なり、Qiskitの上流の依存関係のすべてがまだこれらのプラットフォームをサポートしているわけではありません。 そのため、これらの依存関係をビルドしてインストールするには、C/C++コンパイラが必要になる場合があります。また、 Python 環境が動作するだけのシンプルな
pip install qiskit-aerでは、Qiskit Aer をインストールするのに十分ではありません。 さらに、これらの同じ制約によって、コンパイル済みのホイールを公開する前にテストすることができないため、他のプラットフォームに存在するようなプラットフォーム・サポートに関する保証は、これらのプラットフォームには適用されない。 -
+-rlからなるラベルで初期化を許可する。 これで、以下のコードが機能するようになった:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(4) qc.initialize('+-rl') qc.save_statevector() AerSimulator(method="statevector").run(qc)
既知の問題
- Linux s390x プラットフォーム(またはその他のビッグエンディアンプラットフォーム)で動作している場合、次の演算を含む回路を実行すると、エンディアンのバグにより動作しない。
UnitaryGate演算を含む回路を実行すると、エンディアンのバグのために動作しない。 詳細は #1506を参照。
アップグレードの注意
-
大量の量子ビットに対するMPI並列化は、複数のチャンクスワップをall-to-all通信として適用するように最適化され、MPIプロセス上で交換されるデータサイズを減少させることができる。 このアップグレードにより、並列化のスケーラビリティが向上する。
-
設定された
methodAerSimulatorに応じて、デフォルトのfusion_max_qubitとfusion_thresholdを設定する。 以前は、すべてのシミュレーション方法において、fusion_max_qubitとfusion_thresholdのデフォルト値は、それぞれ5と14でした。 しかし、その最適値は走行方法によって異なる。 以前のデフォルトに依存していた場合は、fusion_max_qubit=5またはfusion_threshold=14を明示的に設定することで、以前のデフォルト動作を保持することができる。 例:from qiskit_aer import AerSimulator sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14) -
このアップデートは、 cuQuantum 22.5.0.41 をサポートするためのもので、 cuStateVec API の一部におけるスレッドセーフのバグ修正も含まれている。 Qiskit Aer は、 cuStateVec を有効にすると、マルチショットおよびマルチチャンク並列化のためのマルチスレッドをオンにします。
-
Python 3.6 での qiskit-aer の実行はサポートされなくなりました。 Python >= qiskit-aer のインストールと実行には 3.7 が必要です。
-
qiskit-aerPython パッケージは、自己完結型の名前空間qiskit_aerに移行した。 以前は、qiskit.providers.aerとして、qiskit-terraと名前空間を共有していた。 これはいくつかの理由から問題があり、今回のリリースではそこから脱却している。 当分の間、import qiskit.providers.aerは機能し続け、自動的にqiskit_aerにリダイレクトされる。 レガシーqiskit.provider.aerネームスペースからのインポートは、将来的にDeprecationWarning。 このリリースから潜在的な問題を回避するため、qiskit.providers.aerからqiskit_aerへ、qiskit.Aerからqiskit_aer.Aerへ、すべてのインポートを更新することを推奨します。 -
0.9.0 以降、非推奨となったスナップショット命令(
SnapshotStatevectorなど)を削除した。 これらの命令を使用するアプリケーションは、対応するセーブ命令(SaveStatevectorなど)を使用するように修正する必要がある。 -
qiskit_aer.extensionsモジュールを完全に取り外した。 スナップショットの指示が削除されたことで、このモジュールは空っぽになり、もはや目的を果たさなくなった。 -
Qiskit Terra の必要なバージョンが 0.20.0 に上がりました。
バグ修正
-
MPIチャンクの配布に関する修正。 Thrust実装のグローバル・インデックスの修正、非ゲート操作のキャッシュ・ブロックの修正を含む。 また、savestatevectorはすべてのプロセスに同じ状態ベクトルを返す(1番目のプロセスだけが以前に状態ベクトルを受け取った)
-
マルチプレクサゲートが制御量子ビットを持たない場合、ユニタリーゲートとして扱う。 以前は、マルチプレクサ・ゲートが制御量子ビットを持たない場合、量子状態は更新されなかった。
-
RelaxationNoisePass、実際の命令の単位に関係なく、命令の持続時間が常に dt 時間単位であると仮定されていたバグが修正された。 すべての命令継続時間単位で単位変換が正しく処理されるようになりました。詳細は #1453を参照のこと。
-
ループ・パラメーターがループ本体で使用されていない
forループのシミュレーションを修正。 例えば、以前はこのコードは失敗していたが、今は成功する:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
バックエンドから T2 の値が 2 ㎤以上 T1 が供給された場合に
NoiseModel.from_backend()でエラーが発生するバグを修正。 この修正後は、 T2 の値を 2 ˶* T1 まで切り捨て、切り捨てた場合は警告を出すようになりました。 このバグは#1391で導入されたもので、それ以前のNoiseModel.from_backend()では、 T2 の値を 2 ㏄* T1 まで無言で切り捨てていた。詳細は 1464号を参照。
-
Python multiprocessing呼び出しが意図せずネストされた結果、 Python からC++にノイズ・モデルをロードする際のシリアライゼーション・オーバーヘッドが大幅に増加したことによるノイズ・シミュレーションのパフォーマンス低下を修正しました。 詳細は 1407号を参照。
-
これは問題#1557の修正です。 seed_simulatorオプションが設定されていない場合、プロセスごとに異なるシード番号が生成される。 これは、すべてのプロセスが同じシード番号を使用するように、サーキットで平均シードセットを修正するものである。
-
これは、マルチチャンク並列化と並列プロセスへのマルチショット分配のためのMPI並列化の修正である。 MPIディストリビューションを妨げるディストリビューション設定の欠落がありましたが、修正されました。
-
これは、GPUやMPIのためのキャッシュ・ブロッキング・トランスパイラとチャンク並列化のための修正です。 この修正により、コントロールまたはターゲット量子ビットが多い(> blocking_qubits)量子ビットの問題が修正されました。 この修正により、blocking_qubitsではマルチ制御ゲートのターゲット量子ビットのみがキャッシュブロックされる。 しかし、ターゲット量子ビットの数がblocking_qubitsよりまだ大きい場合(すなわち、大きなユニタリー行列乗算)はサポートしない
-
QuantumError.to_dict()、N量子ビット回路命令において、アセンブルされた命令が命令量子ビットではなく、常に量子ビット[0, ..., N-1]に適用されるバグを修正。 このバグは、デバイスと偽のバックエンドノイズモデルにも影響した。詳細は 1415号を参照。
-
seed_simulatorが設定されていない場合、各回路にランダムにシードが割り当てられるため、多回路シミュレーションは別の多回路シミュレーションで再現できませんでした。 ユーザは、マルチサーキットシミュレーションでランダムに割り当てられるseed_simulatorを使用して、複数のシングルサーキットシミュレーションを実行する必要がありました。 この修正により、最初のマルチサーキット・シミュレーションで最初の回路のseed_simulatorを設定することにより、マルチサーキット・シミュレーションを別のマルチサーキット・シミュレーションで再現できるようになります。 この修正により https://github.com/Qiskit/qiskit-aer/issues/1511 で報告された、パラメータバインドのシミュレーションが各回路インスタンスで同じ結果を返す問題も解決します。
-
パウリノイズ使用時のGPU向けマルチショットバッチ最適化におけるパフォーマンスの問題を修正。 この修正により、マルチスレッドによるノイズ・サンプリングの実行が可能になり、複数のGPUを使用する場合はネストされた OpenMP 並列化が使用されます。 これは問題1473の修正です。 <https://github.com/Qiskit/qiskit-aer/issues/1473>
-
これは cuStateVec のサポートに関する修正で、 cuStateVec の一部の API が cuQuantum から 0.40 に仕様変更されたことによるビルドエラーの修正です。
-
while_loop が QuantumCircuit の末尾である場合の問題を修正した。 while_loop はジャンプ命令とマーク命令に変換される。 しかし、while_loopが回路の最後にある場合、そのマーク命令は間違って切り捨てられる。 この修正により、切り捨てアルゴリズムが常にマーク命令のままとなるように修正された。
IBM Q プロバイダー 0.19.2
変更なし