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.
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
- Aprenda como testar localmente antes de executar em computadores quânticos.
- Revise exemplos detalhados.
- Pratique com primitivas trabalhando na lição de função de custo no IBM Quantum Learning.
- Aprenda como transpilar localmente na seção Transpilar.
- Experimente o guia Comparar configurações do Transpiler.
- Aprenda como usar as opções das primitivas.
- Veja a API para as opções do Sampler.
- Leia Migrar para primitivas V2.