Skip to main content
IBM Quantum Platform

Guía rápida de Sampler

La función principal del muestreador es tomar muestras del registro de salida tras la ejecución de uno o varios circuitos cuánticos. Se aceptan circuitos dinámicos y circuitos parametrizados como entrada (si se envían circuitos parametrizados, también deben indicarse los valores de los parámetros). Sampler también admite funciones integradas de desacoplamiento dinámico y «twirling» para la supresión de errores.

Los pasos de este tema describen cómo configurar Sampler, explorar las opciones disponibles para configurarlo y ejecutarlo en un programa.

Nueva implementación de Sampler

Se han introducido nuevas implementaciones de las interfaces « SamplerV2 » y « EstimatorV2 » de Qiskit en qiskit-ibm-runtime v0.50.0. Estas primitivas del lado del cliente realizan la mayor parte del preprocesamiento y el posprocesamiento en el lado del cliente y delegan la ejecución a la primitiva «Executor». La ejecución en el lado del cliente ofrece mayor transparencia, una respuesta más rápida durante la depuración y un control más preciso.

Dado que implementan la misma API, estas primitivas del lado del cliente son, en gran medida, sustitutos directos de las primitivas heredadas del lado del servidor, siendo el único cambio la instrucción de importación. Para obtener más información, consulta «Migración del Sampler y el Estimator del lado del servidor al lado del cliente ».

  • El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o posteriores.

    qiskit[all]~=2.5.2
    qiskit-ibm-runtime~=0.47.0
    

Pasos para utilizar la primitiva «Sampler»

1. Inicializar la cuenta

Primero tienes que activar tu cuenta. A continuación, puedes seleccionar la QPU que quieras utilizar.

Sigue los pasos que se indican en el tema «Configurar tu cuenta de IBM Cloud » si aún no tienes una cuenta creada.

Puertas fraccionarias

Para utilizar las puertas fraccionarias, que ahora son compatibles, configúralas use_fractional_gates=True al solicitar un backend desde una QiskitRuntimeService instancia. 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. Crea un circuito

Necesitas al menos un circuito como entrada para la primitiva 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 circuito y la variable observable deben transformarse para que utilicen únicamente instrucciones compatibles con la QPU (lo que se conoce como circuitos de arquitectura de conjunto de instrucciones, o ISA ). Para ello, utiliza el transpilador.

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()}")

Output:

>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Inicializar el muestreador « IBM Quantum »

Al inicializar Sampler, utiliza el parámetro mode para especificar el modo en el que quieres que se ejecute. Los valores posibles son batch, session, u backend objetos para los modos de ejecución por lotes, por sesión y por trabajo, respectivamente. Para obtener más información, consulta la sección «Introducción a los modos de ejecución del servicio de computación de IBM Quantum ». Ten en cuenta que los usuarios de Open Plan no pueden enviar trabajos de sesión.

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler

sampler = Sampler(mode=backend)

4. Ejecuta Sampler y obtén los resultados

A continuación, invoca el run() método para generar el resultado. El circuito y los conjuntos de valores de parámetros opcionales se introducen como tuplas de bloques unificados primitivos ( PUB ).

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

Output:

>>> Job ID: dab7lb6rrl7c7386gjgg
>>> 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]}"
)

Output:

First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']

Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.