「Estimator」のオプションを指定する
このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。
qiskit[all]~=2.5.1 qiskit-ibm-runtime~=0.47.0
オプションを使用して、Estimatorプリミティブをカスタマイズできます。 プリミティブ run() のメソッドのインターフェースはすべての実装で共通していますが、そのオプションは共通ではありません。 および オプション qiskit.primitives.BaseEstimatorV2qiskit_aer.BaseEstimatorV2 の詳細については、APIリファレンスを参照してください。
注記:
- Estimatorの初期化中または初期化後に、利用可能なオプションを確認したり、オプションの値を更新したりすることができます。
- この
update()メソッドを使用して、``属性optionsに変更を適用します。 - オプションの値を指定しない場合、そのオプションには特別な値が割り当てられ、
Unsetサーバーのデフォルト設定が使用されます。 - この
options属性は、 Python 型ですdataclass。 組み込みasdictのメソッドを使って、それを辞書に変換することができます。
見積もりツールのオプションを設定する
オプションの設定は、Estimatorの初期化時、初期化後、または(のみの場合 precision )メソッド run() 内で行うことができます。
プリミティブ型の初期化
Estimatorを初期化する際、オプションクラスのインスタンスまたは辞書を渡すことができ、これによりそれらのオプションのコピーが作成されます。 したがって、元の辞書やオプションのインスタンスを変更しても、プリミティブが所有するオプションには影響しません。
オプションクラス
この EstimatorV2 クラスのインスタンスを作成する際、オプションクラスのインスタンスを渡すことができます。 その後、計算を実行する際に、 run() それらのオプションが適用されます。 オプションは次の形式で指定してください: options.option.sub-option.sub-sub-option = choice. 例えば次のようにします:options.dynamical_decoupling.enable = True
例:
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() を使用してください。
プリミティブの初期化後にオプションを設定する場合、options クラス (EstimatorOptions) を EstimatorV2 インスタンス化する必要はありません。
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,
)Output:
<RuntimeJobV2('d9mqa0g8csec73fagtl0', 'estimator')>
特例:精度
この EstimatorV2.run メソッドは2つの引数を受け取ります。1つはPUBのリストで、各PUBは精度について PUB 固有の値を指定できます。もう1つは精度のキーワード引数です。 これらの精度値は、Estimatorの実行インターフェースの一部であり、Runtime Estimatorのオプションとは独立しています。 これらは、Estimatorの抽象化に準拠するため、オプションとして指定された値よりも優先されます。
ただし、 PUB または実行時のキーワード引数で が precision 指定されていない場合(あるいはそれらがすべて Noneである場合)、オプションで指定された精度値が使用されます。特に、 default_precision が使用されます。
これらの精度パラメータは、 目標精度を指定するためのみに用いられるものであり、結果が指定された精度に達することが保証されるわけではありません。
なお、Estimatorのオプションには と の default_shots 両方が含ま default_precisionれています。 ただし、ゲート・トゥイリングはデフォルトで有効になっているため、と num_randomizations の積が、これら2つの shots_per_randomization オプションよりも優先されます。
具体的には、任意のEstimator PUB について:
- PUB で精度が指定されている場合は、その値を使用してください。
- に precision
runキーワード引数が指定されている場合は、その値を使用します。 shots_per_randomizationが有効になっている場合twirling(デフォルトは True)、 オプションtwirlingとして指定された と のnum_randomizations積が使用されます。- が指定されている
estimator.options.default_shots場合は、その値を使用してデータ量を制御します。 - が指定されている
estimator.options.default_precision場合は、その値を使用します。
たとえば、4か所すべてで精度が指定されている場合、優先順位が最も高いもの( PUB で指定された精度)が使用されます。
PUB および で run 指定された精度の方が優先度が高いものの、 が有効になっており、かつ と shots_per_randomization の num_randomizations 積が、その精度を達成するために必要なショット数よりも小さい場合 twirling 、ジョブは失敗します。 num_randomizationsこのシナリオでは、 EstimatorV2 指定された に対してショットを割り当てることができません。
精度は使用頻度と反比例する。 つまり、精度が低いほど、実行にかかる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,
)Output:
<RuntimeJobV2('d9mqa2o8csec73fagtpg', '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.のオプションをまとめたものです。 以前のバージョンのオプションを確認するには、 API qiskit-ibm-runtime リファレンスにアクセスし、以前のバージョンを選択してください。
PUB または
run()の呼び出しにおいて、精度が指定されていない場合のデフォルトの精度。選択肢 :Float > 0
デフォルト : 0.015625 (1 / √4096)
動的デカップリング誤差の低減設定を制御します。
dynamical_decouplingAPIドキュメント選択肢 :
True,False既定値 :
False選択肢 :
middle,edges既定値 :
middle選択肢:
asap,alapデフォルト:alap選択肢:
XX,XpXm,XY4デフォルト:XX選択肢:
True,Falseデフォルト:False
と
Job IDを受け取る呼び出しJob result可能な関数。選択肢 :なし
既定値 :なし
タグの一覧。
選択肢 :なし
既定値 :なし
選択肢 :DEBUG、INFO、WARNING、ERROR、CRITICAL
デフォルト : 警告
選択肢 :
True,False既定値 :
False
ショットごとに量子ビットを基底状態にリセットするかどうか。
選択肢 :
True,False既定値 :
True測定とそれに続く量子回路との間の時間差。
選択肢 :指定された範囲内の値
backend.rep_delay_rangeデフォルト :指定された値
backend.default_rep_delay
レジリエンス戦略を微調整するための高度なオプション。
レイヤーノイズの学習オプション。
選択肢 : [0~200] の範囲の2~10個の値[のリスト]
既定値 :
(0, 1, 2, 4, 16, 32)選択肢 :なし、1以上の整数
既定値 :
4選択肢 :1以上の整数
既定値 :
32選択肢 :1以上の整数
既定値 :
128選択肢 :
NoiseLearnerResult,Sequence[LayerError]既定値 :なし
選択肢 :
True,False既定値 :
True測定ノイズ学習のオプション。
選択肢 :1以上の整数
既定値 :
32選択肢 :整数、
auto既定値 :
auto選択肢 :
True,False既定値 :
False確率論的誤差相殺の緩和策。
選択肢 :
None、1以上の整数既定値 :
100選択肢 :
auto、 [0~1] の範囲の浮動小数点数既定値 :
auto選択肢 :
True,False既定値 :
False選択肢 :
gate_folding,gate_folding_front,gate_folding_back,pea既定値 :
gate_folding選択肢 :フロートのリスト
既定値 :
[0, *noise_factors]選択肢 :以下のうち1つ以上:
exponential、linear、double_exponential、polynomial_degree_(1 <= k <= 7)、fallback既定値 :
(exponential, linear)選択肢 :フロートのリスト。各フロートの値は 1 以上
デフォルト :
(1, 1.5, 2)の場合PEA、それ(1, 3, 5)以外の場合は
エラーに対してどの程度の耐性を構築すべきか。 レベルが高いほど、処理時間は長くなりますが、より正確な結果が得られます。 詳細については、「騒音管理」トピックの 「耐性レベル 」のセクションをご覧ください。
選択肢 :
0,1,2既定値 :
1バックエンドをシミュレートする際に渡すオプション
選択肢 :アンロール先の基本ゲート名のリスト
デフォルト : Qiskit Aer シミュレータがサポートするすべての基本ゲートの集合
選択肢 :方向性を持つ2量子ビット相互作用の一覧
デフォルト :なし。これは、接続性の制約がない(完全接続)ことを意味します。
選択肢 : Qiskit Aer NoiseModel、またはその表現
既定値 :なし
選択肢 :整数
既定値 :なし
回転オプション
選択肢 :はい、いいえ
デフォルト : False
選択肢 :はい、いいえ
デフォルト : True
選択肢 :
auto、1以上の整数既定値 :
auto選択肢 :
auto、1以上の整数既定値 :
auto選択肢 :
active,active-circuit,active-accum,all既定値 :
active-accum
利用可能な場合は、実験的なオプション。
フィーチャーの互換性
特定のランタイム機能は、1つのジョブ内で同時に使用することはできません。 選択した機能と互換性のない機能の一覧を表示するには、該当するタブをクリックしてください:
互換性がないもの:
- 門をくるくる回す
- PEA
- PEC
カスタムゲートを使用している場合、正常に動作しない可能性があります。 互換性がないもの:
- PEA
- PEC
互換性がないもの:
- 部分ゲート
- ストレッチ
その他の注意事項:
- 測定の反転は、端子測定にのみ適用できます。
- Clifford型以外のエンタングラーでは動作しません。
互換性がないもの:
- 部分ゲート
- ゲートフォールディングZNE
- PEC
互換性がないもの:
- 部分ゲート
- ゲートフォールディングZNE
- PEA
次のステップ
- 各メソッド
EstimatorV2の詳細については、 Estimator API リファレンスをご覧ください。 - ジョブを実行するモードを決定します。
- Estimatorを使った騒音管理について学びましょう。