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 :
- Kamu bisa melihat opsi yang tersedia dan memperbarui nilai opsi selama atau setelah inisialisasi Estimator.
- Gunakan metode
update()untuk menerapkan perubahan pada atributoptions. - Jika kamu tidak menentukan nilai untuk suatu opsi, nilai khusus
Unsetakan diberikan dan default server yang digunakan. - Atribut
optionsbertipedataclassPython. Kamu bisa menggunakan metode bawaanasdictuntuk 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.
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:
- Jika PUB menentukan presisi, gunakan nilai itu.
- Jika argumen keyword presisi ditentukan di
run, gunakan nilai itu. - Jika
twirlingdiaktifkan (True secara default), maka hasil perkaliannum_randomizationsdanshots_per_randomization, yang ditentukan sebagai opsitwirling, yang digunakan. - Jika
estimator.options.default_shotsditentukan, gunakan nilai itu untuk mengontrol jumlah data. - Jika
estimator.options.default_precisionditentukan, gunakan nilai itu.
Misalnya, jika presisi ditentukan di keempat tempat, yang memiliki prioritas tertinggi (presisi yang ditentukan di PUB) yang digunakan.
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.
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
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))
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
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
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.
resilience.layer_noise_learning
Opsi untuk pembelajaran noise layer.
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.
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.
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
seed_estimator
simulator
Opsi untuk dimasukkan saat mensimulasikan Backend
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
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
- Temukan detail lebih lanjut tentang metode
EstimatorV2di referensi API Estimator. - Tentukan mode eksekusi mana yang akan digunakan untuk job kamu.
- Pelajari tentang manajemen noise dengan Estimator.