特別にキャリブレーションされた命令
デフォルトでは、IBM® 量子コンピューター上の量子ゲートと読み出し操作は、一般的なユースケース全体で最適な性能が得られるようにキャリブレーションされています。ただし、一部のワークロードでは、パラメーターが異なる形で調整された命令の方が有利です。たとえば、MidCircuitMeasure(measure_2)は回路の途中での測定向けに調整された読み出し操作であり、より低速な cz ゲートは、一部のエラー軽減ワークフローの結果を改善できます。
特別にキャリブレーションされた命令には2つの形式があり、アクセス方法が異なります。
-
シグネチャが異なる命令は、デフォルトのキャリブレーションの中で標準の命令とともにキャリブレーションされるため、他の命令と同様に回路に追加できます。通常、
measure_2のように接尾辞で識別されます。 -
代替キャリブレーションは、デフォルトのキャリブレーションの一部を、異なる調整のパラメーターで置き換えます。バックエンドを取得する際に
calibration_idを渡すことで選択します。
IBM 量子コンピューターのキャリブレーション方法については、モニタリング、キャリブレーション、およびベンチマーキングを参照してください。
シグネチャが異なる命令
これらの命令は標準の命令セットとともにキャリブレーションされているため、それらをサポートするバックエンドを取得するために特別な操作は必要ありません。使用するには、対応する qiskit-ibm-runtime の命令を回路に追加します。
| 命令 | 説明 | 代表的なユースケース | Qiskit での使用方法 | プロセッサーファミリー |
|---|---|---|---|---|
measure_2 | より短い測定パルス | 回路途中測定 | MidCircuitMeasure(v0.43.0 以降) | Heron, Nighthawk r2 |
reset_2 | measure_2 を使用する、より短い条件付きリセットパルス | 回路途中でのキュービットのリセット | MidCircuitReset(v0.49.0 以降) | Heron |
measure_reset | measure のような測定で、キュービットもリセットする* | キュービットの測定とリセット | MeasureReset(v0.50.0 以降) | Heron, Nighthawk r2 |
measure_reset_2 | measure_2 のようなより短い測定で、キュービットもリセットする* | 回路途中でのキュービットの測定とリセット | MeasureReset を name="measure_reset_2" で初期化(v0.50.0 以降) | Heron, Nighthawk r2 |
xslow | 持続時間を延長したビットフリップ(X)ゲート | ポストセレクションとエラー軽減。ポストセレクションパスの x_pulse_type オプションのデフォルト値です | すべて |
. | XSlowGate(v0.50.0 以降) | すべて |
* Heron プロセッサーでは、リセットは測定結果に応じて条件付きで行われます。Nighthawk r2 プロセッサーでは、リセットは無条件に行われます。
これらの命令はすべてのバックエンドでサポートされているわけではないため、使用する前にバックエンドがサポートしている命令を確認してください。
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>")
print(backend.supported_instructions)
ある命令をサポートするすべてのバックエンドを見つけるには、次を使用します。
service = QiskitRuntimeService()
backends = service.backends(filters=lambda b: "<instruction>" in b.supported_instructions)
これらの特別にキャリブレーションされた命令のシグネチャを確認するには、instruction_signatures を使用します。
print(backend.configuration().instruction_signatures)
代替キャリブレーション
代替キャリブレーションは、デフォルトのキャリブレーションの一部を、異なる調整のパラメーターで置き換えます。各代替キャリブレーションにはキャリブレーション ID があり、利用可否は QPU によって異なります。
代替キャリブレーションを使用するには、バックエンドを取得する際にその calibration_id を渡します。バックエンドのターゲット、ひいてはトランスパイラーは、そのキャリブレーションの命令プロパティを使用し、バックエンド上で実行するプリミティブジョブもそのキャリブレーションで実行されます。
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>", calibration_id="<calibration_id>")
print(backend.calibration_id)
代替キャリブレーションは、すべての QPU で利用できるわけではありません。
低速ゲートのキャリブレーション
低速ゲートのキャリブレーションは、cz ゲートをデフォルトのキャリブレーションよりも低速に調整します。より低速な cz ゲートは、エラー軽減を伴う大規模な期待値推定ワークフローの性能を向上させる可能性がありますが、回路全体の持続時間も長くなるため、デコヒーレンスがいくらか増加します。
Heron プロセッサーでは、低速ゲートのキャリブレーションは、2準位系(TLS)バイアス制御の2つのモードでも利用できます。
-
DC TLS バイアスは、瞬間的な性能が最良になるよう最適化されています。デフォルトのキャリブレーションでは DC TLS バイアスを使用します。
-
AC TLS バイアスは、TLS バイアスを変調してデバイスのエラーを経時的に安定させ、長時間のワークフローの間もデバイスのノイズモデルを安定に保ちます。詳細については、Observable Estimation in the Absence of Classical Verification の「Noise stabilization」を参照してください。
Nighthawk プロセッサーは TLS バイアスを使用しないため、低速ゲートのキャリブレーションは1種類のみです。
| キャリブレーション ID | プロセッサーファミリー | TLS バイアス | 推奨用途 |
|---|---|---|---|
| なし(デフォルトのキャリブレーション) | すべて | DC(Heron) | 一般的な用途。特に、ピーク回路や SQD または SKQD ワークフローなど、ビット列を古典的に蒸留できるワークロードや、エラー検出を伴うワークロードに推奨されます。 |
slow_gates_dc | Heron | DC | 大規模な期待値推定ワークフロー。特に、ゼロノイズ外挿(ZNE)などのヒューリスティックなエラー軽減を使用するものに適しています。 |
slow_gates_ac | Heron | AC | 長時間のセッションにわたって安定したエラー率を必要とするワークフロー。確率的エラー増幅(PEA)や確率的エラーキャンセル(PEC)など、ノイズ学習を伴うワークフローに強く推奨されます。 |
slow_gates | Nighthawk | 該当なし | ZNE、PEA、PEC などのエラー軽減を使用する期待値推定ワークフロー。 |
例:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# On a Heron QPU
backend = service.backend("ibm_kingston", calibration_id="slow_gates_ac")
# backend = service.backend("ibm_kingston", calibration_id="slow_gates_dc")
# On a Nighthawk QPU
backend = service.backend("ibm_phoenix", calibration_id="slow_gates")
slow_gates_ac を使用する場合は、デバイスのノイズが安定している間に実行されるよう、ワークフロー内のすべてのジョブを単一のセッションに送信してください。
ゲートの持続時間を確認する
低速ゲートのキャリブレーションは cz ゲートの持続時間を長くするため、デフォルトのキャリブレーションと持続時間を比較して、回路への影響を把握してください。バックエンドのターゲットを使用して、特定のキュービットペア上の cz ゲートの持続時間を秒単位で調べます。
default_backend = service.backend("<backend_name>")
slow_backend = service.backend(
"<backend_name>", calibration_id="slow_gates_ac"
) # Or slow_gates_dc, or slow_gates on Nighthawk
qubits = (0, 1) # Replace with a connected qubit pair on the backend
print(default_backend.target["cz"][qubits].duration)
print(slow_backend.target["cz"][qubits].duration)
ターゲットは選択したキャリブレーションを反映しているため、実行予定の calibration_id と同じものを使用するバックエンドに対して回路をトランスパイルしてください。
次のステップ
- 回路途中測定を伴う動的回路の実行方法を学びます。
- ポストセレクションを使用して、相関ノイズの影響を受けた結果を除外します。
- IBM 量子コンピューターがどのようにモニタリング、キャリブレーション、ベンチマーキングされているかを読みます。