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

Estimatorオプションの指定

パッケージバージョン

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

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

オプションを使用してEstimatorプリミティブをカスタマイズできます。プリミティブのrun()メソッドのインターフェースはすべての実装で共通ですが、オプションは共通ではありません。qiskit.primitives.BaseEstimatorV2qiskit_aer.BaseEstimatorV2のオプションについては、APIリファレンスを参照してください。

注意事項:

Estimatorプリミティブでのオプション指定に関する注意事項
  • Estimatorの初期化中または初期化後に、利用可能なオプションを確認してオプション値を更新できます。
  • update()メソッドを使用してoptions属性に変更を適用します。
  • オプションの値を指定しない場合、特別な値Unsetが与えられ、サーバーのデフォルトが使用されます。
  • options属性はPythonのdataclass型です。組み込みのasdictメソッドを使用して辞書に変換できます。

Estimatorオプションの設定

Estimatorの初期化時、初期化後、または(precisionのみ)run()メソッドでオプションを設定できます。

プリミティブの初期化

Estimatorの初期化時にオプションクラスのインスタンスまたは辞書を渡すことができます。その場合、Estimatorはそれらのオプションのコピーを作成します。したがって、元の辞書またはオプションインスタンスを変更しても、プリミティブが所有するオプションには影響しません。

オプションクラス

EstimatorV2クラスのインスタンスを作成するとき、オプションクラスのインスタンスを渡すことができます。それらのオプションは、run()を使用して計算を実行するときに適用されます。オプションは次の形式で指定します:options.option.sub-option.sub-sub-option = choice。例:options.dynamical_decoupling.enable = True

例:

# 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 EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions

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

options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

辞書

Estimatorの初期化時にオプションを辞書として指定できます。

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)

初期化後のオプション更新

オートコンプリートを活用するにはestimator.options.option.sub-option.sub-sub-option = choiceの形式でオプションを指定するか、update()メソッドを使用して一括更新できます。

EstimatorV2のオプションクラス(EstimatorOptions)は、プリミティブの初期化後にオプションを設定する場合はインスタンス化する必要はありません。

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)

run()メソッド

run()に渡すことができる値は、インターフェースで定義されたもののみです。つまり、Estimatorのprecisionです。これにより、現在の実行でdefault_precisionに設定された値が上書きされます。

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>

特殊ケース:precision

EstimatorV2.runメソッドは2つの引数を受け付けます:PUBのリスト(各PUBはprecisionのPUB固有の値を指定できます)とprecisionキーワード引数です。これらのprecision値はEstimator実行インターフェースの一部であり、Runtime Estimatorのオプションとは独立しています。Estimatorの抽象化に準拠するために、オプションとして指定された値よりも優先されます。

ただし、PUBまたはrunキーワード引数でprecisionが指定されていない場合(またはすべてがNoneの場合)、オプションのprecision値が使用されます。最も注目すべきはdefault_precisionです。

備考

これらのprecisionパラメーターは_目標_精度を指定するためのものであり、結果が指定された精度に到達することは保証されません。

Estimatorオプションにはdefault_shotsdefault_precisionの両方が含まれていることに注意してください。ただし、gate-twirlingはデフォルトで有効になっているため、num_randomizationsshots_per_randomizationの積がこの2つのオプションよりも優先されます。

具体的には、EstimatorのPUBに対して:

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

たとえば、4つの場所すべてでprecisionが指定されている場合、最高の優先度を持つもの(PUBで指定されたprecision)が使用されます。

備考

PUBおよびrunで指定されたprecisionは優先度が高いものの、twirlingが有効で、かつnum_randomizationsshots_per_randomizationの積が指定されたprecisionを達成するために必要なshots数より少ない場合、ジョブは失敗します。このシナリオでは、EstimatorV2は指定されたnum_randomizationsにshotsを割り当てることができません。

備考

精度は使用量と逆の関係があります。つまり、精度が低いほど、実行に多くのQPU時間がかかります。

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>

すべてのエラー軽減とエラー抑制をオフにする

たとえば、独自の軽減技術を研究している場合など、すべてのエラー軽減と抑制をオフにすることができます。これを実現するには、resilience_level = 0を設定します。

例:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

利用可能なオプション

次の表は、qiskit-ibm-runtimeの最新バージョンのオプションを文書化しています。古いオプションバージョンを確認するには、qiskit-ibm-runtime APIリファレンスにアクセスして以前のバージョンを選択してください。

default_shots

circuit設定ごとに使用する総shot数。

選択肢: 整数 >= 0

デフォルト: None

default_shots APIドキュメント

default_precision

精度を指定しないPUBまたはrun()呼び出しに使用するデフォルトの精度。

選択肢: 浮動小数点数 > 0

デフォルト: 0.015625 (1 / sqrt(4096))

default_precision APIドキュメント

dynamical_decoupling

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.callback

Job IDJob resultを受け取るコール可能関数。

選択肢: None

デフォルト: None

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

各shotに対してqubitを基底状態にリセットするかどうか。

選択肢: True, False

デフォルト: True

execution.rep_delay

測定とその後の量子circuitの間の遅延。

選択肢: backend.rep_delay_rangeによって提供される範囲の値

デフォルト: backend.default_rep_delayで指定

max_execution_time

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

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

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

resilience

resilience戦略を細かく調整するための高度なresilienceオプション。

resilience APIドキュメント

resilience.layer_noise_learning

レイヤーノイズ学習のオプション。

resilience.layer_noise_learning APIドキュメント

resilience.layer_noise_learning.layer_pair_depths

選択肢: [0, 200]の範囲の2〜10個の値のリスト[int]

デフォルト: (0, 1, 2, 4, 16, 32)

resilience.layer_noise_learning.max_layers_to_learn

選択肢: None, 整数 >= 1

デフォルト: 4

resilience.layer_noise_learning.num_randomizations

選択肢: 整数 >= 1

デフォルト: 32

resilience.layer_noise_learning.shots_per_randomization

選択肢: 整数 >= 1

デフォルト: 128

resilience.layer_noise_model

選択肢: NoiseLearnerResult, Sequence[LayerError]

デフォルト: None

resilience.measure_mitigation

選択肢: True, False

デフォルト: True

resilience.measure_noise_learning

測定ノイズ学習のオプション。

resilience.measure_noise_learning APIドキュメント

resilience.measure_noise_learning.num_randomizations

選択肢: 整数 >= 1

デフォルト: 32

resilience.measure_noise_learning.shots_per_randomization

選択肢: 整数, auto

デフォルト: auto

resilience.pec_mitigation

選択肢: True, False

デフォルト: False

resilience.pec

確率的エラーキャンセル軽減オプション。

resilience.pec APIドキュメント

resilience.pec.max_overhead

選択肢: None, 整数 >= 1

デフォルト: 100

resilience.pec.noise_gain

選択肢: auto, [0, 1]の範囲の浮動小数点数

デフォルト: auto

resilience.zne_mitigation

選択肢: True, False

デフォルト: False

resilience.zne
resilience.zne.amplifier

選択肢: gate_folding, gate_folding_front, gate_folding_back, pea

デフォルト: gate_folding

resilience.zne.extrapolated_noise_factors

選択肢: 浮動小数点数のリスト

デフォルト: [0, *noise_factors]

resilience.zne.extrapolator

選択肢: 1つ以上: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

デフォルト: (exponential, linear)

resilience.zne.noise_factors

選択肢: 浮動小数点数のリスト; 各浮動小数点数 >= 1

デフォルト: PEAの場合(1, 1.5, 2)、それ以外は(1, 3, 5)

resilience_level

エラーに対してどれだけのresilienceを構築するか。レベルが高いほど、より長い処理時間と引き換えに、より正確な結果が得られます。詳細については、Noise managementトピックのresilienceレベルセクションを参照してください。

選択肢: 0, 1, 2

デフォルト: 1

resilience_level APIドキュメント

seed_estimator

選択肢: 整数

デフォルト: None

seed_estimator

simulator

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

simulator APIドキュメント

simulator.basis_gates

選択肢: アンロール先の基底ゲート名のリスト

デフォルト: Qiskit Aerシミュレータがサポートするすべての基底ゲートのセット

simulator.coupling_map

選択肢: 有向の2-qubit相互作用のリスト

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

simulator.noise_model

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

デフォルト: None

simulator.seed_simulator

選択肢: 整数

デフォルト: None

twirling

Twirlingオプション

twirling APIドキュメント

twirling.enable_gates

選択肢: True, False

デフォルト: False

twirling.enable_measure

選択肢: True, False

デフォルト: True

twirling.num_randomizations

選択肢: auto, 整数 >= 1

デフォルト: auto

twirling.shots_per_randomization

選択肢: auto, 整数 >= 1

デフォルト: auto

twirling.strategy

選択肢: active, active-circuit, active-accum, all

デフォルト: active-accum

experimental

実験的オプション(利用可能な場合)。

機能の互換性

特定のランタイム機能は、単一のジョブ内では一緒に使用できません。互換性のない機能のリストを確認するには、適切なタブをクリックしてください:

分数ゲート

次のものとは互換性がありません:

  • ゲートtwirling
  • PEA
  • PEC
ゲートフォールディングZNE

カスタムゲートを使用すると動作しない場合があります。次のものとは互換性がありません:

  • PEA
  • PEC
ゲートtwirling

次のものとは互換性がありません:

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

その他の注意事項:

  • 測定twirlingは端末測定にのみ適用できます。
  • 非Cliffordエンタングラーでは動作しません。
PEA

次のものとは互換性がありません:

  • 分数ゲート
  • ゲートフォールディングZNE
  • PEC
PEC

次のものとは互換性がありません:

  • 分数ゲート
  • ゲートフォールディングZNE
  • PEA

次のステップ

推奨事項