Qiskit 0.42 リリースノート
0.42.1
Terra 0.23.3
前奏曲
Qiskit Terra 0.23.3 はマイナーなバグ修正リリースです。
バグ修正
-
変換パスのバグを修正。
Optimize1qGatesDecomposition変換パスで、ゲートエラーがゼロのときに置換のスコアが誤って計算されるバグを修正。 -
メソッドは
ECRGate.inverse()メソッドは、カスタム・ゲートではなく別のECRGateインスタンスを返すようになった。 -
QuantumState.probabilities()とQuantumState.probabilities_dict()メソッドにおける確率を区間[0, 1]にクリップする。 これは、例えば確率が1より大きくなり、サンプラーのショット・エミュレーションでエラーにつながる丸め誤差を修正するものである。 #9761 を修正。 -
のバグを修正した。
BackendSamplerバイナリ確率のビット列が、最大の結果を整数で表すのに必要な最小のビット数に切り詰められるというバグを修正した。 つまり、例えば{"0001": 1.0}が測定された場合、結果は{"1": 1.0}に切り捨てられた。 -
コンストラクタ・メソッドを
PassManagerConfig.from_backend()コンストラクタ・メソッドがBackendV1ベースのシミュレータバックエンドで使用された場合のコンストラクタメソッドの問題を修正しました。 いくつかのシミュレータ・バックエンドで、オプション・フィールドが入力されていない場合、コンストラクタがエラーになります。 9265と #8546を修正 -
を修正した。
BackendSamplerとBackendEstimatorをカスタムbound_pass_managerで正常に実行できるように修正した。 以前は、bound_pass_managerを持つ単一回路の実行では、ステップの1つでリストが返されなかったため、ValueErrorが発生した。 -
これにより
GateDirectionトランスパイラ・パスは、明示的な較正が与えられていても、ジェネリック・カップリング・マップやターゲットに存在しないゲートを拒否しなくなりました。 -
クラスの問題を修正しました。
CommutationCheckerクラスの問題を修正しました。 qubitsを表す配列が必要なだけなのに、 qubits用の配列を内部的に確保しようとしていました。 例えば、4量子ビットのゲートでは2キロバイトではなく32ギガバイトが必要になる。 修正 #9197 -
からの空のキャリブレーションの取得
InstructionPropertiesraises AttributeError が修正されました。 今はNoneを返している。 -
修正
qasm()reset命令の後に;を追加するように修正。 -
レジスタ名とパラメータ名は、 OpenQASM 3 のエクスポート時にエスケープされるようになりました (
qasm3.dumps())でエスケープされるようになりました。 修正 #9658。 -
QPY (
qpy.load()を使用)はStatePreparation命令が正しくデシリアライズされるようになりました。 以前は、QPYは1つを含むファイルをロードしようとするとエラーになっていた。 8297を修正。 -
のバグを修正した。
random_circuit()のバグを修正しました。64qubits以上かつconditional=True、生成される回路の条件に誤った値が入力される可能性があり、転置やその他の回路操作時にさまざまな不具合が発生します。 修正 #9649。 -
クラスの
OneQubitEulerDecomposerクラスのメソッドangles()とangles_and_phase()入力行列がcomplex/np.cdouble以外の dtype の場合、エラーになる問題を修正。 以前のリリースでは問題なく動作していましたが、Qiskit Terra 0.23.0。OneQubitEulerDecomposerの内部がRustで書き直されたときに動作しなくなりました。 9827を修正 -
Qiskitゲート
CCZGate,CSGate,CSdgGateはqelib1.incで定義されていないため、 OpenQASM 2.0 としてダンプする場合は、その定義をファイルに挿入する必要がある。 9559 、#9721 、#9722 を修正。
エア 0.12.0
変更なし
IBM Q プロバイダー 0.20.2
変更なし
0.42.0
Terra 0.23.2
変更なし
エア 0.12.0
前奏曲
Qiskit Aer 0.12.0 リリースのハイライトは以下の通り:
- に基づく新しいGPUテンソルネットワークシミュレータを追加した。 cuTensorNet
- 新しい
AerDensityMatrixクラスをqiskit_aer.quantum_infoモジュールに- 入力オブジェクトをまず回路に直列化するのではなく、内部C++表現に直接変換することで、
AerSimulator、およびレガシーQasmSimulator、StatevectorSimulator、UnitarySimulatorクラスの実行時パフォーマンスを大幅に改善。QuantumCircuitにシリアライズする代わりに、入力オブジェクトを内部C++表現に直接変換することで、実行時のパフォーマンスを大幅に向上させます。QasmQobj. この改善は、少ない数の量子ビットを持つ回路や、parameter_bindsキーワード引数を使ったパラメータ化された回路で最も顕著に現れます。
新機能
-
NoiseModelに新しいクラスメソッドfrom_backend_properties()を追加。 これにより、BackendPropertiesオブジェクトから新しいNoiseModelを構築することができる。 以前は同様の機能がNoiseModel.from_backend()コンストラクターにありましたが、BackendPropertiesオブジェクトだけではNoiseModelオブジェクトを作成するのに十分な情報が含まれていないため、削除されました。 -
モジュールに新しいクラス、
AerDensityMatrixを追加した。qiskit_aer.quantum_infoモジュールに追加した。 このクラスは、QiskitのアップストリームDensityMatrixクラスと同じインターフェースを提供するために使用されます。 -
新しいキーワード引数
abelian_groupingをEstimator. この引数はEstimatorは入力観測値を量子ビット単位で可換な観測値にグループ化し、期待値を計算するのに必要な回路の実行回数を減らしてEstimator. デフォルトではTrueに設定されている。 -
AerStateには、密度行列をAER::QV::DensityMatrixに設定する新しいメソッドinitialize_density_matrix()がある。 このメソッドはq.i.states.DensityMatrixで呼び出され、データをndarrayで初期化する。initialize_density_matrix()は、ndarrayデータのコピーまたは共有を指定するブーリアン引数を持つ。 データがC++とpythonで共有されている場合、C++がアクセスしている間、pythonでデータを収集してはならない。 -
run()(すべてのシミュレータバックエンドクラス)でシミュレーションを実行するためのオーバーヘッドが大幅に削減されました。 オブジェクトを内部的にQuantumCircuitオブジェクトをQasmQobjオブジェクトを直接QuantumCircuitオブジェクトをシミュレーションに使用されるC++の内部回路構造に直接渡すことで実現した。 この改善は、run()のキーワード引数parameter_bindsを使った、少ない数の量子ビットを持つ回路やパラメータ化された回路のシミュレーションで最も顕著です。 パルス・シミュレーション(現在は廃止されたPulseSimulator)とDASKベースのシミュレーションは、依然として内部シリアライゼーションを使用しているため、このパフォーマンス向上は見られないことに注意してください。 -
AerJob、circuits()、オブジェクトのリストを返す新しいメソッドを追加。QuantumCircuitオブジェクトのリストを返す このメソッドは、シミュレーションにQobjが使用されている場合、None。 -
AerStateおよびAerStatevectorKraus演算子に対応しました。AerStatevectorでは、エラー確率に基づいて、クラウス演算子の1つが量子状態にランダムに適用される。 -
NVIDIA のAPIに基づく新しいシミュレーション・メソッドを追加。 cuTensorNetcuQuantum SDKのAPIに基づく新しいシミュレーション・メソッドを追加した。 これは、GPUアクセラレーションによる一般的なテンソルネットワークシミュレータを提供するもので、内部で回路をテンソルネットワークに変換してシミュレーションを実行することにより、あらゆる量子回路をシミュレートすることができる。 このシミュレーション方法を使用するには、
AerSimulatorオブジェクトを初期化する際に、method="tensor_network"とdevice="GPU"を設定します。 例:from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")この方法は、状態ベクトルと密度行列の両方のシミュレーションをサポートします。 回路に
SaveStatevector操作がなければ、密度行列シングルショットシミュレーションでノイズシミュレーションを行うこともできる。この新しいシミュレーション手法は、テンソルネットワークスライシング技術により、複数のGPUやMPIプロセスによる並列化もサポートしている。 しかし、この種のシミュレーションは、入力回路が複雑な場合、非常に時間がかかる可能性が高い。
-
Qiskit Aerをソースからビルドする際に、異なるBLASライブラリを使用するように環境変数
BLA_VENDORを指定できるようになりました。 デフォルトでは、 OpenBLAS。 BLA_VENDOR`で指定されたBLASライブラリーが見つからない場合、Cmakeのビルド・プロセスは停止する。
既知の問題
- このリリースのQiskit AerはConan 2.X リリースシリーズとは互換性がありません。 Qiskit Aerをソースから手動でビルドする場合は、Conan 1.x リリースを使用していることを確認してください。 コナンの新しいバージョンとの互換性は、将来のリリースで修正される予定です。 詳しくは issue #1730 を参照されたい。
アップグレードの注意
-
プリミティブのデフォルトの動作は
Estimatorプリミティブは、入力された観測値を量子ビット単位の可換な観測値にグループ化します。 グループ化することで実行する回路の数を減らし、パフォーマンスを向上させる。 以前の動作を望むなら、キーワード引数 でインスタンスを初期化できる。Estimatorabelian_grouping=Falseインスタンスを初期化することができる。 -
2022年10月にリリースされたQiskit Terra 0.22.0 で非推奨となった、コンテキストマネージャーと回路、(Estimatorのみobservables)、パラメータによる初期化でのプリミティブの使用を削除しました。
-
run()メソッドの動作は、入力として無効なオブジェクトやシミュレーション不可能なオブジェクトが渡された場合に変更されました。QuantumCircuitオブジェクトが入力として渡された場合の動作が変更された。 以前は、このような場合、run()メソッドはAerJobを返し、result()メソッドはResultをERRORまたはPARTIAL COMPLETED(回路入力がすべて無効か一部のみ無効かによって異なる)と共に返す。 このリリースから、これらのステータスを持つ結果オブジェクトを返す代わりに、例外が発生するようになりました。 この変更が必要になったのは、C++に渡す前にオブジェクトをQobjに内部的にシリアライズしなくなったことで、パフォーマンスが向上したためである。QuantumCircuitオブジェクトをC++に渡す前に内部的にQobjにシリアライズする必要がなくなったためです。QuantumCircuitからの直接変換は、Qiskit Aerが実行できない回路をシミュレートしようとすると直接エラーになります。 以前の動作を望むなら、スタンドアロンモードでQiskit Aerをビルドし、手動でオブジェクトをJSON表現にシリアライズすることができます。QuantumCircuitオブジェクトをQasmQobjそれをスタンドアロンAerバイナリに渡すと、以前の動作が保持されます。 -
NoiseModelの非推奨メソッドadd_nonlocal_quantum_error()は削除された。 代替手段はない。 非局所的な量子エラーを追加したい場合は、回路に独自の量子エラーを挿入するトランスパイラ・パスを書き、Aerシミュレータで回路を実行する直前にそのパスを実行する必要があります。 -
現在、
NoiseModel.from_backend()は、backendの引数としてBackendPropertiesオブジェクトを受け付けないように変更されている。 代わりに新しく追加されたNoiseModel.from_backend_properties()。 -
noise、いくつかのメソッドや関数(以下に列挙)で広く使われていた非推奨のstandard_gates引数が削除された。NoiseModel.from_backend()およびnoise.device.basic_device_gate_errors()kraus_error()mixed_unitary_error(),, にある。pauli_error()depolarizing_error()noise.errors.standard_errorsQuantumError.__init__()
シミュレータが内部的にノイズ(量子エラー)をどのように表現するかについて、ユーザーは不可知論であるべきなので、代替手段はありません。
-
QuantumErrorのコンストラクタは、noise_opsの引数として、非推奨の json ライクな入力をサポートしなくなった。 例えば、noise_opsの引数には新しい styple 入力を使用します、from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])また、非推奨の引数を削除した:
number_of_qubits:noise_opsの代わりにQuantumCircuitを使用する。atol:代わりにQuantumError.atol。standard_gates:代替手段はない(ユーザーは量子エラーの内部表現についてあまり気にする必要はない)。
-
非推奨の
noise.errors.errorutilsモジュールは完全に削除され、代替はありません。 モジュール内のすべての関数は、standard_errorsの関数を実装するためだけに使われるヘルパー関数であり(つまり、それらはプライベート関数として提供されるべきであった)、もはやその中で使われることはない。 -
非推奨の
utils.noise_remapperは完全に削除され、C++コードが回路を切り捨てた場合、自動的にノイズモデルを切り捨て、リマップするようになったため、代替手段はない。 -
utils.noise_transformationモジュールのすべての非推奨関数 (pauli_operators()とreset_operators()) とクラス (NoiseTransformer) は削除され、代替はありません。 それらは実際には、approximate_quantum_error()を実装するためだけに使われるプライベートな関数/クラスであり、公開されるべきではなかった。 -
AerSimulator、PulseSimulatorクラスのrun()メソッドで、以前は非推奨だったqobjという引数名が削除された。 この引数名はQiskit Aer 0.8.0 リリースの一部として非推奨となり、それぞれcircuitsとschedulesの引数名に変更されました。 -
Aer の
setup.pyが更新され、手動でもsetuptools.setupのsetup_requiresオプションでも、ビルド要件をインストールするためにpipを呼び出そうとしなくなった。 Aerを構築する好ましい方法は、以下のような PEP 517互換のビルダーを使うことである:pip install .この変更は、ビルド要件がインストールされていない場合、
setup.pyへの直接呼び出しが機能しなくなることを意味する。 これは、最新の Python パッケージング・ガイドラインに沿ったものである。
非推奨のメモ
-
Python 3.7 をサポートする Qiskit Aer の実行サポートは非推奨となり、将来のリリースで削除される予定です。 これは、将来のリリースから、使用している Python のバージョンを Python 3.8 以上にアップグレードする必要があることを意味します。
-
PulseSimulatorバックエンドは非推奨となり、将来のリリースで削除される予定です。 パルスレベルシミュレーションを実行するためにPulseSimulatorバックエンドを使用している場合は、代わりに Qiskit Dynamics ライブラリを使用してシミュレーションを実行する必要があります。 Qiskit Dynamicsは、PulseSimulatorバックエンドよりも柔軟でロバストなパルスレベルシミュレーションフレームワークを提供します。 -
AerJobクラスのqobj()メソッドは非推奨となり、将来のリリースで削除される予定です。run()への入力としての qobj フォーマットの使用は、qiskit-aer 0.9.0 以降非推奨となっており、ほとんどの場合、このメソッドはNoneを返すようになった。run()メソッドへの入力を取得したい場合は、代わりにcircuits()メソッドを使うことができる。QuantumCircuitオブジェクトを返します。 -
noiseモジュール全体のいくつかのメソッドや関数で広く使用されていたwarnings引数は、 Python 'の標準warningsライブラリのフィルタリング関数の使用を優先するため、非推奨となった。
バグ修正
-
メモリが連続していない
numpy.ndarrayから新しいAerStatevectorインスタンスを作成する際の問題を修正しました。 これまでは、AerStatevector、入力配列が連続であると仮定していたため、予期せぬ動作(およびエラーの可能性)が生じていた。 メモリレイアウトがチェックされ、numpy.ndarrayが内部的に連続配列としてコピーされてから使用されるように修正されました。 -
クラスの問題を修正しました。
Samplerクラスの問題を修正した。QuantumCircuitが複数の古典的レジスタを含む場合に失敗していた問題を修正した。 修正 #1679 -
GPUで使用される古典的なレジスタのビット数が、チャンクの空き使用可能メモリを計算する前に設定されていなかったため、無限ループが発生しました。 そのため、この修正では、バッチ・ショット実行が有効になっている場合、チャンクを割り当てる前にビット数を設定する。
-
GPUを有効にし、 cuQuantum を無効にした場合のビルドエラーとテストエラーを修正した。
-
行列積状態シミュレーション法(
AerSimulatorオブジェクトを初期化する際にキーワード引数method="matrix_product_state"を設定する方法)において、シミュレータが計測を行う前に量子ビットを誤ってソートしてしまい、無限ループに陥る可能性がある問題を修正しました。 これは、量子ビットの測定が現在のMPS構造の順序で行われ、その後、後処理として並べ替えが行われるように修正された。 これもまた、シミュレーション手法の性能を向上させ、もつれ状態をより正確に表現することを可能にするだろう。 修正 #1694 -
AerSimulatorバックエンドのメソッド:statevectordensity_matrixmatrix_product_statestabilizer
のバックエンドとして使用した場合、
break_loopおよびcontinue_loop命令をサポートすることが報告された。transpile()関数のバックエンドとして使用された場合にサポートされることを報告した。 シミュレーターはすでにこれらをサポートしていたが、報告されていなかっただけだった。
IBM Q プロバイダー 0.20.2
このリリースでは、 0.20.1 で追加されたパッケージの要件に設定された、過度に制限的なバージョンの制約を削除しています。 0.20.1、バージョンキャップを持つことを意図していた唯一の依存関係 は、 requests-ntlm パッケージであり、その新しいリリースは、現在 qiskit-ibmq-provider と非互換性を持つ唯一の依存関係であった。 0.20.1 の一部として追加された他のバージョンキャップは、 qiskit-ibmq-provider パッケージが他のパッケージで使用されている依存バージョンと互換性がないため、いくつかの環境でインストールの問題を引き起こしていました。