Langkau ke kandungan utama
Projek ini dalam fasa beta. Jumpa pepijat? Buat isu GitHub. Ada soalan atau idea? Tanya dalam Discussions — kami suka dengar maklum balas anda!
Bagaimana kualiti terjemahan pada halaman ini?

Tentukan pilihan Estimator

Versi pakej

Kod di halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan penggunaan versi ini atau yang lebih baharu.

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

Anda boleh menggunakan pilihan untuk menyesuaikan primitif Estimator. Walaupun antara muka kaedah run() primitif adalah sama merentasi semua pelaksanaan, pilihan mereka tidak sama. Rujuk rujukan API untuk maklumat tentang pilihan qiskit.primitives.BaseEstimatorV2 dan qiskit_aer.BaseEstimatorV2.

Nota :

Nota tentang menentukan pilihan dalam primitif Estimator
  • Anda boleh melihat pilihan yang tersedia dan mengemas kini nilai pilihan semasa atau selepas inisialisasi Estimator.
  • Gunakan kaedah update() untuk menggunakan perubahan pada atribut options.
  • Jika anda tidak menentukan nilai untuk sesuatu pilihan, ia diberikan nilai khas Unset dan lalai pelayan digunakan.
  • Atribut options adalah jenis Python dataclass. Anda boleh menggunakan kaedah terbina asdict untuk menukarnya kepada kamus.

Tetapkan pilihan Estimator​

Anda boleh menetapkan pilihan semasa menginisialisasi Estimator, selepas menginisialisasi Estimator, atau (untuk precision sahaja), dalam kaedah run().

Inisialisasi primitif​

Anda boleh menghantar contoh kelas pilihan atau kamus semasa menginisialisasi Estimator, yang kemudiannya membuat salinan pilihan tersebut. Oleh itu, mengubah kamus asal atau contoh pilihan tidak memberi kesan kepada pilihan yang dimiliki oleh primitif.

Kelas pilihan​

Semasa mencipta contoh kelas Estimator, anda boleh menghantar contoh kelas pilihan. Pilihan tersebut akan digunakan apabila anda menggunakan run() untuk melakukan pengiraan. Tentukan pilihan dalam format ini: options.option.sub-option.sub-sub-option = choice. Contohnya: options.dynamical_decoupling.enable = True

Contoh:

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# from qiskit_ibm_runtime.options import EstimatorOptions

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models 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​

Anda boleh menentukan pilihan sebagai kamus semasa menginisialisasi Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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]},
},
},
)

Kemas kini pilihan selepas inisialisasi​

Anda boleh menentukan pilihan dalam format ini: estimator.options.option.sub-option.sub-sub-option = choice untuk memanfaatkan auto-complete, atau gunakan kaedah update() untuk membuat kemas kini secara pukal.

Kelas pilihan Estimator (EstimatorOptions) tidak perlu diinstansiasi jika anda menetapkan pilihan selepas menginisialisasi primitif.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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}
)

Kaedah Run()​

Satu-satunya nilai yang boleh anda hantar kepada run() adalah yang ditakrifkan dalam antara muka. Iaitu, precision untuk Estimator. Ini menimpa sebarang nilai yang ditetapkan untuk default_precision untuk run semasa.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7lhjvpcac73ddekcg', 'estimator')>

Kes khas: ketepatan​

Kaedah Estimator.run menerima dua argumen: senarai PUB, yang masing-masing boleh menentukan nilai ketepatan khusus PUB, dan argumen kata kunci ketepatan. Nilai ketepatan ini adalah sebahagian daripada antara muka pelaksanaan Estimator, dan bebas daripada pilihan Runtime Estimator. Nilai-nilai ini diutamakan berbanding sebarang nilai yang ditetapkan sebagai pilihan untuk mematuhi abstraksi Estimator.

Walau bagaimanapun, jika precision tidak dinyatakan oleh mana-mana PUB atau dalam argumen kata kunci run (atau jika semuanya None), maka nilai ketepatan daripada pilihan digunakan, terutamanya default_precision.

nota

Parameter ketepatan ini hanya untuk menentukan ketepatan sasaran, dan keputusan tidak dijamin akan mencapai ketepatan yang dinyatakan.

Perlu diambil perhatian bahawa pilihan Estimator mengandungi kedua-dua default_shots dan default_precision. Walau bagaimanapun, kerana gate-twirling diaktifkan secara lalai, hasil darab num_randomizations dan shots_per_randomization mengambil keutamaan daripada kedua-dua pilihan tersebut.

Khususnya, untuk mana-mana Estimator PUB:

  1. Jika PUB menentukan ketepatan, gunakan nilai tersebut.

  2. Jika argumen kata kunci ketepatan dinyatakan dalam run, gunakan nilai tersebut.

  3. Jika twirling diaktifkan (True secara lalai), maka hasil darab num_randomizations dan shots_per_randomization, seperti yang dinyatakan dalam pilihan twirling, digunakan.

  4. Jika estimator.options.default_shots dinyatakan, gunakan nilai tersebut untuk mengawal jumlah data.

  5. Jika estimator.options.default_precision dinyatakan, gunakan nilai tersebut.

Sebagai contoh, jika ketepatan dinyatakan di keempat-empat tempat, yang mempunyai keutamaan tertinggi (ketepatan yang dinyatakan dalam PUB) digunakan.

nota

Walaupun ketepatan yang dinyatakan dalam PUB dan dalam run mempunyai keutamaan lebih tinggi, kerja akan gagal jika twirling diaktifkan dan hasil darab num_randomizations dan shots_per_randomization lebih kecil daripada shot yang diperlukan untuk mencapai ketepatan tersebut. Dalam senario ini, Estimator tidak dapat mengagihkan shot dalam kalangan num_randomizations yang dinyatakan.

nota

Ketepatan berskala songsang dengan penggunaan. Iaitu, semakin rendah ketepatan, semakin banyak masa QPU yang diperlukan untuk dijalankan.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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('dab7ljjvpcac73ddekgg', 'estimator')>

Matikan semua mitigasi ralat dan penindasan ralat​

Anda boleh mematikan semua mitigasi dan penindasan ralat jika anda sedang, sebagai contoh, membuat kajian tentang teknik mitigasi sendiri. Untuk melakukan ini, tetapkan resilience_level = 0.

Contoh:

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator

# 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

Pilihan yang tersedia​

Maklumat berikut mendokumentasikan pilihan daripada versi terkini qiskit-ibm-runtime. Untuk melihat versi pilihan yang lebih lama, lawati rujukan API qiskit-ibm-runtime dan pilih versi sebelumnya.

default_shots

Jumlah keseluruhan shots yang digunakan bagi setiap litar bagi setiap konfigurasi.

Pilihan: Integer >= 0

Lalai: None

Dokumentasi API default_shots

default_precision

Ketepatan lalai yang digunakan untuk mana-mana PUB atau panggilan run() yang tidak menentukannya.

Pilihan: Float > 0

Lalai: 0.015625 (1 / sqrt(4096))

Dokumentasi API default_precision

dynamical_decoupling

Kawal tetapan mitigasi ralat dynamical decoupling.

Dokumentasi API dynamical_decoupling

dynamical_decoupling.enable

Pilihan: True, False

Lalai: False

dynamical_decoupling.extra_slack_distribution

Pilihan: middle, edges

Lalai: middle

dynamical_decoupling.scheduling_method

Pilihan: asap, alap Lalai: alap

dynamical_decoupling.sequence_type

Pilihan: XX, XpXm, XY4 Lalai: XX

dynamical_decoupling.skip_reset_qubits

Pilihan: True, False Lalai: False

environment

Dokumentasi API environment

environment.job_tags

Senarai tag.

Pilihan: None

Lalai: None

environment.log_level

Pilihan: DEBUG, INFO, WARNING, ERROR, CRITICAL

Lalai: WARNING

environment.private

Pilihan: True, False

Lalai: False

execution

Dokumentasi API execution

execution.init_qubits

Sama ada untuk menetapkan semula qubit ke keadaan asas untuk setiap shot.

Pilihan: True, False

Lalai: True

execution.rep_delay

Kelewatan antara pengukuran dan litar kuantum berikutnya.

Pilihan: Nilai dalam julat yang disediakan oleh backend.rep_delay_range

Lalai: Diberikan oleh backend.default_rep_delay

max_execution_time

Mengehadkan tempoh masa sesuatu kerja boleh berjalan, dalam saat. Lihat panduan masa pelaksanaan maksimum untuk butiran.

Pilihan: Nombor integer saat dalam julat [1, 10800]

Lalai: 10800 (3 jam)

resilience

Pilihan ketahanan lanjutan untuk menala strategi ketahanan dengan tepat.

Dokumentasi API resilience

resilience.layer_noise_model

Choices: Sequence[LayerNoiseModel]

Lalai: None

resilience.measure_mitigation

Pilihan: True, False

Lalai: True

resilience.measure_noise_learning

Pilihan untuk pembelajaran hingar pengukuran.

Dokumentasi API resilience.measure_noise_learning

resilience.measure_noise_learning.num_randomizations

Pilihan: Integer >= 1

Lalai: 32

resilience.pec_mitigation

Pilihan: True, False

Lalai: False

resilience.pec

Pilihan mitigasi pembatalan ralat berkebarangkalian.

Dokumentasi API resilience.pec

resilience.pec.max_overhead

Pilihan: None, Integer >= 1

Lalai: 100

resilience.pec.noise_gain

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

Lalai: auto

resilience.zne_mitigation

Pilihan: True, False

Lalai: False

resilience.zne
resilience.zne.amplifier

Pilihan: gate_folding, gate_folding_front, gate_folding_back, pea

Lalai: gate_folding

resilience.zne.extrapolated_noise_factors

Pilihan: Senarai float

Lalai: [0, *noise_factors]

resilience.zne.extrapolator

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

Lalai: (exponential, linear)

resilience.zne.noise_factors

Pilihan: Senarai float; setiap float >= 1

Lalai: (1, 1.5, 2) untuk PEA, dan (1, 3, 5) sebaliknya

resilience_level

Sejauh mana ketahanan yang perlu dibina terhadap ralat. Tahap yang lebih tinggi menghasilkan keputusan yang lebih tepat, tetapi dengan kos masa pemprosesan yang lebih lama. Lihat bahagian tahap ketahanan dalam topik Pengurusan hingar untuk mengetahui lebih lanjut.

Pilihan: 0, 1, 2

Lalai: 1

Dokumentasi API resilience_level

simulator

Pilihan untuk dihantar semasa mensimulasikan Backend

Dokumentasi API simulator

simulator.basis_gates

Pilihan: Senarai nama gate asas untuk diurai

Lalai: Set semua gate asas yang disokong oleh simulator Qiskit Aer

simulator.coupling_map

Pilihan: Senarai interaksi dua qubit berarah

Lalai: None, yang bermakna tiada kekangan sambungan (sambungan penuh).

simulator.noise_model

Pilihan: Qiskit Aer NoiseModel, atau representasinya

Lalai: None

simulator.seed_simulator

Pilihan: Integer

Lalai: None

twirling

Pilihan Twirling

Dokumentasi API twirling

twirling.enable_gates

Pilihan: True, False

Lalai: False

twirling.enable_measure

Pilihan: True, False

Lalai: True

twirling.num_randomizations

Pilihan: auto, Integer >= 1

Lalai: auto

twirling.shots_per_randomization

Pilihan: auto, Integer >= 1

Lalai: auto

twirling.strategy

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

Lalai: active-accum

experimental

Pilihan eksperimental, apabila tersedia.

Keserasian ciri​

Ciri-ciri runtime tertentu tidak boleh digunakan bersama dalam satu kerja. Klik tab yang sesuai untuk senarai ciri yang tidak serasi dengan ciri yang dipilih:

Gate pecahan

Tidak serasi dengan:

  • Gate twirling
  • PEA
  • PEC
Gate-folding ZNE

Mungkin tidak berfungsi apabila menggunakan gate tersuai. Tidak serasi dengan:

  • PEA
  • PEC
Gate twirling

Tidak serasi dengan:

  • Gate pecahan
  • Stretch

Nota lain:

  • Twirling pengukuran hanya boleh diterapkan pada pengukuran terminal.
  • Tidak berfungsi dengan entangler bukan-Clifford.
PEA

Tidak serasi dengan:

  • Gate pecahan
  • Gate-folding ZNE
  • PEC
PEC

Tidak serasi dengan:

  • Gate pecahan
  • Gate-folding ZNE
  • PEA

Langkah seterusnya​

Cadangan