Przejdź do głównej treści

Wprowadzenie do opcji

Możesz używać opcji, aby dostosować prymitywy Qiskit Runtime do swoich potrzeb.

Struktura

Wywołując prymitywy, możesz przekazać opcje, używając klasy opcji lub słownika. Często używane opcje, takie jak resilience_level, znajdują się na pierwszym poziomie. Inne opcje są pogrupowane w kategorie, takie jak execution. Opcje podawaj w następującym formacie: options.opcja.pod-opcja.pod-pod-opcja = wybór. Na przykład: options.dynamical_decoupling.enable = True.

Wartości domyślne

Jeśli nie podasz wartości dla danej opcji, otrzyma ona specjalną wartość Unset i zostaną użyte domyślne wartości serwera. Oznacza to, że wartość domyślna będzie taka sama niezależnie od wersji kodu.

Tabele w sekcji „Podsumowanie klas opcji" na stronie przewodnika po opcjach każdego prymitywu zawierają listę wartości domyślnych.

Ustawianie opcji

Opcje można zdefiniować przed skonstruowaniem prymitywu i przekazać do niego jako instancję klasy opcji lub słownik. Prymityw tworzy ich kopię, co oznacza, że zmiana oryginalnego słownika lub instancji opcji nie wpływa na opcje będące własnością prymitywu.

Ponadto możesz zmieniać opcje po skonstruowaniu prymitywu. Wybierz sposób pracy, który najlepiej odpowiada Twojej aplikacji.

Uwagi dotyczące podawania opcji prymitywów
  • Dostępne opcje możesz sprawdzić podczas inicjalizacji prymitywu lub po niej.
  • Jeśli nie podasz wartości dla danej opcji, otrzyma ona specjalną wartość Unset i zostaną użyte domyślne wartości serwera.
  • Atrybut options jest typu dataclass w Pythonie. Możesz użyć wbudowanej metody asdict, aby przekonwertować go na słownik.

Klasa options

Tworząc instancję klasy prymitywu, możesz przekazać instancję klasy options. Opcje te są następnie stosowane podczas wywołania run() w celu wykonania obliczeń. Opcje podawaj w następującym formacie: options.opcja.pod-opcja.pod-pod-opcja = wybór. Na przykład: options.dynamical_decoupling.enable = True.

Pełne szczegóły na temat klasy znajdziesz w SamplerOptions lub EstimatorOptions.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

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)

Słownik

Możesz podać opcje jako słownik podczas inicjalizacji prymitywu.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

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

Aktualizowanie opcji po inicjalizacji

Możesz podawać opcje w formacie _prymityw_.options.opcja.pod-opcja.pod-pod-opcja = wybór, aby korzystać z autouzupełniania, lub użyć metody update() do masowej aktualizacji.

Klasa opcji prymitywu (EstimatorOptions lub SamplerOptions) nie musi być instancjonowana, jeśli ustawiasz opcje po zainicjalizowaniu prymitywu.

Poniższy przykład używa prymitywu Estimator, ale składnia dla innych prymitywów jest podobna.

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

Kolejne kroki

Zalecenia