Estimatorオプションの指定
パッケージバージョン
このページのコードは、以下の要件を使用して開発されました。 これらのバージョン以降を使用することをお勧めします。
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
オプションを使用してEstimatorプリミティブをカスタマイズできます。プリミティブのrun()メソッドのインターフェースはすべての実装で共通ですが、オプションは共通ではありません。qiskit.primitives.BaseEstimatorV2とqiskit_aer.BaseEstimatorV2のオプションについては、APIリファレンスを参照してください。
注意事項:
- 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_shotsとdefault_precisionの両方が含まれていることに注意してください。ただし、gate-twirlingはデフォルトで有効になっているため、num_randomizationsとshots_per_randomizationの積がこの2つのオプションよりも優先されます。
具体的には、EstimatorのPUBに対して:
- PUBがprecisionを指定している場合、その値を使用する。
runのprecisionキーワード引数が指定されている場合、その値を使用する。twirlingが有効な場合(デフォルトでTrue)、twirlingオプションで指定されたnum_randomizationsとshots_per_randomizationの積を使用する。estimator.options.default_shotsが指定されている場合、その値を使用してデータ量を制御する。estimator.options.default_precisionが指定されている場合、その値を使用する。
たとえば、4つの場所すべてでprecisionが指定されている場合、最高の優先度を持つもの(PUBで指定されたprecision)が使用されます。
PUBおよびrunで指定されたprecisionは優先度が高いものの、twirlingが有効で、かつnum_randomizationsとshots_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
default_precision
精度を指定しないPUBまたはrun()呼び出しに使用するデフォルトの精度。
選択肢: 浮動小数点数 > 0
デフォルト: 0.015625 (1 / sqrt(4096))
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.callback
Job IDとJob resultを受け取るコール可能関数。
選択肢: None
デフォルト: None
environment.job_tags
タグのリスト。
選択肢: None
デフォルト: None
environment.log_level
選択肢: DEBUG, INFO, WARNING, ERROR, CRITICAL
デフォルト: WARNING
environment.private
選択肢: True, False
デフォルト: False
execution
execution.init_qubits
各shotに対してqubitを基底状態にリセットするかどうか。
選択肢: True, False
デフォルト: True
execution.rep_delay
測定とその後の量子circuitの間の遅延。
選択肢: backend.rep_delay_rangeによって提供される範囲の値
デフォルト: backend.default_rep_delayで指定
max_execution_time
resilience
resilience戦略を細かく調整するための高度なresilienceオプション。
resilience.layer_noise_learning
レイヤーノイズ学習のオプション。
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.num_randomizations
選択肢: 整数 >= 1
デフォルト: 32
resilience.measure_noise_learning.shots_per_randomization
選択肢: 整数, auto
デフォルト: auto
resilience.pec_mitigation
選択肢: True, False
デフォルト: False
resilience.pec
確率的エラーキャンセル軽減オプション。
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
seed_estimator
simulator
バックエンドをシミュレートする際に渡すオプション
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.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
次のステップ
EstimatorV2メソッドの詳細については、Estimator APIリファレンスを参照する。- ジョブを実行する実行モードを決定する。
- EstimatorによるNoiseの管理について学ぶ。