Skip to main content
IBM Quantum Platform

「Estimator」のオプションを指定する

  • このページのコードは、以下の要件に基づいて開発されました。 これらのバージョン以降のご利用をお勧めします。

    qiskit[all]~=2.5.1
    qiskit-ibm-runtime~=0.47.0
    

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

注記:

Estimatorプリミティブでのオプション指定に関する注意事項
  • 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 が使用されます。

Note

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

なお、Estimatorのオプションには と の default_shots 両方が含ま default_precisionれています。 ただし、ゲート・トゥイリングはデフォルトで有効になっているため、と num_randomizations の積が、これら2つの shots_per_randomization オプションよりも優先されます。

具体的には、任意のEstimator PUB について:

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

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

Note

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

Note

精度は使用頻度と反比例する。 つまり、精度が低いほど、実行にかかる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 リファレンスにアクセスし、以前のバージョンを選択してください。

  • 構成ごとに、1つの回路あたりに使用するショットの総数。

    選択肢 :0以上の整数

    既定値 :なし

    default_shots APIドキュメント

  • PUB または run() の呼び出しにおいて、精度が指定されていない場合のデフォルトの精度。

    選択肢 :Float > 0

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

    default_precision APIドキュメント

  • 動的デカップリング誤差の低減設定を制御します。

    dynamical_decoupling APIドキュメント

    • 選択肢True, False

      既定値False

    • 選択肢middle, edges

      既定値middle

    • 選択肢: asap, alap デフォルト: alap

    • 選択肢: XX, XpXm, XY4 デフォルト: XX

    • 選択肢: True, False デフォルト: False

  • environment APIドキュメント

    • Job ID を受け取る呼び出し Job result可能な関数。

      選択肢 :なし

      既定値 :なし

    • タグの一覧。

      選択肢 :なし

      既定値 :なし

    • 選択肢 :DEBUG、INFO、WARNING、ERROR、CRITICAL

      デフォルト : 警告

    • 選択肢True, False

      既定値False

  • execution APIドキュメント

    • ショットごとに量子ビットを基底状態にリセットするかどうか。

      選択肢True, False

      既定値True

    • 測定とそれに続く量子回路との間の時間差。

      選択肢 :指定された範囲内の値 backend.rep_delay_range

      デフォルト :指定された値 backend.default_rep_delay

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

    選択肢 : [1 から 10800 までの]範囲の秒数(整数)

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

  • レジリエンス戦略を微調整するための高度なオプション。

    resilience APIドキュメント

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

      resilience.layer_noise_learning APIドキュメント

    • 選択肢 : [0~200] の範囲の2~10個の値[のリスト]

      既定値(0, 1, 2, 4, 16, 32)

    • 選択肢 :なし、1以上の整数

      既定値4

    • 選択肢 :1以上の整数

      既定値32

    • 選択肢 :1以上の整数

      既定値128

    • 選択肢NoiseLearnerResult, Sequence[LayerError]

      既定値 :なし

    • 選択肢True, False

      既定値True

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

      resilience.measure_noise_learning APIドキュメント

    • 選択肢 :1以上の整数

      既定値32

    • 選択肢 :整数、 auto

      既定値auto

    • 選択肢True, False

      既定値False

    • 確率論的誤差相殺の緩和策。

      resilience.pec APIドキュメント

    • 選択肢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つ以上: exponentiallineardouble_exponentialpolynomial_degree_(1 <= k <= 7)fallback

      既定値(exponential, linear)

    • 選択肢 :フロートのリスト。各フロートの値は 1 以上

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

  • エラーに対してどの程度の耐性を構築すべきか。 レベルが高いほど、処理時間は長くなりますが、より正確な結果が得られます。 詳細については、「騒音管理」トピックの 「耐性レベル 」のセクションをご覧ください。

    選択肢0, 1, 2

    既定値1

    resilience_level APIドキュメント

  • 選択肢 :整数

    既定値 :なし

    seed_estimator

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

    simulator APIドキュメント

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

      デフォルトQiskit Aer シミュレータがサポートするすべての基本ゲートの集合

    • 選択肢 :方向性を持つ2量子ビット相互作用の一覧

      デフォルト :なし。これは、接続性の制約がない(完全接続)ことを意味します。

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

      既定値 :なし

    • 選択肢 :整数

      既定値 :なし

  • 回転オプション

    twirling APIドキュメント

    • 選択肢 :はい、いいえ

      デフォルト : 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

次のステップ

推奨事項
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。