Saltar al contenido principal

Inicio rápido con Sampler

La tarea principal de Sampler es muestrear el registro de salida de la ejecución de uno o más circuits cuánticos. Se aceptan como entrada circuits dinámicos y circuits parametrizados (si se envían circuits parametrizados, también se deben proporcionar los valores de los parámetros). Sampler también admite desacoplamiento dinámico y twirling integrados para supresión de errores.

Los pasos de este tema describen cómo configurar Sampler, explorar las opciones que puedes usar para configurarlo e invocarlo en un programa.

Versiones de paquetes

El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o más recientes.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-ibm-runtime

Pasos para usar el primitivo Sampler

1. Inicializar la cuenta

Dado que Qiskit Runtime es un servicio gestionado, primero debes inicializar tu cuenta. Luego puedes seleccionar la QPU que quieres usar para calcular el valor de expectación.

Sigue los pasos del tema Configurar tu cuenta de IBM Cloud si aún no tienes una cuenta configurada.

Gates fraccionales

Para usar los gates fraccionales recientemente admitidos, establece use_fractional_gates=True al solicitar un backend a una instancia de QiskitRuntimeService. Por ejemplo:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Esta es una función experimental y podría cambiar en el futuro.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)

2. Crear un circuit

Necesitas al menos un circuit como entrada para el primitivo Sampler.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

El circuit y el observable deben transformarse para usar solo instrucciones admitidas por la QPU (denominadas circuits de arquitectura de conjunto de instrucciones (ISA)). Usa el transpilador para hacer esto.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Inicializar el Sampler de Qiskit Runtime

Cuando inicializas Sampler, usa el parámetro mode para especificar el modo en que quieres que se ejecute. Los valores posibles son objetos batch, session o backend para el modo de ejecución por lote, sesión y trabajo, respectivamente. Para más información, consulta Introducción a los modos de ejecución de Qiskit Runtime. Ten en cuenta que los usuarios del Plan Open no pueden enviar trabajos de sesión.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Invocar Sampler y obtener resultados

A continuación, invoca el método run() para generar la salida. El circuit y los conjuntos opcionales de valores de parámetros se ingresan como tuplas de bloque unificado primitivo (PUB).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: d82863mgbeec73alf9sg
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1100110011001011111111111010000010001010100100011000001011001101000110011000110100100100101010111001110100100000000011111100000', '0101001001010000100111000110110001001101010110110000110111101110001100000001000001111111101110000000010011111100100110001101000', '0111111110011011000011110111010111101100110010001010010001100000000100000000001010101010111010110000001100100001010110000101000', '0000110011001100110011101100000111011001110100001100001100110111010100101010001010000011000111001010101111110110100110001010000', '0011110011100001100110111001000011011111011110111100000110001000111011101101000110011011101011001110110000010010001100100011001', '1010001000010101011100101010101001101000100010011011100110010111010001110111110010100010111010011010110011001101100110010000010', '0001110010001011001100010000000001001101001110101100110011101111100100100110110010101000011010101000101011101011010100000101010', '1110100100001100110010000010011010111000001010110010111111011010010100110011100101110011101111100001010011100110011000101001001', '1101011100110101011001010100011001110100001011110101101110111011011001100110001011000010001100100011000000110101011100111111000', '1101000110000000101010000000110000011000000000010110011001001000001110101110010111011010101100011000100100110000000000000011001']

Próximos pasos

Recomendaciones