Przejdź do głównej treści

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:

  1. Jeśli PUB określa shots, użyj tej wartości.
  2. Jeśli argument kluczowy shots jest określony w run, użyj tej wartości.
  3. Jeśli twirling jest włączony (domyślnie True), używany jest iloczyn num_randomizations i shots_per_randomization, określony jako opcje twirling.
  4. Jeśli sampler.options.default_shots jest 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).

uwaga

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

Dokumentacja API default_shots

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

Dokumentacja API 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

Dokumentacja API 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)

Dokumentacja API max_execution_time

simulator

Opcje przekazywane podczas symulacji backendu

Dokumentacja API simulator

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

Dokumentacja API 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-runtime v0.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

Zalecenia