Error抑制の設定¶
エラー抑制技術は、コンパイルの時点で回路を最適化して変形させ、エラーを最小にする技術です。最も基本的なエラー処理技術です。
エラー抑制は通常、古典的な前処理のオーバーヘッドを全体のランタイムにもたらします。したがって、結果を完璧にすることと、妥当な時間でジョブが完了することのバランスをとることが重要です。
Primitive では、最適化レベル (optimization_level
オプション) の設定や、高度なトランスパイル・オプションの選択により、エラー抑制テクニックを使用することができます。
最適化レベルの設定¶
optimization_level
の設定は、回路に対してどの程度の最適化を行うかを指定します。レベルを上げると、より最適化された回路が生成されますが、その代償としてトランスパイルの時間が長くなります。
最適化レベル |
Estimator & Sampler |
---|---|
0 |
最適化なし:通常、ハードウェアの特性評価に使用されます。
|
1 |
軽度の最適化
|
2 |
中程度の最適化
|
3 (デフォルト) |
高度な最適化
|
例: 最適化レベルを使用した Estimator の構成¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
from qiskit.circuit.library import RealAmplitudes
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
options = Options(optimization_level=2)
psi = RealAmplitudes(num_qubits=2, reps=2)
H = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi], observables=[H], parameter_values=[theta])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()
注釈
最適化レベルが指定されていない場合は、サービスは optimization_level = 3
を使用します。
例: 最適化レベルを使用した Sampler の構成¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Sampler, Options
service = QiskitRuntimeService()
options = Options(optimization_level=3)
with Session(service=service, backend="ibmq_qasm_simulator") as session:
sampler = Sampler(session=session, options=options)
高度なトランスパイル・オプション¶
また、トランスパイル戦略をさらに構成するために、さまざまな高度なオプションを調整することができます。これらの方法は、最適化レベルと並行して使用することができます。 これにより、関心のあるオプションを変更し、残りを最適化レベルに管理させることができます。
トランスパイル・オプションのほとんどは、 qiskit.compiler.transpile から継承されます。
オプション |
説明 |
---|---|
options.transpilation.initial_layout(Union[dict, List, None]) |
物理量子ビットの上の仮想量子ビットの初期位置。 |
options.transpilation.layout_method (Optional[str]) |
レイアウト選択パスの名前。 |
options.transpilation.routing_method (Optional[str]) |
ルーティングパスの名前: |
options.transpilation.skip_transpilation (bool) |
このオプションは Qiskit Runtime primitive に固有です。完全にトランスパイルをスキップできます。 この方法を使用する場合は、回路が実行しているバックエンドの基底ゲートを使用して書かれていることを確認してください。 |
options.transpilation.approximation_degree (Optional[float]) |
回路近似に使用されるヒューリスティック・ダイアル (1.0=近似なし、0.0=最大近似)。デフォルトはすべての最適化レベルの近似なしです。 |