Pular para o conteúdo principal

Início rápido do Sampler

A tarefa principal do Sampler é amostrar o registrador de saída a partir da execução de um ou mais Circuits quânticos. Circuits dinâmicos e Circuits parametrizados são aceitos como entrada (se Circuits parametrizados forem enviados, os valores dos parâmetros também devem ser fornecidos). O Sampler também suporta desacoplamento dinâmico integrado e twirling para supressão de erros.

Os passos neste tópico descrevem como configurar o Sampler, explorar as opções que você pode usar para configurá-lo e invocá-lo em um programa.

Versões dos pacotes

O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos usar essas versões ou versões mais recentes.

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

Passos para usar a primitiva Sampler

1. Inicializar a conta

Como o Qiskit Runtime é um serviço gerenciado, primeiro você precisa inicializar sua conta. Você pode então selecionar a QPU que deseja usar para calcular o valor esperado.

Siga os passos no tópico Configurar sua conta IBM Cloud se você ainda não tiver uma conta configurada.

Gates fracionários

Para usar os gates fracionários recém-suportados, defina use_fractional_gates=True ao solicitar um Backend de uma instância QiskitRuntimeService. Por exemplo:

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

Esta é uma funcionalidade experimental e pode mudar no futuro.

from qiskit_ibm_runtime import QiskitRuntimeService

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

2. Criar um circuito

Você precisa de pelo menos um circuito como entrada para a 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)

O circuito e o observável precisam ser transformados para usar apenas instruções suportadas pela QPU (referidos como circuitos de arquitetura de conjunto de instruções (ISA)). Use o Transpiler para isso.

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 o Sampler do Qiskit Runtime

Ao inicializar o Sampler, use o parâmetro mode para especificar o modo em que você quer executá-lo. Os valores possíveis são objetos batch, session ou backend para os modos de execução em lote, Session e job, respectivamente. Para mais informações, veja Introdução aos modos de execução do Qiskit Runtime. Note que usuários do Plano Aberto não podem enviar jobs de Session.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Invocar o Sampler e obter resultados

Em seguida, invoque o método run() para gerar a saída. O circuito e os conjuntos opcionais de valores de parâmetros são fornecidos como tuplas de bloco 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 passos

Recomendações