Skip to main content
IBM Quantum Platform

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を修正

  • を修正した。 BackendSamplerBackendEstimator をカスタム bound_pass_manager で正常に実行できるように修正した。 以前は、 bound_pass_manager を持つ単一回路の実行では、ステップの1つでリストが返されなかったため、 ValueError が発生した。

  • これにより GateDirection トランスパイラ・パスは、明示的な較正が与えられていても、ジェネリック・カップリング・マップやターゲットに存在しないゲートを拒否しなくなりました。

  • クラスの問題を修正しました。 CommutationChecker クラスの問題を修正しました。 nn qubitsを表す配列が必要なだけなのに、 2n2^{n} qubits用の配列を内部的に確保しようとしていました。 例えば、4量子ビットのゲートでは2キロバイトではなく32ギガバイトが必要になる。 修正 #9197

  • からの空のキャリブレーションの取得 InstructionProperties raises 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, CSdgGateqelib1.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 、およびレガシー QasmSimulatorStatevectorSimulatorUnitarySimulator クラスの実行時パフォーマンスを大幅に改善。 QuantumCircuit にシリアライズする代わりに、入力オブジェクトを内部C++表現に直接変換することで、実行時のパフォーマンスを大幅に向上させます。 QasmQobj. この改善は、少ない数の量子ビットを持つ回路や、 parameter_binds キーワード引数を使ったパラメータ化された回路で最も顕著に現れます。

新機能

  • NoiseModel に新しいクラスメソッド from_backend_properties() を追加。 これにより、 BackendProperties オブジェクトから新しい NoiseModel を構築することができる。 以前は同様の機能が NoiseModel.from_backend() コンストラクターにありましたが、 BackendProperties オブジェクトだけでは NoiseModel オブジェクトを作成するのに十分な情報が含まれていないため、削除されました。

  • モジュールに新しいクラス、 AerDensityMatrix を追加した。 qiskit_aer.quantum_info モジュールに追加した。 このクラスは、Qiskitのアップストリーム DensityMatrix クラスと同じインターフェースを提供するために使用されます。

  • 新しいキーワード引数 abelian_groupingEstimator. この引数は 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ベースのシミュレーションは、依然として内部シリアライゼーションを使用しているため、このパフォーマンス向上は見られないことに注意してください。

  • AerJobcircuits()、オブジェクトのリストを返す新しいメソッドを追加。 QuantumCircuit オブジェクトのリストを返す このメソッドは、シミュレーションにQobjが使用されている場合、 None

  • AerState および AerStatevector Kraus 演算子に対応しました。 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() メソッドは ResultERROR または 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_errors
    • QuantumError.__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() を実装するためだけに使われるプライベートな関数/クラスであり、公開されるべきではなかった。

  • AerSimulatorPulseSimulator クラスの run() メソッドで、以前は非推奨だった qobj という引数名が削除された。 この引数名はQiskit Aer 0.8.0 リリースの一部として非推奨となり、それぞれ circuitsschedules の引数名に変更されました。

  • Aer の setup.py が更新され、手動でも setuptools.setupsetup_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 バックエンドのメソッド:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    のバックエンドとして使用した場合、 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 パッケージが他のパッケージで使用されている依存バージョンと互換性がないため、いくつかの環境でインストールの問題を引き起こしていました。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。