Skip to main content
IBM Quantum Platform

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() をサポートした。 これで、入力インスタンスから NoiseModelBackendV2 インスタンスからオブジェクトを生成できるようになった。 入力が BackendV2 入力が from_backend() で使われる場合、2つの非推奨オプション、 standard_gateswarnings は潔く無視される。

  • の実装を追加した。 primitives, Sampler および BaseSampler BaseEstimator インターフェイスは、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プロセス上で交換されるデータサイズを減少させることができる。 このアップグレードにより、並列化のスケーラビリティが向上する。

  • 設定された method AerSimulator に応じて、デフォルトの fusion_max_qubitfusion_threshold を設定する。 以前は、すべてのシミュレーション方法において、 fusion_max_qubitfusion_threshold のデフォルト値は、それぞれ 514 でした。 しかし、その最適値は走行方法によって異なる。 以前のデフォルトに依存していた場合は、 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-aer Python パッケージは、自己完結型の名前空間 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

変更なし

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