Określanie opcji Estimatora
Wersje pakietów
Kod na tej stronie został opracowany z użyciem poniższych wymagań. Zalecamy używanie tych wersji lub nowszych.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Możesz używać opcji do dostosowania prymitywu Estimator. Chociaż interfejs metody run() prymitywów jest wspólny dla wszystkich implementacji, ich opcje już nie są. Zapoznaj się z referencjami API, aby uzyskać informacje o opcjach qiskit.primitives.BaseEstimatorV2 i qiskit_aer.BaseEstimatorV2.
Notes :
- Możesz wyświetlić dostępne opcje i aktualizować ich wartości podczas inicjalizacji Estimatora lub po niej.
- Użyj metody
update(), aby zastosować zmiany do atrybutuoptions. - Jeśli nie określisz wartości dla opcji, otrzyma ona specjalną wartość
Unset, a używane są domyślne ustawienia serwera. - Atrybut
optionsjest typem Pythondataclass. Możesz użyć wbudowanej metodyasdict, aby przekonwertować go do słownika.
Ustawianie opcji Estimatora
Opcje możesz ustawiać podczas inicjalizacji Estimatora, po inicjalizacji lub (tylko dla precision) w metodzie run().
Inicjalizacja prymitywu
Możesz przekazać instancję klasy opcji lub słownik podczas inicjalizacji Estimatora, który następnie tworzy kopię tych opcji. Zmiana oryginalnego słownika lub instancji opcji nie wpływa zatem na opcje należące do prymitywu.
Klasa opcji
Tworząc instancję klasy EstimatorV2, możesz przekazać instancję klasy opcji. Te opcje zostaną następnie zastosowane podczas użycia metody 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
Przykład:
# 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)
Słownik
Możesz określić opcje jako słownik podczas inicjalizacji Estimatora.
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]},
},
},
)
Aktualizacja opcji po inicjalizacji
Możesz określać opcje w tym formacie: estimator.options.option.sub-option.sub-sub-option = choice, aby skorzystać z autouzupełniania, lub użyć metody update() do wykonania zbiorczych aktualizacji.
Klasa opcji EstimatorV2 (EstimatorOptions) nie musi być tworzona, jeśli ustawiasz opcje po inicjalizacji prymitywu.
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()
Jedyne wartości, które możesz przekazać do run(), to te zdefiniowane w interfejsie, czyli precision dla Estimatora. Nadpisuje to wartość ustawioną dla default_precision dla bieżącego uruchomienia.
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')>
Przypadek szczególny: precyzja
Metoda EstimatorV2.run przyjmuje dwa argumenty: listę PUBów, z których każdy może określać PUB-specyficzną wartość precyzji, oraz argument kluczowy precision. Te wartości precyzji są częścią interfejsu wykonania Estimatora i są niezależne od opcji Estimatora Runtime. Mają one pierwszeństwo przed wartościami określonymi jako opcje, aby zachować zgodność z abstrakcją Estimatora.
Jednak jeśli precision nie jest określone przez żaden PUB ani w argumencie kluczowym run (lub jeśli wszystkie są None), używana jest wartość precyzji z opcji, przede wszystkim default_precision.
Te parametry precyzji służą jedynie do określania docelowej precyzji, a wyniki nie mają gwarancji osiągnięcia podanej precyzji.
Zauważ, że opcje Estimatora zawierają zarówno default_shots, jak i default_precision. Jednak ponieważ twirling bramek jest domyślnie włączony, iloczyn num_randomizations i shots_per_randomization ma pierwszeństwo przed tymi dwiema opcjami.
Konkretnie, dla każdego PUBa Estimatora:
- Jeśli PUB określa precyzję, użyj tej wartości.
- Jeśli argument kluczowy precision jest określony w
run, użyj tej wartości. - Jeśli
twirlingjest włączony (domyślnie True), używany jest iloczynnum_randomizationsishots_per_randomization, określony w opcjachtwirling. - Jeśli
estimator.options.default_shotsjest określone, użyj tej wartości do kontrolowania ilości danych. - Jeśli
estimator.options.default_precisionjest określone, użyj tej wartości.
Na przykład, jeśli precyzja jest określona we wszystkich czterech miejscach, używana jest ta z najwyższym pierwszeństwem (precyzja określona w PUBie).
Choć precyzja określona w PUBie i w run ma wyższy priorytet, zadanie zakończy się niepowodzeniem, jeśli twirling jest włączony, a iloczyn num_randomizations i shots_per_randomization jest mniejszy niż liczba ujęć potrzebna do osiągnięcia podanej precyzji. W tym scenariuszu EstimatorV2 nie jest w stanie rozdzielić ujęć pomiędzy podane num_randomizations.
Precyzja skaluje się odwrotnie do użycia. To znaczy, im niższa precyzja, tym więcej czasu QPU zajmuje uruchomienie.
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')>
Wyłączanie wszystkich mitygacji i tłumienia błędów
Możesz wyłączyć wszystkie mitygacje i tłumienie błędów, jeśli na przykład prowadzisz badania nad własnymi technikami mitygacji. Aby to osiągnąć, ustaw resilience_level = 0.
Przykład:
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
Dostępne opcje
Poniższa tabela dokumentuje opcje z najnowszej wersji qiskit-ibm-runtime. Aby zobaczyć starsze wersje opcji, odwiedź referencję API qiskit-ibm-runtime i wybierz poprzednią wersję.
default_shots
Całkowita liczba shotów do użycia na obwód na konfigurację.
Wybory: Liczba całkowita >= 0
Domyślnie: None
default_precision
Domyślna precyzja do użycia dla dowolnego PUBa lub wywołania run(), które jej nie określa.
Wybory: Float > 0
Domyślnie: 0.015625 (1 / sqrt(4096))
dynamical_decoupling
Kontroluj ustawienia mitygacji błędów dynamicznego odsprzęgania.
Dokumentacja API dynamical_decoupling
dynamical_decoupling.enable
Wybory: True, False
Domyślnie: False
dynamical_decoupling.extra_slack_distribution
Wybory: middle, edges
Domyślnie: middle
dynamical_decoupling.scheduling_method
Choices: asap, alap
Default: alap
dynamical_decoupling.sequence_type
Choices: XX, XpXm, XY4
Default: XX
dynamical_decoupling.skip_reset_qubits
Choices: True, False
Default: False
environment
environment.callback
Funkcja wywoływalna, która otrzymuje Job ID i Job result.
Wybory: None
Domyślnie: None
environment.job_tags
Lista tagów.
Wybory: None
Domyślnie: None
environment.log_level
Wybory: DEBUG, INFO, WARNING, ERROR, CRITICAL
Domyślnie: WARNING
environment.private
Wybory: True, False
Domyślnie: False
execution
execution.init_qubits
Czy resetować qubity do stanu podstawowego przy każdym shocie.
Wybory: True, False
Domyślnie: True
execution.rep_delay
Opóźnienie między pomiarem a kolejnym obwodem kwantowym.
Wybory: Wartość w zakresie podanym przez backend.rep_delay_range
Domyślnie: Podane przez backend.default_rep_delay
max_execution_time
Ogranicza czas działania zadania, w sekundach. Szczegóły znajdziesz w przewodniku maksymalny czas wykonania.
Wybory: Liczba całkowita sekund w zakresie [1, 10800]
Domyślnie: 10800 (3 godziny)
resilience
Zaawansowane opcje odporności do dostrajania strategii odporności.
resilience.layer_noise_learning
Opcje uczenia szumu warstwy.
resilience.layer_noise_learning.layer_pair_depths
Wybory: list[int] od 2 do 10 wartości w zakresie [0, 200]
Domyślnie: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
Wybory: None, Liczba całkowita >= 1
Domyślnie: 4
resilience.layer_noise_learning.num_randomizations
Wybory: Liczba całkowita >= 1
Domyślnie: 32
resilience.layer_noise_learning.shots_per_randomization
Wybory: Liczba całkowita >= 1
Domyślnie: 128
resilience.layer_noise_model
Wybory: NoiseLearnerResult, Sequence[LayerError]
Domyślnie: None
resilience.measure_mitigation
Wybory: True, False
Domyślnie: True
resilience.measure_noise_learning
Opcje uczenia szumu pomiaru.
resilience.measure_noise_learning.num_randomizations
Wybory: Liczba całkowita >= 1
Domyślnie: 32
resilience.measure_noise_learning.shots_per_randomization
Wybory: Liczba całkowita, auto
Domyślnie: auto
resilience.pec_mitigation
Wybory: True, False
Domyślnie: False
resilience.pec
Opcje mitygacji probabilistycznego anulowania błędów.
resilience.pec.max_overhead
Wybory: None, Liczba całkowita >= 1
Domyślnie: 100
resilience.pec.noise_gain
Wybory: auto, float w zakresie [0, 1]
Domyślnie: auto
resilience.zne_mitigation
Wybory: True, False
Domyślnie: False
resilience.zne
resilience.zne.amplifier
Wybory: gate_folding, gate_folding_front, gate_folding_back, pea
Domyślnie: gate_folding
resilience.zne.extrapolated_noise_factors
Wybory: Lista wartości float
Domyślnie: [0, *noise_factors]
resilience.zne.extrapolator
Wybory: Jedna lub więcej z: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
Domyślnie: (exponential, linear)
resilience.zne.noise_factors
Wybory: Lista wartości float; każdy float >= 1
Domyślnie: (1, 1.5, 2) dla PEA i (1, 3, 5) w przeciwnym razie
resilience_level
Poziom odporności na błędy. Wyższe poziomy generują dokładniejsze wyniki kosztem dłuższego czasu przetwarzania. Zobacz sekcję poziomy odporności w temacie Zarządzanie szumem, aby dowiedzieć się więcej.
Wybory: 0, 1, 2
Domyślnie: 1
seed_estimator
simulator
Opcje przekazywane podczas symulacji backendu
simulator.basis_gates
Wybory: Lista nazw bramek bazowych do rozwinięcia
Domyślnie: Zbiór wszystkich bramek bazowych obsługiwanych przez symulator Qiskit Aer
simulator.coupling_map
Wybory: Lista skierowanych interakcji dwu-qubitowych
Domyślnie: None, co oznacza brak ograniczeń łączności (pełna łączność).
simulator.noise_model
Wybory: Model szumu Qiskit Aer NoiseModel lub jego reprezentacja
Domyślnie: None
simulator.seed_simulator
Wybory: Liczba całkowita
Domyślnie: None
twirling
Opcje twirling
twirling.enable_gates
Wybory: True, False
Domyślnie: False
twirling.enable_measure
Wybory: True, False
Domyślnie: True
twirling.num_randomizations
Wybory: auto, Liczba całkowita >= 1
Domyślnie: auto
twirling.shots_per_randomization
Wybory: auto, Liczba całkowita >= 1
Domyślnie: auto
twirling.strategy
Wybory: active, active-circuit, active-accum, all
Domyślnie: active-accum
experimental
Opcje eksperymentalne, gdy dostępne.
Kompatybilność funkcji
Niektóre funkcje runtime nie mogą być używane razem w jednym zadaniu. Kliknij odpowiednią zakładkę, aby zobaczyć listę funkcji niekompatybilnych z wybraną funkcją:
Bramki ułamkowe
Niekompatybilne z:
- Twirlingiem bramek
- PEA
- PEC
Gate-folding ZNE
Może nie działać przy użyciu niestandardowych bramek. Niekompatybilne z:
- PEA
- PEC
Twirling bramek
Niekompatybilne z:
- Bramkami ułamkowymi
- Stretch
Inne uwagi:
- Twirling pomiarów można stosować tylko do pomiarów terminalnych.
- Nie działa z splątaczami nie-Cliffordowymi.
PEA
Niekompatybilne z:
- Bramkami ułamkowymi
- Gate-folding ZNE
- PEC
PEC
Niekompatybilne z:
- Bramkami ułamkowymi
- Gate-folding ZNE
- PEA
Następne kroki
- Znajdź więcej szczegółów o metodach
EstimatorV2w referencji API Estimatora. - Zdecyduj, w jakim trybie wykonania chcesz uruchomić swoje zadanie.
- Dowiedz się o zarządzaniu szumem z Estimatorem.