Określanie opcji Samplera
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 Sampler. Ta sekcja skupia się na tym, jak określać opcje prymitywów Qiskit Runtime. Chociaż interfejs metody run() prymitywów jest wspólny dla wszystkich implementacji, ich opcje już nie są. Zapoznaj się z odpowiednimi referencjami API, aby uzyskać informacje o opcjach qiskit.primitives.BackendSamplerV2 i qiskit_aer.primitives.SamplerV2.
Ustawianie opcji Samplera
Opcje możesz ustawiać podczas inicjalizacji Samplera, po jego inicjalizacji lub aktualizować je po inicjalizacji. Aby zapoznać się z instrukcjami dotyczącymi tych technik, zobacz temat Wprowadzenie do opcji.
Dodatkowo możesz ustawiać wartość shots w metodzie run(), co zostało opisane w poniższej sekcji.
Metoda Run()
Jedyne wartości, które możesz przekazać do run(), to te zdefiniowane w interfejsie, czyli shots. Nadpisuje to wartość ustawioną dla default_shots dla bieżącego uruchomienia.
# 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 SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Przypadki szczególne
Shots
Metoda SamplerV2.run przyjmuje dwa argumenty: listę PUBów, z których każdy może określać PUB-specyficzną wartość shots, oraz argument kluczowy shots. Te wartości shots są częścią interfejsu wykonania Samplera i są niezależne od opcji Samplera Runtime. Mają one pierwszeństwo przed wartościami określonymi jako opcje, aby zachować zgodność z abstrakcją Samplera.
Jednak jeśli shots nie jest określone przez żaden PUB ani w argumencie kluczowym run (lub jeśli wszystkie są None), używana jest wartość shots z opcji, przede wszystkim default_shots.
Podsumowując, oto kolejność pierwszeństwa dla określania shots w Samplerze, dla danego PUBa:
- Jeśli PUB określa shots, użyj tej wartości.
- Jeśli argument kluczowy
shotsjest określony wrun, użyj tej wartości. - Jeśli
twirlingjest włączony (domyślnie True), używany jest iloczynnum_randomizationsishots_per_randomization, określony jako opcjetwirling. - Jeśli
sampler.options.default_shotsjest określone, użyj tej wartości.
Zatem jeśli shots są określone we wszystkich możliwych miejscach, używane jest to z najwyższym pierwszeństwem (shots określone w PUBie).
Chociaż shots określone w PUBie i w run mają wyższy priorytet, zadanie nie powiedzie się, jeśli twirling jest włączony i iloczyn num_randomizations i shots_per_randomization jest mniejszy niż wartość shots. W tym scenariuszu SamplerV2 nie jest w stanie przydzielić shots pomiędzy określone num_randomizations.
Przykład:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
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 shots do użycia na obwód na konfigurację.
Wybory: Liczba całkowita >= 0
Domyślnie: None
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
Wybory: asap, alap
Domyślnie: alap
dynamical_decoupling.sequence_type
Wybory: XX, XpXm, XY4
Domyślnie: XX
dynamical_decoupling.skip_reset_qubits
Wybory: True, False
Domyślnie: False
environment
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
execution.meas_type
Wybory: classified, kerneled, avg_kerneled
Domyślnie: classified
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)
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: False
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ą:
Dynamic circuits
Niekompatybilne z:
- Dynamicznym odsprzęganiem
Inne uwagi:
- Twirling bramek można stosować do obwodów dynamicznych, ale tylko do bramek poza blokami warunkowymi. Twirling pomiarów można stosować tylko do pomiarów terminalnych.
- Kompatybilne z bramkami ułamkowymi przy użyciu
qiskit-ibm-runtimev0.42.0 lub nowszego.
Dynamical decoupling
Niekompatybilne z:
- Obwodami dynamicznymi
Fractional gates
Niekompatybilne z:
- Twirlingiem bramek
Kompatybilne z obwodami dynamicznymi przy użyciu qiskit-ibm-runtime v0.42.0 lub nowszego.
Gate twirling
Niekompatybilne z:
- Bramkami ułamkowymi
- Stretch
Inne uwagi:
- Twirling bramek można stosować do obwodów dynamicznych, ale tylko do bramek poza blokami warunkowymi.
- Twirling pomiarów można stosować tylko do pomiarów terminalnych.
- Twirling pomiarów jest niekompatybilny z instrukcją
store. - Nie działa z nie-Cliffordowymi splątaczami.
Następne kroki
- Przejrzyj przewodnik Wprowadzenie do opcji.
- Znajdź więcej szczegółów o metodach
SamplerV2w referencji API Samplera. - Zdecyduj, w jakim trybie wykonania chcesz uruchomić swoje zadanie.
- Dowiedz się o zarządzaniu szumem z Samplerem.