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 obvodu. Popsané limity se kontrolují po očekávaném nárůstu velikosti obvodu. Konkrétně tyto možnosti zvětšují obvod:
  • 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í z důvodu velikosti výstupu. Počet spuštění je roven počtu obvodů násobenému počtem shotů, přičemž obvody jsou ty, které vzniknou po rozesílání prvků PUB.

Například pokud máš PUB s jedním obvodem a parametry tvaru (4, 1), výsledkem budou 4 obvody. 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é obvody se vejdou do instrukční paměti řídicího systému. Níže uvedený příklad ukazuje, jak transpilovat obvod 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) 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 obvody, transpiluj je a zjisti počet hradel, která budou spuštěna.

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 hradel na obvod

Maximální počet jednokubitových hradel je následující:

  • 30 milionů RZ hradel
  • 20 milionů SX hradel

Maximální počet dvoukubitových hradel na obvod 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.