Přeskočit na hlavní obsah

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.

Poznámky
  • 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:
  • Limity hlášené poli backend.configuration() max_shots a max_experiments již 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 4×2,000=8,0004 \times 2,000 = 8,000.

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.

InstrukcePočet
rz1
delay1
sx2
x2
cx5
cz5
ecr5
measure10
reset17
init50
poznámka

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.