Přeskočit na hlavní obsah

Úvod do možností nastavení

Primitivům Qiskit Runtime můžeš pomocí možností přizpůsobit chování podle svých potřeb.

Struktura

Při volání primitiv můžeš předávat možnosti prostřednictvím třídy možností nebo slovníku. Běžně používané možnosti, jako například resilience_level, jsou na první úrovni. Ostatní možnosti jsou seskupeny do kategorií, například execution. Možnosti zadávej v tomto formátu: options.option.sub-option.sub-sub-option = hodnota. Například: options.dynamical_decoupling.enable = True.

Výchozí hodnoty

Pokud pro některou možnost nezadáš hodnotu, dostane speciální hodnotu Unset a použijí se výchozí hodnoty serveru. Výchozí hodnota tak bude stejná bez ohledu na verzi tvého kódu.

Výchozí hodnoty jsou uvedeny v tabulkách v části „Přehled tříd možností" na průvodci možnostmi příslušného primitiva.

Nastavení možností

Možnosti lze definovat ještě před vytvořením primitiva a předat primitivu jako instanci třídy možností nebo slovník. Primitivum si z nich vytvoří kopii, takže změny původního slovníku nebo instance možností neovlivní možnosti, které primitivum vlastní.

Možnosti lze navíc měnit i po vytvoření primitiva. Použij ten postup, který nejlépe vyhovuje tvé aplikaci.

Poznámky ke specifikaci možností primitiv
  • Dostupné možnosti si můžeš zobrazit během inicializace primitiva nebo po ní.
  • Pokud pro některou možnost nezadáš hodnotu, dostane speciální hodnotu Unset a použijí se výchozí hodnoty serveru.
  • Atribut options je datový typ dataclass v Pythonu. Pomocí vestavěné metody asdict ho můžeš převést na slovník.

Třída options

Při vytváření instance třídy primitiva můžeš předat instanci třídy options. Tyto možnosti se pak použijí při volání run(). Možnosti zadávej v tomto formátu: options.option.sub-option.sub-sub-option = hodnota. Například: options.dynamical_decoupling.enable = True.

Podrobnosti o třídě najdeš v SamplerOptions nebo EstimatorOptions.

Následující příklad používá primitivum Estimator, ale syntaxe pro ostatní primitivy je obdobná.

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 lze při inicializaci primitiva zadat jako slovník.

Následující příklad používá primitivum Estimator, ale syntaxe pro ostatní primitivy je obdobná.

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 lze zadat ve formátu _primitivum_.options.moznost.sub-moznost.sub-sub-moznost = hodnota a využít tak automatické doplňování, nebo použít metodu update() pro hromadné aktualizace.

Třídu možností primitiva (EstimatorOptions nebo SamplerOptions) není nutné instanciovat, pokud nastavuješ možnosti po inicializaci primitiva.

Následující příklad používá primitivum Estimator, ale syntaxe pro ostatní primitivy je obdobná.

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

Další kroky

Doporučení