Přeskočit na hlavní obsah

Úvod do možností nastavení

Primitivům IBM Quantum 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 pomocí třídy options nebo slovníku. Běžně používané možnosti, jako je resilience_level, jsou na první úrovni. Ostatní možnosti jsou seskupeny do kategorií, například execution. Zadej možnosti v tomto formátu: options.option.sub-option.sub-sub-option = choice. 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 poté aplikují, když použiješ run() k provedení výpočtu. Zadej možnosti v tomto formátu: options.option.sub-option.sub-sub-option = choice. 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 můžeš zadat v tomto formátu: _primitive_.options.option.sub-option.sub-sub-option = choice, abys využil automatické doplňování, nebo použij metodu update() k provedení hromadných úprav.

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í