Limity zadań
Gdy wysyłasz zadanie do QPU IBM®, jest ono najpierw przekazywane do usługi walidacji zadań. Usługa ta stara się zapewnić, że zadanie będzie mogło zostać uruchomione na QPU, abyś nie musiał czekać, aż przejdzie przez kolejkę, a następnie zakończyło się niepowodzeniem. Sprawdzenia te obejmują egzekwowanie opisanych poniżej limitów. Jeśli limity te zostaną przekroczone, dane obciążenie nie może być obsłużone przez stos oprogramowania kwantowego i zazwyczaj zakończy się niepowodzeniem.
- Niektóre opcje prymitywów zwiększają rozmiar obwodu. Opisane limity są sprawdzane po oczekiwanym wzroście rozmiaru obwodu. W szczególności następujące opcje zwiększają rozmiar obwodu:
- Dynamical decoupling i gate-folding ZNE wprowadzają dodatkowe bramki, które są uwzględniane w instrukcjach dla limitu Maksymalna liczba niskopoziomowych instrukcji na kubit.
- Gate-folding ZNE wprowadza dodatkowe dwukubitowe bramki istotne dla limitu Maksymalna liczba dwukubitowych bramek na zadanie. Liczba dwukubitowych bramek jest mnożona przez sumę współczynników szumu żądanych w gate-folding ZNE.
- Limity raportowane przez pola
max_shotsimax_experimentsmetodybackend.configuration()nie są już istotne ani egzekwowane. Pola te zostaną usunięte w najbliższej przyszłości. - Limity te dotyczą poszczególnych zadań, a nie poszczególnych PUB (Primitive Unified Bloc).
Maksymalna liczba wykonań
Dla zadań sampler dozwolonych jest co najwyżej 10 milionów wykonań ze względu na rozmiar danych wyjściowych. Liczba wykonań to liczba obwodów pomnożona przez liczbę strzałów (shots), gdzie obwody to te wygenerowane po rozgłoszeniu elementów PUB.
Na przykład, jeśli masz PUB z jednym obwodem i parametrami o kształcie (4, 1), wyrenderuje to 4 obwody. Jeśli zażądano 2 000 strzałów, całkowita liczba wykonań wynosi .
Pamiętaj, że jeśli włączysz Pauli-twirling w swoim zadaniu sampler, całkowita liczba strzałów jest oparta na wartościach num_randomizations i shots_per_randomization. Więcej szczegółów znajdziesz w TwirlingOptions.
Maksymalna liczba niskopoziomowych instrukcji na kubit
Usługa zezwala na maksymalnie 26,8 miliona instrukcji systemu sterowania na kubit. Zapewnia to, że obwody użytkownika mieszczą się w pamięci instrukcji systemu sterowania. Poniższy przykład pokazuje, jak dokonać transpilacji obwodu i policzyć, ile jest każdego rodzaju instrukcji.
Poniższa tabela opisuje, w jaki sposób system tłumaczy instrukcje obwodów architektury zestawu instrukcji (ISA) na instrukcje systemu sterowania podczas obliczania tego limitu.
| Instrukcja | Liczba |
|---|---|
rz | 1 |
delay | 1 |
sx | 2 |
x | 2 |
cx | 5 |
cz | 5 |
ecr | 5 |
measure | 10 |
reset | 17 |
init | 50 |
Ta tabela przedstawia heurystykę stosowaną w walidacji i nie odzwierciedla dokładnej liczby instrukcji używanych do implementacji operacji.
Przykład
Zdefiniuj obwody, dokonaj ich transpilacji i uzyskaj liczbę bramek, które zostaną uruchomione.
from qiskit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
num_qubits = 50
ghz = QuantumCircuit(num_qubits)
ghz.h(range(num_qubits))
ghz.cx(0, range(1, num_qubits))
op_counts = ghz.count_ops()
# Choose the least busy backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
transpiled_ghz = pm.run(ghz)
op_counts = transpiled_ghz.count_ops()
print(f"Post-Transpilation gates: {op_counts}")
Pełne szczegóły znajdziesz w Transpilacja dla niestandardowych backendów.
Maksymalna liczba jedno- i dwukubitowych bramek na obwód
Maksymalna liczba jednokubitowych bramek jest następująca:
- 30 milionów bramek RZ
- 20 milionów bramek SX
Maksymalna liczba dwukubitowych bramek na obwód wynosi pięć milionów. Zapewnia to, że zadanie może być obsługiwane w ramach limitów pamięci niskopoziomowego stosu oprogramowania.