Přeskočit na hlavní obsah

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 :

Notes about specifying options in the Estimator primitives
  • 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 options použij metodu update().
  • Pokud pro možnost nezadáš hodnotu, obdrží speciální hodnotu Unset a použijí se výchozí hodnoty serveru.
  • Atribut options je Python typ dataclass. Ke konverzi na slovník můžeš použít vestavěnou metodu asdict.

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.

poznámka

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:

  1. Pokud PUB specifikuje přesnost, použij tuto hodnotu.
  2. Pokud je klíčový argument precision zadán v run, použij tuto hodnotu.
  3. Pokud je povoleno twirling (ve výchozím nastavení True), použije se součin num_randomizations a shots_per_randomization, zadaný jako twirling options.
  4. Pokud je zadáno estimator.options.default_shots, použij tuto hodnotu k řízení množství dat.
  5. 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).

poznámka

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.

poznámka

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

Dokumentace API default_shots

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

Dokumentace API default_precision

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

Dokumentace API 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

Dokumentace API 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.

Dokumentace API resilience

resilience.layer_noise_learning

Možnosti pro učení šumu vrstvy.

Dokumentace API resilience.layer_noise_learning

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í.

Dokumentace API resilience.measure_noise_learning

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.

Dokumentace API resilience.pec

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

Dokumentace API resilience_level

seed_estimator

Volby: Celé číslo

Výchozí: None

seed_estimator

simulator

Možnosti předávané při simulaci backendu

Dokumentace API simulator

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

Dokumentace API 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

Doporučení