Migrar de simuladores em nuvem para simuladores locais
Na computação quântica, a escolha entre usar simuladores e hardware quântico é crucial para avançar na área. Embora os simuladores sejam úteis para testes e depuração, nessa era de utilidade quântica, o desenvolvimento quântico e o avanço da indústria requerem hardware real. Como parte da transição para a utilidade quântica, os simuladores em nuvem do IBM Quantum® foram descontinuados em 15 de maio de 2024. Este guia explica a descontinuação com mais detalhes e mostra como migrar de simuladores em nuvem, como o ibmq_qasm_simulator, para simuladores locais.
Por que os simuladores em nuvem estão sendo descontinuados?
Os simuladores em nuvem estão sendo descontinuados por vários motivos:
Simuladores têm limitações
Os simuladores podem ser úteis, mas são limitados demais para uso em pesquisa ou experimentação:
-
Os simuladores são valiosos para entender QPUs (unidades de processamento quântico) em pequena escala, mas sua utilidade chega ao limite em torno de 50 qubits, mesmo com acesso a supercomputadores de alto desempenho. Esse teto decorre do crescimento exponencial nos recursos computacionais necessários para simular computadores quânticos maiores (consulte Massively parallel quantum computer simulator, eleven years later para a explicação completa). Explorar computadores quânticos de 100 qubits ou mais requer hardware.
-
Embora alguns simuladores ofereçam modelos de ruído, é muito difícil capturar toda a dinâmica de uma QPU real. O hardware quântico oferece aos pesquisadores a possibilidade de enfrentar os desafios inerentes aos computadores quânticos — como ruído, erros e decoerência — em um ambiente de teste realista.
Usar hardware quântico desenvolve habilidades únicas
Interagir com hardware quântico desenvolve habilidades e experiências inatingíveis usando apenas simuladores:
-
A interação direta com hardware quântico desenvolve habilidades porque você precisa implementar ou usar técnicas de mitigação ou supressão de erros para obter computação confiável.
-
A experiência prática com hardware quântico proporciona uma compreensão mais profunda dos fenômenos quânticos e de como adaptar algoritmos às características dos processadores quânticos.
-
Trabalhar com hardware quântico gera insights práticos sobre os desafios e as oportunidades da computação quântica, aprimorando a capacidade dos desenvolvedores de impulsionar a inovação na área.
Algoritmos devem ser adaptados para hardware quântico
Algoritmos quânticos bem-sucedidos precisam ser adaptados para explorar as capacidades do hardware quântico, otimizando desempenho e eficiência.
-
O hardware quântico oferece uma representação mais precisa das QPUs do mundo real do que os simuladores.
-
O ajuste fino de algoritmos para hardware quântico envolve a modificação do ansatz, das implementações de circuitos, dos parâmetros e da configuração para maximizar o desempenho. Esse processo é melhor alcançado por meio de experimentação direta com hardware quântico.
Quando os simuladores devem ser usados?
Os simuladores quânticos devem ser usados para ajudar a desenvolver e testar programas antes de refiná-los e enviá-los ao hardware quântico. Os simuladores locais conseguem fazer isso com bom desempenho e eficiência. Circuitos Clifford podem ser simulados de forma muito eficiente e os resultados podem ser verificados, o que é uma maneira útil de ganhar confiança em um experimento.
O modo de teste local não possui supressão ou mitigação de erros integrada. Em vez disso, você deve especificar essas opções explicitamente. Consulte Configurar mitigação de erros para o Qiskit Runtime para mais detalhes.
Migrar para simuladores locais
Com o qiskit-ibm-runtime 0.22.0 ou posterior, você pode usar o modo de teste local para substituir os simuladores em nuvem. Dependendo das suas necessidades, há várias formas de usar o modo de teste local. Para começar, especifique um dos fake backends em qiskit_ibm_runtime.fake_provider ou especifique um backend do Qiskit Aer ao instanciar um primitivo ou uma sessão.
Orientação para escolher um simulador
Use a tabela a seguir para ajudar a escolher um simulador.
| Simulador | Fake Backends | AerSimulator | Simulação Clifford |
|---|---|---|---|
| Finalidade | Imita QPUs específicas da IBM® usando snapshots | Simulação de propósito geral e alto desempenho | Simulação eficiente para circuitos Clifford |
| Modelo de ruído | Aplica automaticamente o modelo de ruído dos snapshots da QPU | Personalizado ou baseado em dados de calibração de QPU real | Ideal para simulações sem ruído |
| Tamanho do circuito | Limitado às capacidades da QPU imitada | Capaz de lidar com circuitos maiores | Adequado para circuitos muito grandes (centenas de qubits) |
| Resultados | Tempo de execução moderado para testes específicos de QPU | Tempo de execução menor para uma ampla variedade de simulações | Extremamente rápido, adequado para circuitos estabilizadores |
| Caso de uso | Teste do transpiler e comportamento específico de QPU | Desenvolvimento geral, modelos de ruído personalizados | Circuitos estabilizadores grandes, correção de erros |
Para a maioria dos usuários, o AerSimulator é uma boa escolha, devido à sua flexibilidade e desempenho. No entanto, se o seu trabalho tem como alvo uma QPU específica, um fake backend pode ser uma escolha melhor.
Fake backends
Os fake backends imitam o comportamento das QPUs da IBM usando snapshots. Os snapshots contêm informações importantes sobre a QPU, como o mapa de acoplamento, portas base e propriedades dos qubits, que são úteis para testar o transpiler e realizar simulações ruidosas da QPU. O modelo de ruído do snapshot é aplicado automaticamente durante a simulação.
Exemplo:
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
# You can use a fixed seed to get fixed results.
options = {"simulator": {"seed_simulator": 42}}
sampler = Sampler(mode=fake_manila, options=options)
result = sampler.run([isa_qc]).result()
AerSimulator
Você pode usar o modo de teste local com simuladores do Qiskit Aer, que oferece simulação de maior desempenho, capaz de lidar com circuitos maiores e modelos de ruído personalizados. Ele também suporta o modo de simulação Clifford, que pode simular eficientemente circuitos Clifford com um grande número de qubits.
Exemplo com sessões, sem ruído:
O bloco de código a seguir retornará um erro para usuários do Plano Open, pois utiliza sessões. Cargas de trabalho no Plano Open só podem ser executadas em modo job ou modo batch.
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler, QiskitRuntimeService
service = QiskitRuntimeService()
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the sampler job locally using AerSimulator.
# Session syntax is supported but ignored because local mode doesn't support sessions.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler()
result = sampler.run([isa_qc]).result()
Para simular com ruído, especifique uma QPU (hardware quântico) e envie-a ao Aer. O Aer constrói um modelo de ruído com base nos dados de calibração dessa QPU e instancia um backend Aer com esse modelo. Se preferir, você pode construir um modelo de ruído.
Exemplo com ruído:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import RealAmplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Specify a QPU to use for the noise model
real_backend = service.backend("ibm_brisbane")
aer = AerSimulator.from_backend(real_backend)
# Run the sampler job locally using AerSimulator.
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc]).result()
Simulação Clifford
Como os circuitos Clifford podem ser simulados eficientemente com resultados verificáveis, a simulação Clifford é uma ferramenta muito útil. Para um exemplo detalhado, consulte Simulação eficiente de circuitos estabilizadores com primitivos do Qiskit Aer.
Exemplo:
import numpy as np
from qiskit.circuit.library import EfficientSU2
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = EfficientSU2(n_qubits)
circuit.measure_all()
rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)
# Tell Aer to use the stabilizer (clifford) simulation method
aer_sim = AerSimulator(method="stabilizer")
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_circuit = pm.run(circuit)
sampler = Sampler(mode=aer_sim)
result = sampler.run([(isa_circuit, params)]).result()