Zadávání možností Estimátoru
Verze balíčků
Kód na této stránce byl vyvinut za použití následujících požadavků. Doporučujeme používat tyto verze nebo novější.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Možnosti můžeš použít k přizpůsobení primitivu Estimator. Ačkoli je rozhraní metody run() primitivů společné pro všechny implementace, jejich možnosti nikoli. Prostuduj si reference API pro informace o možnostech qiskit.primitives.BaseEstimatorV2 a qiskit_aer.BaseEstimatorV2.
Notes :
- Dostupné možnosti si můžeš prohlédnout a aktualizovat jejich hodnoty během inicializace Estimátoru nebo po ní.
- K aplikování změn atributu
optionspoužij metoduupdate(). - Pokud pro možnost nezadáš hodnotu, obdrží speciální hodnotu
Unseta použijí se výchozí hodnoty serveru. - Atribut
optionsje Python typdataclass. Ke konverzi na slovník můžeš použít vestavěnou metoduasdict.
Nastavení možností Estimátoru
Možnosti můžeš nastavit při inicializaci Estimátoru, po inicializaci Estimátoru nebo (pouze pro precision) v metodě run().
Inicializace primitivu
Při inicializaci Estimátoru můžeš předat instanci třídy options nebo slovník, přičemž Estimator vytvoří kopii těchto možností. Změna původního slovníku nebo instance options proto neovlivní možnosti vlastněné primitivem.
Třída Options
Při vytváření instance třídy EstimatorV2 můžeš předat instanci třídy options. Tyto možnosti budou poté aplikovány při použití metody run() k provedení výpočtu. Možnosti zadávej v tomto formátu: options.option.sub-option.sub-sub-option = choice. Například: options.dynamical_decoupling.enable = True
Příklad:
# 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)
Slovník
Možnosti pro inicializaci Estimátoru můžeš zadat jako slovník.
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]},
},
},
)
Aktualizace možností po inicializaci
Možnosti můžeš zadat v tomto formátu: estimator.options.option.sub-option.sub-sub-option = choice, abys využil/a automatické doplňování, nebo použij metodu update() pro hromadné aktualizace.
Třída options EstimatorV2 (EstimatorOptions) nemusí být instanciována, pokud nastavuješ možnosti po inicializaci primitivu.
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}
)
Metoda Run()
Jediné hodnoty, které můžeš předat do run(), jsou ty definované v rozhraní, tedy precision pro Estimátor. Tímto se přepíše hodnota nastavená pro default_precision pro aktuální spuštění.
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')>
Speciální případ: přesnost
Metoda EstimatorV2.run přijímá dva argumenty: seznam PUBů, z nichž každý může specifikovat PUB-specifickou hodnotu přesnosti, a klíčový argument precision. Tyto hodnoty přesnosti jsou součástí rozhraní pro spouštění Estimátoru a jsou nezávislé na možnostech Estimátoru Runtime. Mají přednost před hodnotami zadanými jako možnosti, aby byla zachována shoda s abstrakcí Estimátoru.
Pokud však precision není zadána žádným PUBem ani v klíčovém argumentu run (nebo pokud jsou všechny None), použije se hodnota přesnosti z možností, zejména default_precision.
Tyto parametry přesnosti slouží pouze k zadání cílové přesnosti a výsledky nejsou garantovány na dosažení zadané přesnosti.
Všimni si, že možnosti Estimátoru obsahují jak default_shots, tak default_precision. Protože je však twirling hradel ve výchozím nastavení povolen, součin num_randomizations a shots_per_randomization má přednost před těmito dvěma možnostmi.
Konkrétně pro libovolný PUB Estimátoru:
- Pokud PUB specifikuje přesnost, použij tuto hodnotu.
- Pokud je klíčový argument precision zadán v
run, použij tuto hodnotu. - Pokud je povoleno
twirling(ve výchozím nastavení True), použije se součinnum_randomizationsashots_per_randomization, zadaný jakotwirlingoptions. - Pokud je zadáno
estimator.options.default_shots, použij tuto hodnotu k řízení množství dat. - Pokud je zadáno
estimator.options.default_precision, použij tuto hodnotu.
Například pokud je přesnost zadána na všech čtyřech místech, použije se ta s nejvyšší prioritou (přesnost zadaná v PUBu).
Ačkoli přesnost zadaná v PUBu a v run mají vyšší prioritu, úloha selže, pokud je povoleno twirling a součin num_randomizations a shots_per_randomization je menší než počet snímků potřebných k dosažení dané přesnosti. V tomto scénáři není EstimatorV2 schopen rozdělit snímky mezi zadané num_randomizations.
Přesnost se škáluje nepřímo k využití. To znamená, čím nižší přesnost, tím více času QPU je potřeba ke spuštění.
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')>
Vypnutí veškerého zmírňování a potlačování chyb
Veškeré zmírňování a potlačování chyb můžeš vypnout, pokud například provádíš výzkum vlastních technik zmírňování. Toho dosáhneš nastavením resilience_level = 0.
Příklad:
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
Dostupné možnosti
Následující tabulka dokumentuje možnosti z nejnovější verze qiskit-ibm-runtime. Chceš-li zobrazit starší verze možností, navštiv referenci API qiskit-ibm-runtime a vyber předchozí verzi.
default_shots
Celkový počet shots k použití na obvod na konfiguraci.
Volby: Celé číslo >= 0
Výchozí: None
default_precision
Výchozí přesnost pro libovolný PUB nebo volání run(), které ji nespecifikuje.
Volby: Float > 0
Výchozí: 0.015625 (1 / sqrt(4096))
dynamical_decoupling
Ovládání nastavení zmírňování chyb dynamického oddělování.
Dokumentace API dynamical_decoupling
dynamical_decoupling.enable
Volby: True, False
Výchozí: False
dynamical_decoupling.extra_slack_distribution
Volby: middle, edges
Výchozí: middle
dynamical_decoupling.scheduling_method
Volby: asap, alap
Výchozí: alap
dynamical_decoupling.sequence_type
Volby: XX, XpXm, XY4
Výchozí: XX
dynamical_decoupling.skip_reset_qubits
Volby: True, False
Výchozí: False
environment
environment.callback
Volatelná funkce, která přijímá Job ID a Job result.
Volby: None
Výchozí: None
environment.job_tags
Seznam tagů.
Volby: None
Výchozí: None
environment.log_level
Volby: DEBUG, INFO, WARNING, ERROR, CRITICAL
Výchozí: WARNING
environment.private
Volby: True, False
Výchozí: False
execution
execution.init_qubits
Zda resetovat qubity do základního stavu pro každý shot.
Volby: True, False
Výchozí: True
execution.rep_delay
Prodleva mezi měřením a následným kvantovým obvodem.
Volby: Hodnota v rozsahu dodávaném backend.rep_delay_range
Výchozí: Dáno backend.default_rep_delay
max_execution_time
Omezuje dobu běhu úlohy v sekundách. Podrobnosti viz průvodce maximální doba spuštění.
Volby: Celé číslo sekund v rozsahu [1, 10800]
Výchozí: 10800 (3 hodiny)
resilience
Pokročilé možnosti odolnosti pro jemné ladění strategie odolnosti.
resilience.layer_noise_learning
Možnosti pro učení šumu vrstvy.
resilience.layer_noise_learning.layer_pair_depths
Volby: list[int] od 2 do 10 hodnot v rozsahu [0, 200]
Výchozí: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
Volby: None, Celé číslo >= 1
Výchozí: 4
resilience.layer_noise_learning.num_randomizations
Volby: Celé číslo >= 1
Výchozí: 32
resilience.layer_noise_learning.shots_per_randomization
Volby: Celé číslo >= 1
Výchozí: 128
resilience.layer_noise_model
Volby: NoiseLearnerResult, Sequence[LayerError]
Výchozí: None
resilience.measure_mitigation
Volby: True, False
Výchozí: True
resilience.measure_noise_learning
Možnosti pro učení šumu měření.
resilience.measure_noise_learning.num_randomizations
Volby: Celé číslo >= 1
Výchozí: 32
resilience.measure_noise_learning.shots_per_randomization
Volby: Celé číslo, auto
Výchozí: auto
resilience.pec_mitigation
Volby: True, False
Výchozí: False
resilience.pec
Možnosti zmírňování probabilistickým rušením chyb.
resilience.pec.max_overhead
Volby: None, Celé číslo >= 1
Výchozí: 100
resilience.pec.noise_gain
Volby: auto, float v rozsahu [0, 1]
Výchozí: auto
resilience.zne_mitigation
Volby: True, False
Výchozí: False
resilience.zne
resilience.zne.amplifier
Volby: gate_folding, gate_folding_front, gate_folding_back, pea
Výchozí: gate_folding
resilience.zne.extrapolated_noise_factors
Volby: Seznam hodnot float
Výchozí: [0, *noise_factors]
resilience.zne.extrapolator
Volby: Jeden nebo více z: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
Výchozí: (exponential, linear)
resilience.zne.noise_factors
Volby: Seznam hodnot float; každý float >= 1
Výchozí: (1, 1.5, 2) pro PEA a (1, 3, 5) jinak
resilience_level
Míra odolnosti vůči chybám. Vyšší úrovně generují přesnější výsledky za cenu delší doby zpracování. Více informací najdeš v části úrovně odolnosti v tématu Správa šumu.
Volby: 0, 1, 2
Výchozí: 1
seed_estimator
simulator
Možnosti předávané při simulaci backendu
simulator.basis_gates
Volby: Seznam názvů bázových hradel k rozvinutí
Výchozí: Sada všech bázových hradel podporovaných simulátorem Qiskit Aer
simulator.coupling_map
Volby: Seznam orientovaných dvouqubitových interakcí
Výchozí: None, což znamená žádná omezení konektivity (plná konektivita).
simulator.noise_model
Volby: Model šumu Qiskit Aer NoiseModel nebo jeho reprezentace
Výchozí: None
simulator.seed_simulator
Volby: Celé číslo
Výchozí: None
twirling
Možnosti twirling
twirling.enable_gates
Volby: True, False
Výchozí: False
twirling.enable_measure
Volby: True, False
Výchozí: True
twirling.num_randomizations
Volby: auto, Celé číslo >= 1
Výchozí: auto
twirling.shots_per_randomization
Volby: auto, Celé číslo >= 1
Výchozí: auto
twirling.strategy
Volby: active, active-circuit, active-accum, all
Výchozí: active-accum
experimental
Experimentální možnosti, pokud jsou k dispozici.
Kompatibilita funkcí
Určité funkce runtime nelze používat společně v jedné úloze. Klikni na příslušnou záložku, kde najdeš seznam funkcí, které jsou nekompatibilní s vybranou funkcí:
Frakční hradla
Nekompatibilní s:
- Twirlingem hradel
- PEA
- PEC
Gate-folding ZNE
Může nefungovat při použití vlastních hradel. Nekompatibilní s:
- PEA
- PEC
Twirling hradel
Nekompatibilní s:
- Frakčními hradly
- Stretches
Ostatní poznámky:
- Twirling měření lze aplikovat pouze na terminální měření.
- Nefunguje s non-Cliffordovými provazači.
PEA
Nekompatibilní s:
- Frakčními hradly
- Gate-folding ZNE
- PEC
PEC
Nekompatibilní s:
- Frakčními hradly
- Gate-folding ZNE
- PEA
Další kroky
- Najdi více podrobností o metodách
EstimatorV2v referenci API Estimátoru. - Rozhodni se, v jakém režimu spuštění chceš spustit svou úlohu.
- Zjisti více o správě šumu s Estimátorem.