Qiskit Runtime
qiskit_ibm_runtime
Módulos relacionados a Qiskit Runtime IBM Client.
Qiskit Runtime é uma nova arquitetura que simplifica os cálculos que exigem muitas iterações. Esses experimentos serão executados de forma significativamente mais rápida em seu processo híbrido quântico/clássico aprimorado.
Primitivas e sessões
Qiskit Runtime tem duas primitivas predefinidas: Sampler e Estimator. Essas primitivas oferecem uma interface simplificada para a execução de tarefas fundamentais de computação quântica e, ao mesmo tempo, levam em conta os mais recentes desenvolvimentos em hardware e software quânticos.
Qiskit Runtime também tem o conceito de uma sessão. Os trabalhos enviados em uma sessão são priorizados pelo agendador. Uma sessão permite que você faça chamadas iterativas para o computador quântico com mais eficiência.
Veja a seguir um exemplo de uso de primitivos em uma sessão:
from qiskit_ibm_runtime import QiskitRuntimeService, Session
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import real_amplitudes
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# Initialize account.
service = QiskitRuntimeService()
# Prepare inputs.
psi = real_amplitudes(num_qubits=2, reps=2)
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
# Bell Circuit
qr = QuantumRegister(2, name="qr")
cr = ClassicalRegister(2, name="cr")
qc = QuantumCircuit(qr, cr, name="bell")
qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)
backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(target=backend.target, optimization_level=1)
bell_isa_circuit = pm.run(qc)
psi_isa_circuit = pm.run(psi)
isa_observables = H1.apply_layout(psi_isa_circuit.layout)
with Session(backend=backend) as session:
# Submit a request to the Sampler primitive within the session.
sampler = Sampler(mode=session)
job = sampler.run([bell_isa_circuit])
pub_result = job.result()[0]
print(f"Counts: {pub_result.data.cr.get_counts()}")
# Submit a request to the Estimator primitive within the session.
estimator = Estimator(mode=session)
estimator.options.resilience_level = 1 # Set options.
job = estimator.run(
[(psi_isa_circuit, isa_observables, theta)]
)
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")Modo de teste local
Você pode validar seus programas quânticos antes de enviá-los a um sistema físico usando o modo de teste local. O modo de teste local é ativado se um dos backends falsos em qiskit_ibm_runtime.fake_provider ou uma instância de backend do Qiskit Aer for usada ao instanciar uma primitiva ou uma sessão. Por exemplo:
from qiskit_aer import AerSimulator
from qiskit.circuit.library import real_amplitudes
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
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# 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)
sampler = Sampler(backend=fake_manila)
result = sampler.run([isa_qc]).result()
# Run the sampler job locally using AerSimulator.
# Session syntax is supported but ignored.
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(mode=session)
result = sampler.run([isa_qc]).result()Dados de back-end
QiskitRuntimeService também possui métodos, como backend(), backends(), e least_busy(), que permitem consultar qual backend deve ser utilizado. Esses métodos retornam uma ou mais IBMBackend instâncias que contêm métodos e atributos que descrevem o backend.
Informações complementares
Inicialização da conta
Você precisa inicializar sua conta antes de começar a usar o serviço Qiskit Runtime. Para isso, basta inicializar uma QiskitRuntimeService instância com as credenciais da sua conta. Se você não quiser inserir as credenciais todas as vezes, pode usar o QiskitRuntimeService.save_account() método para salvar as credenciais no disco.
Qiskit Runtime está disponível em IBM Cloud, e você pode especificar o canal com channel="ibm_cloud" ou channel="ibm_quantum_platform".
Trabalhos em tempo de execução
Quando você usa o run() método do ou Estimator do Sampler para chamar a primitiva, é retornada uma RuntimeJobV2 instância de. Essa classe possui todos os métodos básicos de trabalho, como RuntimeJobV2.status(), RuntimeJobV2.result(), e RuntimeJobV2.cancel().
Criação de log
qiskit-ibm-runtime usa o registrador qiskit_ibm_runtime .
Duas variáveis de ambiente podem ser usadas para controlar o registro em log:
QISKIT_IBM_RUNTIME_LOG_LEVEL: Especifica o nível de registro a ser usado.Se um nível inválido for definido, o nível de registro terá como padrão
WARNING. Os níveis de registro válidos sãoDEBUG,INFO,WARNING,ERROReCRITICAL(sem distinção entre maiúsculas e minúsculas). Se a variável de ambiente não for definida, será usado o nível do registrador principal, que também tem como padrãoWARNING.
QISKIT_IBM_RUNTIME_LOG_FILE: Especifica o nome do arquivo de registro a ser usado. Se especificado,as mensagens serão registradas apenas no arquivo. Caso contrário, as mensagens serão registradas no erro padrão (geralmente na tela).
Para uso mais avançado, você pode modificar o próprio registrador. Por exemplo, para definir manualmente o nível para WARNING:
import logging
logging.getLogger('qiskit_ibm_runtime').setLevel(logging.WARNING)Classes
QiskitRuntimeService | Classe para interagir com o serviço Qiskit Runtime. |
Estimator | também conhecido como EstimatorV2 |
EstimatorV2 | Classe para interagir com o serviço primitivo Qiskit Runtime Estimator. |
Sampler | também conhecido como SamplerV2 |
SamplerV2 | Classe para interagir com o serviço primitivo do Qiskit Runtime Sampler. |
Executor | Classe para a execução de QuantumProgram\s. |
Session | Classe para criar uma sessão Qiskit Runtime. |
Batch | Classe para executar trabalhos no modo de execução em lote. |
IBMBackend | Classe de backend que faz interface com um backend do IBM Quantum. |
RuntimeJobV2 | Representação de um tempo de execução V2 execução primitiva. |
RuntimeEncoder | Codificador JSON usado pelo serviço de tempo de execução. |
RuntimeDecoder | Decodificador JSON usado pelo serviço de tempo de execução. |