Limites de jobs
Quando você envia um job para uma QPU da IBM®, ele é primeiramente enviado ao serviço de validação de jobs. Esse serviço tenta garantir que o job poderá ser executado na QPU, para que você não precise esperar que ele passe pela fila e depois falhe. Essas verificações incluem a aplicação dos limites descritos a seguir. Se esses limites forem excedidos, a carga de trabalho não poderá ser processada pela pilha de software quântico e geralmente falhará.
- Certas opções de primitivas aumentam o tamanho do circuito. Os limites descritos são verificados após o aumento esperado no tamanho do circuito. Em particular, estas opções aumentam o tamanho do circuito:
- O desacoplamento dinâmico e o ZNE por dobragem de gates introduzem gates adicionais que são incluídos nas instruções para o limite de Número máximo de instruções de baixo nível por qubit.
- O ZNE por dobragem de gates introduz gates de dois qubits adicionais relevantes para o limite de Número máximo de gates de dois qubits por job. O número de gates de dois qubits é multiplicado pela soma dos fatores de ruído solicitados no ZNE por dobragem de gates.
- Os limites reportados pelos campos
max_shotsemax_experimentsdebackend.configuration()não são mais relevantes nem aplicados. Esses campos serão removidos em breve. - Esses limites são por job, não por Bloco Unificado de Primitivas (PUB).
Número máximo de execuções
No máximo, 10 milhões de execuções são permitidas para jobs do Sampler (jobs do Estimator podem ser divididos em sub-jobs menores, portanto esse limite não se aplica). O número de execuções é o número de circuitos multiplicado pelo número de shots, onde os circuitos são os gerados após os elementos do PUB serem transmitidos.
Por exemplo, se você tiver um PUB com um circuito e parâmetros com forma (4, 1), isso geraria 4 circuitos. Se você solicitou 2.000 shots, o número total de execuções seria .
Observe que, se você habilitar o Pauli-twirling no seu job do Sampler, o número total de shots é baseado nos valores de num_randomizations e shots_per_randomization. Consulte TwirlingOptions para mais detalhes.
Número máximo de instruções de baixo nível por qubit
O serviço permite até 26,8 milhões de instruções do sistema de controle por qubit. Isso garante que os circuitos do usuário caibam na memória de instruções do sistema de controle. O exemplo abaixo mostra como transpilar um circuito e contar quantas instruções de cada tipo existem.
A tabela a seguir descreve como o sistema traduz instruções de circuito ISA (instruction set architecture) em instruções do sistema de controle ao calcular esse limite.
| Instrução | Contagem |
|---|---|
rz | 1 |
delay | 1 |
sx | 2 |
x | 2 |
cx | 5 |
cz | 5 |
ecr | 5 |
measure | 10 |
reset | 17 |
init | 50 |
Esta tabela apresenta a heurística usada na validação e não reflete o número exato de instruções utilizadas para implementar uma operação.
Exemplo
Defina circuitos, transpile-os e obtenha uma contagem de quantos gates serão executados.
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}")
Para mais detalhes, consulte Transpilar para backends personalizados.
Número máximo de gates de um e dois qubits por circuito
O número máximo de gates de um qubit é o seguinte:
- 30 milhões de gates RZ
- 20 milhões de gates SX
O número máximo de gates de dois qubits por circuito é cinco milhões. Isso garante que o job possa ser manipulado dentro dos limites de memória da pilha de software de baixo nível.