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

Sampler クイックスタート

Sampler のコア・タスクは、1 つまたは複数の量子回路の実行から出力レジスターをサンプリングすることです。動的回路およびパラメーター化された回路が入力として受け入れられます(パラメーター化された回路を送信する場合は、パラメーター値も提供する必要があります)。Sampler は、エラー抑制のための組み込みダイナミカル・デカップリングとツワーリングもサポートしています。

このトピックのステップでは、Sampler のセットアップ方法、設定に使用できるオプション、およびプログラムでの呼び出し方法を説明します。

パッケージ・バージョン

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

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

Sampler プリミティブを使用するステップ

1. アカウントの初期化

Qiskit Runtime はマネージド・サービスであるため、まずアカウントを初期化する必要があります。その後、期待値の計算に使用する QPU を選択できます。

アカウントをまだセットアップしていない場合は、IBM Cloud アカウントのセットアップトピックの手順に従ってください。

分数ゲート

新しくサポートされた分数ゲートを使用するには、QiskitRuntimeService インスタンスから Backend を要求する際に use_fractional_gates=True を設定します。例:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

これは実験的な機能であり、将来変更される可能性があります。

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. 回路の作成

Sampler プリミティブへの入力として、少なくとも 1 つの回路が必要です。

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

回路とオブザーバブルは、QPU でサポートされている命令のみを使用するように変換する必要があります(命令セット・アーキテクチャー(ISA)回路と呼ばれます)。これにはトランスパイラーを使用します。

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Qiskit Runtime Sampler の初期化

Sampler を初期化するときは、mode パラメーターを使用して実行するモードを指定します。可能な値は、バッチ、Session、ジョブ実行モードに対してそれぞれ batchsession、または backend オブジェクトです。詳細については、Qiskit Runtime 実行モードの概要を参照してください。なお、オープン・プランのユーザーは Session ジョブを送信できません。

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Sampler の呼び出しと結果の取得

次に、run() メソッドを呼び出して出力を生成します。回路とオプションのパラメーター値セットは、プリミティブ統合ブロック(PUB)タプルとして入力されます。

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']

次のステップ

おすすめ