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

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指定の優先順位は次のとおりです。

  1. PUBがshotsを指定している場合、その値を使用します。
  2. runshotsキーワード引数が指定されている場合、その値を使用します。
  3. twirlingが有効な場合(デフォルトでTrue)、twirlingオプションで指定されたnum_randomizationsshots_per_randomizationの積が使用されます。
  4. sampler.options.default_shotsが指定されている場合、その値を使用します。

したがって、可能なすべての場所にshotsが指定されている場合、最高優先度のもの(PUBで指定されたshots)が使用されます。

備考

PUBとrunで指定されたshotsは優先度が高いですが、twirlingが有効でnum_randomizationsshots_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

回路ごと、設定ごとに使用するショット数の合計。

選択肢: 整数 >= 0

デフォルト: None

default_shots APIドキュメント

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 APIドキュメント

environment.job_tags

タグのリスト。

選択肢: None

デフォルト: None

environment.log_level

選択肢: DEBUG, INFO, WARNING, ERROR, CRITICAL

デフォルト: WARNING

environment.private

選択肢: True, False

デフォルト: False

execution

execution APIドキュメント

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

ジョブの実行時間を秒単位で制限します。詳細については、最大実行時間ガイドを参照してください。

選択肢: 整数(秒単位、[1, 10800]の範囲)

デフォルト: 10800(3時間)

max_execution_time APIドキュメント

simulator

バックエンドをシミュレートする際に渡すオプション

simulator APIドキュメント

simulator.basis_gates

選択肢: アンロールするベースゲート名のリスト

デフォルト: Qiskit Aer simulatorがサポートするすべてのベースゲートのセット

simulator.coupling_map

選択肢: 有向二量子ビット相互作用のリスト

デフォルト: None(接続制約なし、完全接続を意味します)

simulator.noise_model

選択肢: Qiskit Aer NoiseModelまたはその表現

デフォルト: None

simulator.seed_simulator

選択肢: 整数

デフォルト: None

twirling

トワーリングオプション

twirling APIドキュメント

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-runtime v0.42.0以降を使用する場合、分数ゲートと互換性があります。
ダイナミカル・デカップリング

互換性のない機能:

  • 動的回路
分数ゲート

互換性のない機能:

  • ゲートトワーリング

qiskit-ibm-runtime v0.42.0以降を使用する場合、動的回路と互換性があります。

ゲートトワーリング

互換性のない機能:

  • 分数ゲート
  • ストレッチ

その他の注意事項:

  • ゲートトワーリングは動的回路に適用できますが、条件ブロック内のゲートには適用できません。
  • 測定トワーリングは終端測定にのみ適用できます。
  • 測定トワーリングはstore命令と互換性がありません。
  • 非クリフォードエンタングラーでは機能しません。

次のステップ

推奨事項