Lewati ke konten utama

Menentukan opsi Estimator

Versi paket

Kode di halaman ini dikembangkan menggunakan persyaratan berikut. Kami sarankan pakai versi ini atau yang lebih baru.

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

Kamu bisa pakai opsi untuk menyesuaikan primitif Estimator. Meskipun antarmuka metode run() primitif sama di semua implementasi, opsinya tidak demikian. Lihat referensi API untuk info tentang opsi qiskit.primitives.BaseEstimatorV2 dan qiskit_aer.BaseEstimatorV2.

Notes :

Catatan tentang menentukan opsi di primitif Estimator
  • Kamu bisa melihat opsi yang tersedia dan memperbarui nilai opsi selama atau setelah inisialisasi Estimator.
  • Gunakan metode update() untuk menerapkan perubahan pada atribut options.
  • Jika kamu tidak menentukan nilai untuk suatu opsi, nilai khusus Unset akan diberikan dan default server yang digunakan.
  • Atribut options bertipe dataclass Python. Kamu bisa menggunakan metode bawaan asdict untuk mengonversinya ke kamus.

Mengatur opsi Estimator

Kamu bisa mengatur opsi saat menginisialisasi Estimator, setelah menginisialisasi Estimator, atau (khusus untuk precision), di metode run().

Inisialisasi primitif

Kamu bisa mengoper instance kelas options atau kamus saat menginisialisasi Estimator, yang kemudian membuat salinan opsi tersebut. Sehingga, mengubah kamus atau instance options asli tidak memengaruhi opsi yang dimiliki oleh primitif.

Kelas Options

Saat membuat instance kelas EstimatorV2, kamu bisa mengoper instance kelas options. Opsi tersebut kemudian akan diterapkan saat kamu menggunakan run() untuk melakukan perhitungan. Tentukan opsi dalam format ini: options.option.sub-option.sub-sub-option = choice. Misalnya: options.dynamical_decoupling.enable = True

Contoh:

# 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)

Kamus

Kamu bisa menentukan opsi sebagai kamus saat menginisialisasi 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]},
},
},
)

Perbarui opsi setelah inisialisasi

Kamu bisa menentukan opsi dalam format ini: estimator.options.option.sub-option.sub-sub-option = choice untuk memanfaatkan auto-complete, atau gunakan metode update() untuk pembaruan massal.

Kelas options EstimatorV2 (EstimatorOptions) tidak perlu diinstansiasi jika kamu mengatur opsi setelah menginisialisasi primitif.

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}
)

Metode Run()

Satu-satunya nilai yang bisa kamu masukkan ke run() adalah yang didefinisikan di antarmuka. Yaitu, precision untuk Estimator. Ini menimpa nilai apa pun yang diatur untuk default_precision pada run saat ini.

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')>

Kasus khusus: presisi

Metode EstimatorV2.run menerima dua argumen: daftar PUB, di mana setiap PUB bisa menentukan nilai presisi khusus untuk PUB tersebut, dan argumen keyword presisi. Nilai presisi ini adalah bagian dari antarmuka eksekusi Estimator, dan tidak bergantung pada opsi Runtime Estimator. Nilai ini diutamakan di atas nilai apa pun yang ditentukan sebagai opsi agar sesuai dengan abstraksi Estimator.

Namun, jika precision tidak ditentukan oleh PUB mana pun atau dalam argumen keyword run (atau semuanya None), maka nilai presisi dari opsi yang digunakan, terutama default_precision.

catatan

Parameter presisi ini hanya untuk menentukan presisi target, dan hasilnya tidak dijamin mencapai presisi yang ditentukan.

Perhatikan bahwa opsi Estimator mengandung baik default_shots maupun default_precision. Namun, karena gate-twirling diaktifkan secara default, hasil perkalian num_randomizations dan shots_per_randomization diutamakan di atas kedua opsi tersebut.

Secara khusus, untuk setiap Estimator PUB:

  1. Jika PUB menentukan presisi, gunakan nilai itu.
  2. Jika argumen keyword presisi ditentukan di run, gunakan nilai itu.
  3. Jika twirling diaktifkan (True secara default), maka hasil perkalian num_randomizations dan shots_per_randomization, yang ditentukan sebagai opsi twirling, yang digunakan.
  4. Jika estimator.options.default_shots ditentukan, gunakan nilai itu untuk mengontrol jumlah data.
  5. Jika estimator.options.default_precision ditentukan, gunakan nilai itu.

Misalnya, jika presisi ditentukan di keempat tempat, yang memiliki prioritas tertinggi (presisi yang ditentukan di PUB) yang digunakan.

catatan

Meskipun presisi yang ditentukan di PUB dan di run memiliki prioritas lebih tinggi, job akan gagal jika twirling diaktifkan dan hasil perkalian num_randomizations dan shots_per_randomization lebih kecil dari jumlah shot yang dibutuhkan untuk mencapai presisi tersebut. Dalam skenario ini, EstimatorV2 tidak dapat mengalokasikan shot di antara num_randomizations yang ditentukan.

catatan

Presisi berbanding terbalik dengan penggunaan. Artinya, semakin rendah presisi, semakin banyak waktu QPU yang dibutuhkan untuk dijalankan.

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')>

Matikan semua mitigasi error dan penekanan error

Kamu bisa mematikan semua mitigasi dan penekanan error jika kamu, misalnya, sedang meneliti teknik mitigasi sendiri. Untuk melakukan ini, atur resilience_level = 0.

Contoh:

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

Opsi yang tersedia

Tabel berikut mendokumentasikan opsi dari versi terbaru qiskit-ibm-runtime. Untuk melihat versi opsi yang lebih lama, kunjungi referensi API qiskit-ibm-runtime dan pilih versi sebelumnya.

default_shots

Jumlah total shots yang digunakan per sirkuit per konfigurasi.

Pilihan: Integer >= 0

Default: None

Dokumentasi API default_shots

default_precision

Presisi default yang digunakan untuk PUB atau panggilan run() apa pun yang tidak menentukannya.

Pilihan: Float > 0

Default: 0.015625 (1 / sqrt(4096))

Dokumentasi API default_precision

dynamical_decoupling

Mengontrol pengaturan mitigasi error dynamical decoupling.

Dokumentasi API dynamical_decoupling

dynamical_decoupling.enable

Pilihan: True, False

Default: False

dynamical_decoupling.extra_slack_distribution

Pilihan: middle, edges

Default: middle

dynamical_decoupling.scheduling_method

Pilihan: asap, alap Default: alap

dynamical_decoupling.sequence_type

Pilihan: XX, XpXm, XY4 Default: XX

dynamical_decoupling.skip_reset_qubits

Pilihan: True, False Default: False

environment

Dokumentasi API environment

environment.callback

Fungsi yang bisa dipanggil yang menerima Job ID dan Job result.

Pilihan: None

Default: None

environment.job_tags

Daftar tag.

Pilihan: None

Default: None

environment.log_level

Pilihan: DEBUG, INFO, WARNING, ERROR, CRITICAL

Default: WARNING

environment.private

Pilihan: True, False

Default: False

execution

Dokumentasi API execution

execution.init_qubits

Apakah mereset qubit ke ground state untuk setiap shot.

Pilihan: True, False

Default: True

execution.rep_delay

Jeda antara pengukuran dan sirkuit kuantum berikutnya.

Pilihan: Nilai dalam rentang yang disediakan oleh backend.rep_delay_range

Default: Diberikan oleh backend.default_rep_delay

max_execution_time

Membatasi berapa lama job bisa berjalan, dalam detik. Lihat panduan waktu eksekusi maksimum untuk detail.

Pilihan: Bilangan bulat detik dalam rentang [1, 10800]

Default: 10800 (3 jam)

resilience

Opsi resilience lanjutan untuk menyetel strategi resilience secara halus.

Dokumentasi API resilience

resilience.layer_noise_learning

Opsi untuk pembelajaran noise layer.

Dokumentasi API resilience.layer_noise_learning

resilience.layer_noise_learning.layer_pair_depths

Pilihan: list[int] dari 2-10 nilai dalam rentang [0, 200]

Default: (0, 1, 2, 4, 16, 32)

resilience.layer_noise_learning.max_layers_to_learn

Pilihan: None, Integer >= 1

Default: 4

resilience.layer_noise_learning.num_randomizations

Pilihan: Integer >= 1

Default: 32

resilience.layer_noise_learning.shots_per_randomization

Pilihan: Integer >= 1

Default: 128

resilience.layer_noise_model

Pilihan: NoiseLearnerResult, Sequence[LayerError]

Default: None

resilience.measure_mitigation

Pilihan: True, False

Default: True

resilience.measure_noise_learning

Opsi untuk pembelajaran noise pengukuran.

Dokumentasi API resilience.measure_noise_learning

resilience.measure_noise_learning.num_randomizations

Pilihan: Integer >= 1

Default: 32

resilience.measure_noise_learning.shots_per_randomization

Pilihan: Integer, auto

Default: auto

resilience.pec_mitigation

Pilihan: True, False

Default: False

resilience.pec

Opsi mitigasi error probabilistik.

Dokumentasi API resilience.pec

resilience.pec.max_overhead

Pilihan: None, Integer >= 1

Default: 100

resilience.pec.noise_gain

Pilihan: auto, float dalam rentang [0, 1]

Default: auto

resilience.zne_mitigation

Pilihan: True, False

Default: False

resilience.zne
resilience.zne.amplifier

Pilihan: gate_folding, gate_folding_front, gate_folding_back, pea

Default: gate_folding

resilience.zne.extrapolated_noise_factors

Pilihan: Daftar float

Default: [0, *noise_factors]

resilience.zne.extrapolator

Pilihan: Satu atau lebih dari: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

Default: (exponential, linear)

resilience.zne.noise_factors

Pilihan: Daftar float; setiap float >= 1

Default: (1, 1.5, 2) untuk PEA, dan (1, 3, 5) lainnya

resilience_level

Seberapa banyak resilience yang dibangun terhadap error. Level yang lebih tinggi menghasilkan hasil yang lebih akurat dengan mengorbankan waktu pemrosesan yang lebih lama. Lihat bagian level resilience dalam topik manajemen noise untuk info lebih lanjut.

Pilihan: 0, 1, 2

Default: 1

Dokumentasi API resilience_level

seed_estimator

Pilihan: Integer

Default: None

seed_estimator

simulator

Opsi untuk dimasukkan saat mensimulasikan Backend

Dokumentasi API simulator

simulator.basis_gates

Pilihan: Daftar nama gate basis untuk di-unroll ke

Default: Sekumpulan semua gate basis yang didukung oleh simulator Qiskit Aer

simulator.coupling_map

Pilihan: Daftar interaksi dua qubit terarah

Default: None, yang berarti tidak ada kendala konektivitas (konektivitas penuh).

simulator.noise_model

Pilihan: Qiskit Aer NoiseModel, atau representasinya

Default: None

simulator.seed_simulator

Pilihan: Integer

Default: None

twirling

Opsi Twirling

Dokumentasi API twirling

twirling.enable_gates

Pilihan: True, False

Default: False

twirling.enable_measure

Pilihan: True, False

Default: True

twirling.num_randomizations

Pilihan: auto, Integer >= 1

Default: auto

twirling.shots_per_randomization

Pilihan: auto, Integer >= 1

Default: auto

twirling.strategy

Pilihan: active, active-circuit, active-accum, all

Default: active-accum

experimental

Opsi eksperimental, jika tersedia.

Kompatibilitas fitur

Fitur-fitur Runtime tertentu tidak bisa digunakan bersama dalam satu job. Klik tab yang sesuai untuk daftar fitur yang tidak kompatibel dengan fitur yang dipilih:

Gate fraksional

Tidak kompatibel dengan:

  • Gate twirling
  • PEA
  • PEC
Gate-folding ZNE

Mungkin tidak bekerja saat menggunakan gate kustom. Tidak kompatibel dengan:

  • PEA
  • PEC
Gate twirling

Tidak kompatibel dengan:

  • Gate fraksional
  • Stretches

Catatan lain:

  • Measurement twirling hanya bisa diterapkan ke pengukuran terminal.
  • Tidak bekerja dengan entangler non-Clifford.
PEA

Tidak kompatibel dengan:

  • Gate fraksional
  • Gate-folding ZNE
  • PEC
PEC

Tidak kompatibel dengan:

  • Gate fraksional
  • Gate-folding ZNE
  • PEA

Langkah berikutnya

Rekomendasi