Skip to main content
IBM Quantum Platform

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ão DEBUG, INFO, WARNING, ERROR e CRITICAL (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ão WARNING.

  • 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

QiskitRuntimeServiceClasse para interagir com o serviço Qiskit Runtime.
Estimatortambém conhecido como EstimatorV2
EstimatorV2Classe para interagir com o serviço primitivo Qiskit Runtime Estimator.
Samplertambém conhecido como SamplerV2
SamplerV2Classe para interagir com o serviço primitivo do Qiskit Runtime Sampler.
ExecutorClasse para a execução de QuantumProgram\s.
SessionClasse para criar uma sessão Qiskit Runtime.
BatchClasse para executar trabalhos no modo de execução em lote.
IBMBackendClasse de backend que faz interface com um backend do IBM Quantum.
RuntimeJobV2Representação de um tempo de execução V2 execução primitiva.
RuntimeEncoderCodificador JSON usado pelo serviço de tempo de execução.
RuntimeDecoderDecodificador JSON usado pelo serviço de tempo de execução.
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.