Wprowadzenie do opcji
Możesz używać opcji do dostosowywania prymitywów IBM Quantum do swoich potrzeb.
Struktura
Podczas wywoływania prymitywów możesz przekazywać opcje za pomocą 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. Określ opcje w tym formacie: options.option.sub-option.sub-sub-option = choice. 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.
- 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ść
Unseti zostaną użyte domyślne wartości serwera. - Atrybut
optionsjest typudataclassw Pythonie. Możesz użyć wbudowanej metodyasdict, aby przekonwertować go na słownik.
Klasa options
Podczas tworzenia instancji klasy prymitywu możesz przekazać instancję klasy options. Te opcje są następnie stosowane, gdy używasz run() do wykonania obliczeń. Określ opcje w tym formacie: options.option.sub-option.sub-sub-option = choice. 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 określić opcje w tym formacie: _primitive_.options.option.sub-option.sub-sub-option = choice, aby skorzystać z autouzupełniania, lub użyć metody update(), aby wprowadzić zmiany zbiorczo.
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
- Zapoznaj się ze szczegółami konfiguracji tłumienia błędów i łagodzenia błędów.
- Dowiedz się więcej o opcjach Estimator.
- Dowiedz się więcej o opcjach Sampler.
- Dowiedz się więcej o opcjach Executor.