Especificar opções do Sampler
Versões dos pacotes
O código desta página foi desenvolvido com os seguintes requisitos. Recomendamos usar essas versões ou versões mais recentes.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Você pode usar opções para personalizar a primitiva Sampler. Esta seção foca em como especificar as opções da primitiva Qiskit Runtime. Embora a interface do método run() das primitivas seja comum a todas as implementações, suas opções não são. Consulte as referências de API correspondentes para obter informações sobre as opções de qiskit.primitives.BackendSamplerV2 e qiskit_aer.primitives.SamplerV2.
Definir opções do Sampler
Você pode definir opções ao inicializar o Sampler, após inicializá-lo, ou atualizar as opções depois que o Sampler foi inicializado. Para instruções sobre como usar essas técnicas, consulte o tópico Introdução às opções.
Além disso, você pode definir o valor shots no método run(), conforme descrito na seção a seguir.
Método Run()
Os únicos valores que você pode passar para run() são os definidos na interface, ou seja, shots. Isso substitui qualquer valor definido para default_shots na execução atual.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Casos especiais
Shots
O método SamplerV2.run aceita dois argumentos: uma lista de PUBs, cada um dos quais pode especificar um valor de shots específico do PUB, e um argumento de palavra-chave shots. Esses valores de shots fazem parte da interface de execução do Sampler e são independentes das opções do Sampler Runtime. Eles têm precedência sobre quaisquer valores especificados como opções para cumprir com a abstração do Sampler.
Porém, se shots não for especificado por nenhum PUB nem no argumento de palavra-chave run (ou se forem todos None), então o valor de shots das opções é usado, principalmente default_shots.
Em resumo, esta é a ordem de precedência para especificar shots no Sampler, para qualquer PUB particular:
- Se o PUB especificar shots, usar esse valor.
- Se o argumento de palavra-chave
shotsfor especificado emrun, usar esse valor. - Se
twirlingestiver habilitado (True por padrão), então o produto denum_randomizationseshots_per_randomization, conforme especificado nas opções detwirling, é usado. - Se
sampler.options.default_shotsfor especificado, usar esse valor.
Portanto, se shots forem especificados em todos os lugares possíveis, o de maior precedência (shots especificados no PUB) é usado.
Embora os shots especificados no PUB e em run tenham maior precedência, o job falha se twirling estiver habilitado e o produto de num_randomizations e shots_per_randomization for menor que o valor de shots. Nesse cenário, o SamplerV2 não consegue alocar os shots entre os num_randomizations especificados.
Exemplo:
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
Opções disponíveis
A tabela a seguir documenta as opções da versão mais recente do qiskit-ibm-runtime. Para ver versões anteriores das opções, visite a referência de API do qiskit-ibm-runtime e selecione uma versão anterior.
default_shots
O número total de shots a usar por circuito por configuração.
Opções: Inteiro >= 0
Padrão: None
dynamical_decoupling
Controla as configurações de mitigação de erros por desacoplamento dinâmico.
Documentação de API de dynamical_decoupling
dynamical_decoupling.enable
Opções: True, False
Padrão: False
dynamical_decoupling.extra_slack_distribution
Opções: middle, edges
Padrão: middle
dynamical_decoupling.scheduling_method
Opções: asap, alap
Padrão: alap
dynamical_decoupling.sequence_type
Opções: XX, XpXm, XY4
Padrão: XX
dynamical_decoupling.skip_reset_qubits
Opções: True, False
Padrão: False
environment
Documentação de API de environment
environment.job_tags
Lista de tags.
Opções: None
Padrão: None
environment.log_level
Opções: DEBUG, INFO, WARNING, ERROR, CRITICAL
Padrão: WARNING
environment.private
Opções: True, False
Padrão: False
execution
Documentação de API de execution
execution.init_qubits
Se os qubits devem ser redefinidos para o estado fundamental a cada shot.
Opções: True, False
Padrão: True
execution.rep_delay
O atraso entre uma medição e o circuito quântico subsequente.
Opções: Valor no intervalo fornecido por backend.rep_delay_range
Padrão: Fornecido por backend.default_rep_delay
execution.meas_type
Opções: classified, kerneled, avg_kerneled
Padrão: classified
max_execution_time
Limita por quanto tempo um job pode ser executado, em segundos. Consulte o guia de tempo máximo de execução para mais detalhes.
Opções: Número inteiro de segundos no intervalo [1, 10800]
Padrão: 10800 (3 horas)
simulator
Opções a passar ao simular um Backend
Documentação de API de simulator
simulator.basis_gates
Opções: Lista de nomes de gates base para desdobrar
Padrão: O conjunto de todos os gates base suportados pelo simulador Qiskit Aer
simulator.coupling_map
Opções: Lista de interações direcionadas entre dois qubits
Padrão: None, o que implica ausência de restrições de conectividade (conectividade total).
simulator.noise_model
Opções: Qiskit Aer NoiseModel, ou sua representação
Padrão: None
simulator.seed_simulator
Opções: Inteiro
Padrão: None
twirling
Opções de twirling
Documentação de API de twirling
twirling.enable_gates
Opções: True, False
Padrão: False
twirling.enable_measure
Opções: True, False
Padrão: False
twirling.num_randomizations
Opções: auto, Inteiro >= 1
Padrão: auto
twirling.shots_per_randomization
Opções: auto, Inteiro >= 1
Padrão: auto
twirling.strategy
Opções: active, active-circuit, active-accum, all
Padrão: active-accum
experimental
Opções experimentais, quando disponíveis.
Compatibilidade de recursos
Certos recursos de runtime não podem ser usados juntos em um único job. Clique na aba apropriada para ver uma lista de recursos incompatíveis com o recurso selecionado:
Circuitos dinâmicos
Incompatível com:
- Desacoplamento dinâmico
Outras observações:
- O twirling de gates pode ser aplicado a circuitos dinâmicos, mas apenas a gates que não estejam dentro de blocos condicionais. O twirling de medição só pode ser aplicado a medições terminais.
- Compatível com gates fracionários ao usar o
qiskit-ibm-runtimev0.42.0 ou posterior.
Desacoplamento dinâmico
Incompatível com:
- Circuitos dinâmicos
Gates fracionários
Incompatível com:
- Twirling de gates
Compatível com circuitos dinâmicos ao usar o qiskit-ibm-runtime v0.42.0 ou posterior.
Twirling de gates
Incompatível com:
- Gates fracionários
- Stretches
Outras observações:
- O twirling de gates pode ser aplicado a circuitos dinâmicos, mas apenas a gates que não estejam dentro de blocos condicionais.
- O twirling de medição só pode ser aplicado a medições terminais.
- O twirling de medição é incompatível com a instrução
store. - Não funciona com entanglers não-Clifford.
Próximos passos
- Revise o guia Introdução às opções.
- Encontre mais detalhes sobre os métodos de
SamplerV2na referência de API do Sampler. - Decida em qual modo de execução executar seu job.
- Saiba mais sobre o gerenciamento de ruído com Sampler.