Limity úloh
Když odešleš úlohu na IBM® QPU, nejprve je předána službě pro validaci úloh. Tato služba se snaží zajistit, aby byla úloha schopna na QPU spustit – nemusíš tak čekat, až projde frontou, a pak zjistit, že selhala. Součástí těchto kontrol je i dodržování níže popsaných limitů. Pokud jsou limity překročeny, danou zátěž není možné zpracovat v kvantovém softwarovém stacku a zpravidla skončí chybou.
- Některé možnosti primitivů zvětšují velikost Circuit. Popsané limity se kontrolují po očekávaném nárůstu velikosti Circuit. Konkrétně tyto možnosti zvětšují Circuit:
- Dynamical decoupling a gate-folding ZNE přidávají další Gate, které jsou zahrnuty do instrukcí pro limit Maximální počet nízkoúrovňových instrukcí na Qubit.
- Gate-folding ZNE přidává další dvoukubitové Gate relevantní pro limit Maximální počet dvoukubitových Gate na úlohu. Počet dvoukubitových Gate se násobí součtem šumových faktorů požadovaných v gate-folding ZNE.
- Limity hlášené poli
backend.configuration()max_shotsamax_experimentsjiž nejsou relevantní ani vymáhané. Tato pole budou v blízké budoucnosti odstraněna. - Tyto limity platí pro úlohu, nikoli pro Primitive Unified Bloc (PUB).
Maximální počet spuštění
Pro úlohy Sampleru je povoleno nejvýše 10 milionů spuštění (úlohy Estimatoru lze rozdělit na menší dílčí úlohy, takže se na ně tento limit nevztahuje). Počet spuštění je roven počtu Circuit násobenému počtem shotů, přičemž Circuit jsou ty, které vzniknou po rozesílání prvků PUB.
Například pokud máš PUB s jedním Circuit a parametry tvaru (4, 1), výsledkem budou 4 Circuit. Pokud požaduješ 2 000 shotů, celkový počet spuštění je .
Vezmi na vědomí, že pokud v úloze Sampleru povolíš Pauli-twirling, celkový počet shotů vychází z hodnot num_randomizations a shots_per_randomization. Více podrobností najdeš v TwirlingOptions.
Maximální počet nízkoúrovňových instrukcí na Qubit
Služba povoluje až 26,8 milionu instrukcí řídicího systému na Qubit. Tím se zajistí, že uživatelské Circuit se vejdou do instrukční paměti řídicího systému. Níže uvedený příklad ukazuje, jak transpilovat Circuit a spočítat, kolik instrukcí každého druhu obsahuje.
Následující tabulka popisuje, jak systém překládá instrukce architektury instrukční sady (ISA) Circuit na instrukce řídicího systému při výpočtu tohoto limitu.
| Instrukce | Počet |
|---|---|
rz | 1 |
delay | 1 |
sx | 2 |
x | 2 |
cx | 5 |
cz | 5 |
ecr | 5 |
measure | 10 |
reset | 17 |
init | 50 |
Tato tabulka zachycuje heuristiku použitou při validaci a neodráží přesný počet instrukcí potřebných k implementaci dané operace.
Příklad
Definuj Circuit, transpiluj je a zjisti počet Gate, které budou spuštěny.
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}")
Podrobnosti najdeš v části Transpilace vůči vlastním Backendům.
Maximální počet jednokubitových a dvoukubitových Gate na Circuit
Maximální počet jednokubitových Gate je následující:
- 30 milionů RZ Gate
- 20 milionů SX Gate
Maximální počet dvoukubitových Gate na Circuit je pět milionů. Tím se zajistí, že s úlohou lze manipulovat v rámci paměťových limitů nízkoúrovňového softwarového stacku.