メインコンテンツへスキップ

BackendV1 から BackendV2 への移行

Qiskit の BackendV1 クラスは非推奨となり、サービスから削除される予定です。この移行ガイドでは、BackendV1 から BackendV2 にアップグレードしたプロバイダーを使用している場合に必要な小さな調整について説明します。

備考

qiskit_ibm_runtimeqiskit_aer のみを使用している場合、対応は不要です。qiskit_ibm_runtime パッケージは常に BackendV2 を使用しており、qiskit_aer はバージョン 0.13 以降 BackendV2 を使用しています。

BackendV2 の主な変更点

Qiskit の Backend モデルは、SDK の範囲内で量子コンピューターについて推論できる抽象化レイヤーを Qiskit SDK に提供するために設計されました。モデルの最初のイテレーションは BackendV1 クラスで導入されました。このクラスは Backend の情報を一連の データコンテナ、すなわち BackendConfiguration クラスと BackendProperties クラスに格納していました。

BackendV2 クラスは、 ほとんどの Backend プロパティへのユーザーアクセスを再定義し、ネイティブな Qiskit データ構造で動作し、よりフラットな アクセスパターンを持つようにしました。BackendV2 モデルの中核は Target クラスであり、Qiskit が実行のために Circuit を最適化するために使用できるトランスパイル制約を含む QPU の表現です。

Qiskit SDK は BackendV2 入力のみで動作するように更新されており、 ほとんどのプロバイダーは BackendV1 から BackendV2 にアップグレードしています。既存のプロバイダーは、円滑な移行のために可能な限り古いアクセス方法を非推奨にすることが期待されますが、最終的にはユーザーがコードを調整する必要があります。

BackendV2 の原則は、 Backend に関する情報のほとんどがその Target オブジェクトに含まれており、Backend の属性は情報を返すために BackendV2.target 属性を照会することが多いということです。ただし、多くの場合、属性は Target が含むことができる情報の サブセットのみを提供します。例えば、backend.coupling_mapBackendV2.target 属性でアクセス可能な Target から構築された CouplingMap を返します。しかし、Target には 2つ以上の Qubit で動作する命令(CouplingMap では表現できません)が含まれている場合や、 Qubit のサブセット(または2 Qubit 命令の場合は2 Qubit リンク)のみで動作する命令が含まれている場合があり、 それらは BackendV2.coupling_map が返す完全なカップリングマップには 詳細が記載されません。そのため、ユースケースによっては、 BackendV2 での同等のアクセスよりも深く調べる必要があるかもしれません。

BackendV2 の具体的な変更点

ほとんどの属性には直接の置き換えがあり、移行作業が簡素化されます。インターフェース間の唯一の不一致点は CouplingMap にあります。

以下は、BackendV1 でのアクセスパターンの例と、 BackendV2 での新しい形式の表です。

important

右にスクロールして重要な注記をご確認ください。

BackendV1BackendV2注記
backend.configuration().n_qubitsbackend.num_qubits
backend.configuration().coupling_mapbackend.coupling_mapBackendV2 からの戻り値は CouplingMap オブジェクトです。BackendV1 ではエッジリストです。また、これは backend.target に含まれる情報のビューに過ぎず、Target オブジェクトに含まれる情報のサブセットである可能性があります。
backend.configuration().backend_namebackend.name
backend.configuration().backend_versionbackend.backend_versionBackendV2.version 属性はオブジェクトが実装する抽象 Backend インターフェースのバージョンを表し、BackendV2.backend_version は Backend 自体のバージョンに関するメタデータです。
backend.configuration().basis_gatesbackend.operation_namesBackendV2backend.target 属性に含まれるオペレーション名のリストを返します。Target には、この名前のリストで表現できる以上の情報が含まれている場合があります。例えば、一部のオペレーションは Qubit のサブセットでのみ動作し、一部の名前は異なるパラメータで同じ Gate を実装しています。
backend.configuration().dtbackend.dt
backend.configuration().dtmbackend.dtm
backend.configuration().max_experimentsbackend.max_circuits
backend.configuration().online_datebackend.online_date
InstructionDurations.from_backend(backend)backend.instruction_durations
backend.defaults().instruction_schedule_mapbackend.instruction_schedule_map
backend.properties().t1(0)backend.qubit_properties(0).t1
backend.properties().t2(0)backend.qubit_properties(0).t2
backend.properties().frequency(0)backend.qubit_properties(0).frequency
backend.properties().readout_error(0)backend.target["measure"][(0,)].errorBackendV2 では、指定された Qubit での Measure オペレーションのエラー率が読み出しエラーのモデリングに使用されます。ただし、BackendV2 オブジェクトは複数の測定タイプを実装し、Target に個別にリストすることができます。
backend.properties().readout_length(0)backend.target["measure"][(0,)].durationBackendV2 では、指定された Qubit での Measure オペレーションの持続時間が読み出し長のモデリングに使用されます。ただし、BackendV2 オブジェクトは複数の測定タイプを実装し、Target に個別にリストすることができます。