Guia de introdução rápida ao Sampler
A principal função do Sampler é amostrar o registro de saída resultante da execução de um ou mais circuitos quânticos. São aceitos circuitos dinâmicos e circuitos parametrizados como entrada (caso sejam enviados circuitos parametrizados, os valores dos parâmetros também devem ser fornecidos). O Sampler também oferece suporte a desacoplamento dinâmico e twirling integrados para supressão de erros.
As etapas deste tópico descrevem como configurar o Sampler, explorar as opções disponíveis para configurá-lo e chamá-lo em um programa.
O código desta página foi desenvolvido com base nos seguintes requisitos. Recomendamos usar essas versões ou versões mais recentes.
qiskit[all]~=2.5.0 qiskit-ibm-runtime~=0.47.0
Passos para usar a primitiva Sampler
1. Inicializar a conta
Como o Qiskit Runtime é um serviço gerenciado, você precisa primeiro configurar sua conta. Você pode então selecionar a QPU que deseja usar para calcular o valor esperado.
Siga as etapas descritas no tópico “Configurar sua conta do IBM Cloud ” caso ainda não tenha uma conta configurada.
Para usar os gates fracionários agora suportados, defina use_fractional_gates=True ao solicitar um backend de uma QiskitRuntimeService instância. Por exemplo:
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)Este é um recurso experimental e pode sofrer alterações 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
É necessário ter 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 a variável observável precisam ser transformados para utilizar apenas instruções compatíveis com a QPU (conhecidos como circuitos de arquitetura de conjunto de instruções (ISA) ). Use o transpilador para fazer 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()}")Output:
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])
3. Inicializar o amostrador “ Qiskit Runtime ”
Ao inicializar o Sampler, use o mode parâmetro para especificar o modo em que deseja que ele seja executado. Os valores possíveis backend são batch, session, ou para os modos de execução em lote, sessão e tarefa, respectivamente. Para obter mais informações, consulte a Introdução aos modos de execução do Qiskit Runtime. Observe que os usuários do Open Plan não podem enviar tarefas de sessão.
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)4. Executar o Sampler e obter os resultados
Em seguida, chame o run() método para gerar a saída. O circuito e os conjuntos de valores de parâmetros opcionais são inseridos como tuplas de blocos 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: d9bjioe6hjac73ffpt00
>>> 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: ['1101010100010000110010011111001100111000110001001100000001111010010000110001000110011011001000011101010101011011011001100100011', '1010000011001001001010000000010011101110010000011010001001000010110000100010011010101110001100000100000011011111001000000000001', '1001100110001100100011000001000010000010011010100000000011010011110101001100001101100000001010000111010000011010010001100110011', '0101010101010101010100111011101110010110010101110000100010100010110011000010101000000110011001011101010000101011101001100001000', '0101011011101110110010101100100011111001001100001101001001101010000000110101001010011000010100100011000001000101010001100010011', '1101010101001111011111100111001001111110011010101000011100001110000101111010000011100110101010001101000011001100110011001010000', '0000000000000010001000111111100011101100011010101110011011110011100110011001010100011100101100100011100110011111001000110010000', '1010101000100110110100010100000000011100011010010110100000111011111001111011101010101111011100100111010010000110100000100000000', '0001111001000100110011110010011001101100001110111001100010101011001100001100110010001010001000010011010000101011110001110001100', '1100100011000011001010000011010101110110010101100111010111100101011110110110100010010001001100110011000100001010010101010010011']
Próximas etapas
- Saiba como testar localmente antes de executar em computadores quânticos.
- Analise exemplos detalhados.
- Pratique com primitivas seguindo a lição sobre a função
Costem IBM Quantum Learning. - Saiba como fazer a transpilagem localmente na seção Transpilagem.
- Consulte o guia de comparação de configurações do transpiler.
- Aprenda a usar as opções básicas.
- Consulte a API para ver as opções do Sampler.