Limite de joburi
Când trimiți un job către un QPU IBM®, acesta este trimis mai întâi către serviciul de validare a joburilor. Acest serviciu încearcă să se asigure că jobul va putea rula pe QPU, astfel încât să nu fie nevoie să aștepți ca acesta să treacă prin coadă și apoi jobul să eșueze. Aceste verificări includ respectarea limitelor descrise mai jos. Dacă aceste limite sunt depășite, sarcina de lucru respectivă nu poate fi gestionată de stiva de software cuantic și, de obicei, va eșua.
- Anumite opțiuni ale primitivelor măresc dimensiunea circuitului. Limitele descrise sunt verificate după creșterea așteptată a dimensiunii circuitului. În special, aceste opțiuni măresc dimensiunea circuitului:
- Decuplarea dinamică și ZNE cu gate-folding introduc porți suplimentare care sunt incluse în instrucțiunile pentru limita Numărul maxim de instrucțiuni de nivel scăzut per qubit.
- ZNE cu gate-folding introduce porți suplimentare cu doi qubiți, relevante pentru limita Numărul maxim de porți cu doi qubiți per job. Numărul de porți cu doi qubiți este înmulțit cu suma factorilor de zgomot solicitați în ZNE cu gate-folding.
- Limitele raportate de câmpurile
backend.configuration()max_shotsșimax_experimentsnu mai sunt relevante sau impuse. Aceste câmpuri vor fi eliminate în viitorul apropiat. - Aceste limite sunt per job, nu per Primitive Unified Bloc (PUB).
Numărul maxim de execuții
Sunt permise cel mult 10 milioane de execuții pentru joburile Sampler (joburile Estimator pot fi împărțite în sub-joburi mai mici, deci această limită nu se aplică). Numărul de execuții este numărul de circuite înmulțit cu numărul de shots, unde circuitele sunt cele generate după difuzarea elementelor PUB.
De exemplu, dacă ai un PUB cu un singur Circuit și parametri cu forma (4, 1), acesta ar genera 4 circuite. Dacă ai solicitat 2.000 de shots, atunci numărul total de execuții este .
Reține că, dacă activezi Pauli-twirling în jobul tău Sampler, numărul total de shots se bazează pe valorile num_randomizations și shots_per_randomization. Consultă TwirlingOptions pentru mai multe detalii.
Numărul maxim de instrucțiuni de nivel scăzut per qubit
Serviciul permite până la 26,8 milioane de instrucțiuni ale sistemului de control per qubit. Aceasta asigură că circuitele utilizatorului se încadrează în memoria de instrucțiuni a sistemului de control. Exemplul de mai jos arată cum să transpilezi un Circuit și să numeri câte instrucțiuni de fiecare tip există.
Tabelul următor descrie modul în care sistemul traduce instrucțiunile circuitului de arhitectură a setului de instrucțiuni (ISA) în instrucțiuni ale sistemului de control atunci când calculează această limită.
| Instrucțiune | Număr |
|---|---|
rz | 1 |
delay | 1 |
sx | 2 |
x | 2 |
cx | 5 |
cz | 5 |
ecr | 5 |
measure | 10 |
reset | 17 |
init | 50 |
Acest tabel surprinde euristica folosită în validare și nu reflectă numărul exact de instrucțiuni utilizate pentru implementarea unei operații.
Exemplu
Definește circuite, transpilează-le și obține un număr al porților care vor fi rulate.
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}")
Pentru detalii complete, consultă Transpilare față de Backend-uri personalizate.
Numărul maxim de porți cu un qubit și cu doi qubiți per Circuit
Numărul maxim de porți cu un singur qubit este următorul:
- 30 de milioane de porți RZ
- 20 de milioane de porți SX
Numărul maxim de porți cu doi qubiți per Circuit este de cinci milioane. Aceasta asigură că jobul poate fi manipulat în limitele de memorie ale stivei de software de nivel scăzut.