Samplerオプションの指定
パッケージバージョン
このページのコードは、以下の要件を使用して開発されました。 これらのバージョン以降を使用することを推奨します。
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
オプションを使用してSamplerプリミティブをカスタマイズできます。このセクションでは、Qiskit Runtimeプリミティブのオプションを指定する方法に焦点を当てています。プリミティブのrun()メソッドのインターフェースはすべての実装で共通ですが、オプションは共通ではありません。qiskit.primitives.BackendSamplerV2およびqiskit_aer.primitives.SamplerV2のオプションについては、対応するAPIリファレンスを参照してください。
Samplerオプションの設定
Samplerの初期化時、初期化後、またはSamplerの初期化後にオプションを更新することができます。これらの方法の使用方法については、オプションの概要トピックを参照してください。
また、次のセクションで説明するように、run()メソッドでshotsの値を設定することもできます。
Run()メソッド
run()に渡せる値は、インターフェースで定義されたもの、つまりshotsのみです。これにより、現在の実行に対してdefault_shotsに設定されたすべての値が上書きされます。
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
特殊なケース
ショット数
SamplerV2.runメソッドは2つの引数を受け取ります。PUBのリスト(各PUBはPUB固有のショット数を指定できます)と、shotsキーワード引数です。これらのショット値はSampler実行インターフェースの一部であり、RuntimeSamplerのオプションとは独立しています。Samplerの抽象化に準拠するために、オプションとして指定された値よりも優先されます。
ただし、shotsがPUBによってもrunキーワード引数でも指定されていない場合(またはすべてがNoneの場合)、オプションのshots値が使用されます。特にdefault_shotsが使用されます。
まとめると、Samplerにおける特定のPUBのshots指定の優先順位は次のとおりです。
- PUBがshotsを指定している場合、その値を使用します。
runでshotsキーワード引数が指定されている場合、その値を使用します。twirlingが有効な場合(デフォルトでTrue)、twirlingオプションで指定されたnum_randomizationsとshots_per_randomizationの積が使用されます。sampler.options.default_shotsが指定されている場合、その値を使用します。
したがって、可能なすべての場所にshotsが指定されている場合、最高優先度のもの(PUBで指定されたshots)が使用されます。
PUBとrunで指定されたshotsは優先度が高いですが、twirlingが有効でnum_randomizationsとshots_per_randomizationの積がshots値よりも小さい場合、ジョブは失敗します。このシナリオでは、SamplerV2は指定されたnum_randomizationsにshotsを割り当てることができません。
例:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
利用可能なオプション
以下の表は、最新バージョンのqiskit-ibm-runtimeのオプションを示しています。古いオプションバージョンを確認するには、qiskit-ibm-runtime APIリファレンスにアクセスして、以前のバージョンを選択してください。
default_shots
dynamical_decoupling
ダイナミカル・デカップリングのエラー軽減設定を制御します。
dynamical_decoupling APIドキュメント
dynamical_decoupling.enable
選択肢: True, False
デフォルト: False
dynamical_decoupling.extra_slack_distribution
選択肢: middle, edges
デフォルト: middle
dynamical_decoupling.scheduling_method
選択肢: asap, alap
デフォルト: alap
dynamical_decoupling.sequence_type
選択肢: XX, XpXm, XY4
デフォルト: XX
dynamical_decoupling.skip_reset_qubits
選択肢: True, False
デフォルト: False
environment
environment.job_tags
タグのリスト。
選択肢: None
デフォルト: None
environment.log_level
選択肢: DEBUG, INFO, WARNING, ERROR, CRITICAL
デフォルト: WARNING
environment.private
選択肢: True, False
デフォルト: False
execution
execution.init_qubits
各ショットのためにQubitを基底状態にリセットするかどうか。
選択肢: True, False
デフォルト: True
execution.rep_delay
測定とその後の量子回路の間の遅延。
選択肢: backend.rep_delay_rangeで指定された範囲内の値
デフォルト: backend.default_rep_delayで指定された値
execution.meas_type
選択肢: classified, kerneled, avg_kerneled
デフォルト: classified
max_execution_time
simulator
バックエンドをシミュレートする際に渡すオプション
simulator.basis_gates
選択肢: アンロールするベースゲート名のリスト
デフォルト: Qiskit Aer simulatorがサポートするすべてのベースゲートのセット
simulator.coupling_map
選択肢: 有向二量子ビット相互作用のリスト
デフォルト: None(接続制約なし、完全接続を意味します)
simulator.noise_model
選択肢: Qiskit Aer NoiseModelまたはその表現
デフォルト: None
simulator.seed_simulator
選択肢: 整数
デフォルト: None
twirling
トワーリングオプション
twirling.enable_gates
選択肢: True, False
デフォルト: False
twirling.enable_measure
選択肢: True, False
デフォルト: False
twirling.num_randomizations
選択肢: auto, 整数 >= 1
デフォルト: auto
twirling.shots_per_randomization
選択肢: auto, 整数 >= 1
デフォルト: auto
twirling.strategy
選択肢: active, active-circuit, active-accum, all
デフォルト: active-accum
experimental
実験的なオプション(利用可能な場合)。
機能の互換性
特定のランタイム機能は、単一のジョブで一緒に使用することができません。互換性のない機能の一覧を表示するには、適切なタブをクリックしてください。
動的回路
互換性のない機能:
- ダイナミカル・デカップリング
その他の注意事項:
- ゲートトワーリングは動的回路に適用できますが、条件ブロック内のゲートには適用できません。測定トワーリングは終端測定にのみ適用できます。
qiskit-ibm-runtimev0.42.0以降を使用する場合、分数ゲートと互換性があります。
ダイナミカル・デカップリング
互換性のない機能:
- 動的回路
分数ゲート
互換性のない機能:
- ゲートトワーリング
qiskit-ibm-runtime v0.42.0以降を使用する場合、動的回路と互換性があります。
ゲートトワーリング
互換性のない機能:
- 分数ゲート
- ストレッチ
その他の注意事項:
- ゲートトワーリングは動的回路に適用できますが、条件ブロック内のゲートには適用できません。
- 測定トワーリングは終端測定にのみ適用できます。
- 測定トワーリングは
store命令と互換性がありません。 - 非クリフォードエンタングラーでは機能しません。
次のステップ
- オプションの概要ガイドを確認してください。
- Sampler APIリファレンスで
SamplerV2メソッドの詳細を確認してください。 - ジョブを実行する実行モードを決定してください。
- SamplerによるNoiseの管理について学んでください。