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

Qiskitでバックエンド情報を取得する

パッケージバージョン

このページのコードは、以下の要件を使用して開発されました。 これらのバージョン以上を使用することをお勧めします。

qiskit-ibm-runtime~=0.43.1

このページでは、Qiskitを使用して利用可能なバックエンドに関する情報を取得する方法を説明します。

バックエンドの一覧表示

アクセス可能なバックエンドを確認するには、コンピュートリソースページでリストを参照するか、QiskitRuntimeService.backends()メソッドを使用します。このメソッドはIBMBackendインスタンスのリストを返します。

注意事項
  • 特定のインスタンスやリージョンにログインしている場合、またはQiskitRuntimeService()を使用して特定のインスタンスやリージョンでサービスを初期化した場合は、そのインスタンスやリージョンで利用可能なバックエンドのみが返されます。それ以外の場合は、すべてのインスタンスおよびリージョンで利用可能なすべてのバックエンドが返されます。
  • 返されるバックエンドのリストは、IBM Quantum Platform コンピュートリソースページに表示されるものと異なる場合があります。コンピュートリソースページのリストは、常にページ上部で選択されたリージョンでフィルタリングされます。

以下のコードを実行するには、あらかじめサービスへの認証を完了させておく必要があります。詳細については、IBM Cloudアカウントのセットアップを参照してください。

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
# Initialize your account
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

service.backends()
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

QiskitRuntimeService.backend()メソッド(単数形: backend)は、バックエンド名を入力パラメーターとして受け取り、そのバックエンドを表すIBMBackendインスタンスを返します。

service.backend("ibm_fez")
<IBMBackend('ibm_fez')>

バックエンドのフィルタリング

利用可能なバックエンドをプロパティでフィルタリングすることもできます。より汎用的なフィルタリングには、バックエンドオブジェクトを受け取り、条件を満たす場合にTrueを返す関数をfilters引数に設定します。詳細についてはAPIドキュメントを参照してください。

以下のコードは、これらの条件を満たし、_現在選択中のインスタンスで_利用可能なバックエンドのみを返します。

  • 実際の量子デバイスである(simulator=False
  • 現在稼働中である(operational=True
  • 少なくとも5 Qubitを持つ(min_num_qubits=5
# Optionally pass in an instance, region, or both, to
# further filter the backends.
service = QiskitRuntimeService()

service.backends(simulator=False, operational=True, min_num_qubits=5)
[<IBMBackend('ibm_pittsburgh')>,
<IBMBackend('ibm_boston')>,
<IBMBackend('ibm_fez')>,
<IBMBackend('ibm_miami')>,
<IBMBackend('ibm_marrakesh')>,
<IBMBackend('ibm_torino')>,
<IBMBackend('ibm_kingston')>]

これらのキーワード引数を使用して、バックエンド設定(JSONスキーマ)またはステータス(JSONスキーマ)の任意の属性でフィルタリングできます。同様のメソッドとしてQiskitRuntimeService.least_busy()があります。これはbackends()と同じフィルターを受け取りますが、フィルターに合致するバックエンドの中でキューに待機中のジョブ数が最も少ないものを返します。

service.least_busy(operational=True, min_num_qubits=5)
<IBMBackend('ibm_torino')>

バックエンドの静的情報

バックエンドの名前、バージョン、Qubit数、サポートする機能の種類など、定期的に変化しない情報があります。こうした情報はbackendオブジェクトの属性として取得できます。

以下のセルでは、バックエンドの説明を構築します。

backend = service.backend("ibm_fez")

print(
f"Name: {backend.name}\n"
f"Version: {backend.version}\n"
f"No. of qubits: {backend.num_qubits}\n"
)
Name: ibm_fez
Version: 2
No. of qubits: 156

属性の完全なリストについては、IBMBackend APIドキュメントを参照してください。

ネイティブGateと演算

プロセッサーファミリーにはネイティブGateセットがあります。デフォルトでは、各ファミリーのQPUはネイティブGateセットに含まれるGateと演算のみをサポートします。そのため、Circuit内のすべてのGateはこのセットの要素に(Transpilerによって)変換される必要があります。

QPUのネイティブGateと演算は、Qiskitを使用して確認するか、IBM Quantum® Platform コンピュートリソースページで確認できます。


from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

for backend in service.backends():
config = backend.configuration()
if "simulator" in config.backend_name:
continue
print(f"Backend: {config.backend_name}")
print(f" Processor type: {config.processor_type}")
print(f" Supported instructions:")
for instruction in config.supported_instructions:
print(f" {instruction}")
print()

バックエンドの動的情報

バックエンドには、Qubit周波数や演算エラー率など、キャリブレーションのたびに変化するプロパティもあります。バックエンドは通常24時間ごとにキャリブレーションが行われ、キャリブレーションシーケンスが完了するとプロパティが更新されます。これらのプロパティは、量子Circuit最適化や、古典シミュレーター用のノイズモデルの構築に活用できます。

Qubitプロパティ

backend.properties().qubit_property()は、Qubitの物理的な属性に関する情報を返します。これには、Qubitのさまざまなプロパティとその値、および最終キャリブレーションのタイムスタンプが含まれる辞書が含まれます。

  • T1(緩和時間): T1時間は、Qubitがエネルギー緩和によって基底状態0|0\rangleに崩壊する前に励起状態1|1\rangleに留まる平均時間を表します。このパラメーターはQubitのエネルギー緩和特性を評価するために使用され、単位は秒(s)で表されます。

  • T2(脱位相時間): T2時間は、Qubitが0|0\rangle1|1\rangle状態の重ね合わせの位相コヒーレンスを維持する時間スケールを示します。エネルギー緩和と純粋な脱位相の両プロセスを考慮しており、Qubitのコヒーレンス特性に関する情報を提供します。

  • frequency: このパラメーターはQubitの共鳴周波数を指定し、0|0\rangle1|1\rangle状態間のエネルギー差を示します。単位はヘルツ(Hz)で表されます。

  • anharmonicity: 非調和性とは、Qubitの第1励起状態と第2励起状態のエネルギー差であり、同じくヘルツ(Hz)で表されます。

  • readout_error: 読み出しエラーは、Qubitの状態を誤って測定する平均確率を定量化します。通常、prob_meas0_prep1とprob_meas1_prep0の平均として計算され、測定フィデリティの単一指標として提供されます。

  • prob_meas0_prep1: このパラメーターは、1|1\rangle状態に準備しようとしたQubitを0状態として測定する確率を示し、P(01)P(0 | 1)と表記されます。これは状態準備・測定(SPAM)エラー、特に超伝導Qubitにおける測定エラーを反映します。

  • prob_meas1_prep0: 同様に、このパラメーターは0|0\rangle状態に準備しようとしたQubitを1状態として測定する確率を表し、P(10)P(1 | 0)と表記されます。prob_meas0_prep1と同様にSPAMエラーを反映し、超伝導Qubitでは測定エラーが主な要因となります。

  • readout_length: readout_lengthはQubitの読み出し演算の所要時間を指定します。測定パルスの開始から信号のデジタル化完了までの時間を計測し、その後システムは次の演算を受け付けられる状態になります。このパラメーターは、特に中間Circuit測定を組み込む際のCircuit実行最適化において重要です。

# fundamental physical properties of qubit 1
backend.qubit_properties(1)
QubitProperties(t1=0.00023160183954439313, t2=0.0002759670226087048, frequency=None)
# calibration data with detailed properties of qubit 0
backend.properties().qubit_property(0)
{'T1': (5.199156952582205e-05,
datetime.datetime(2026, 1, 14, 16, 18, 26, tzinfo=tzlocal())),
'T2': (2.253552085985709e-05,
datetime.datetime(2026, 1, 14, 16, 19, 6, tzinfo=tzlocal())),
'readout_error': (0.013916015625,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas0_prep1': (0.026123046875,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'prob_meas1_prep0': (0.001708984375,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal())),
'readout_length': (1.56e-06,
datetime.datetime(2026, 1, 14, 21, 38, 31, tzinfo=tzlocal()))}
# Retrieve qubit properties
qubit_index = 126 # Replace with your qubit index
qubit_props = backend.properties().qubit_property(qubit_index)

# Access specific properties
t1 = qubit_props.get("T1", (None,))[0]
t2 = qubit_props.get("T2", (None,))[0]
frequency = qubit_props.get("frequency", (None,))[0]
anharmonicity = qubit_props.get("anharmonicity", (None,))[0]
readout_error = qubit_props.get("readout_error", (None,))[0]
prob_meas0_prep1 = qubit_props.get("prob_meas0_prep1", (None,))[0]
prob_meas1_prep0 = qubit_props.get("prob_meas1_prep0", (None,))[0]
readout_length = qubit_props.get("readout_length", (None,))[0]

print(f"Qubit {qubit_index} Properties:")
print(f" T1: {t1} seconds")
print(f" T2: {t2} seconds")
print(f" Frequency: {frequency} Hz")
print(f" Anharmonicity: {anharmonicity} Hz")
print(f" Readout Error: {readout_error}")
print(f" P(0 | 1): {prob_meas0_prep1}")
print(f" P(1 | 0): {prob_meas1_prep0}")
print(f" Readout Length: {readout_length} seconds")
Qubit 126 Properties:
T1: 9.563335658857979e-05 seconds
T2: 6.570556299807121e-05 seconds
Frequency: None Hz
Anharmonicity: None Hz
Readout Error: 0.006591796875
P(0 | 1): 0.009765625
P(1 | 0): 0.00341796875
Readout Length: 1.56e-06 seconds

命令プロパティ

backend.target属性はqiskit.transpiler.Targetオブジェクトです。これは、そのバックエンド向けにCircuitをトランスパイルするために必要なすべての情報(命令エラーや所要時間を含む)を持つオブジェクトです。たとえば、以下のセルはQubit 1と0の間で動作するcz Gateのプロパティを取得します。

backend.target["cz"][(1, 0)]
InstructionProperties(duration=6.8e-08, error=0.007831625819164134)

以下のセルは、Qubit 0における測定演算(読み出しエラーを含む)のプロパティを示します。

backend.target["measure"][(0,)]
InstructionProperties(duration=1.56e-06, error=0.013916015625)

次のステップ

おすすめ