Skip to main content
IBM Quantum Platform

Especificar opções do Sampler

  • 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
    

Você pode usar as opções para personalizar a primitiva Sampler. Esta seção aborda como definir as opções primárias d Qiskit Runtime. Embora a interface do método run() das primitivas seja comum a todas as implementações, suas opções não o são. Consulte as referências da API correspondentes para obter informações sobre as opções qiskit.primitives.BackendSamplerV2 qiskit_aer.primitives.SamplerV2 e.


Definir opções do Sampler

Você pode definir as opções ao inicializar o Sampler, após a inicialização do Sampler, ou pode atualizar as opções depois que o Sampler tiver sido inicializado. Para obter instruções sobre como usar essas técnicas, consulte o tópico “Introdução às opções ”.

Além disso, você pode definir o shots valor no run() método, conforme descrito na seção a seguir.

Método Run()

Os únicos valores que você run() pode passar são aqueles definidos na interface. Ou seja, shots. Isso substitui qualquer valor definido para default_shots na execução atual.

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)

Output:

<RuntimeJobV2('d9bjiq3v6alc73ct5690', 'sampler')>

Casos especiais

Tentativas

O SamplerV2.run método aceita dois argumentos: uma lista de PUBs, cada um dos quais pode especificar um valor específico do PUB para o número de fotos, e um argumento de palavra-chave para o número de fotos. Esses valores de amostragem fazem parte da interface de execução do Sampler e são independentes das opções do Runtime Sampler. Eles têm precedência sobre quaisquer valores especificados como opções, a fim de estar em conformidade com a abstração do Sampler.

No entanto, se não shots for especificado por nenhuma opção PUB nem no argumento de palavra-chave run (ou se todos forem None ), então é utilizado o valor de shots das opções, mais especificamente default_shots.

Em resumo, esta é a ordem de precedência para especificar shots no Sampler, para qualquer PUB específico:

  1. Se o parâmetro PUB especificar o número de fotos, use esse valor.
  2. Se o argumento shots da palavra-chave for especificado em run, use esse valor.
  3. Se twirling estiver ativado (True por padrão), então é utilizado o produto de num_randomizations e shots_per_randomization, conforme especificado nas twirling opções.
  4. Se sampler.options.default_shots for especificado, use esse valor.

Assim, se forem especificadas jogadas em todos os locais possíveis, será utilizada aquela com maior prioridade (as jogadas especificadas no PUB).

Note

Embora as doses especificadas no PUB e e em run tenham maior prioridade, a tarefa falha se twirling estiver ativado e o produto de num_randomizations e shots_per_randomization for menor que o shots valor de. num_randomizationsNesse cenário, SamplerV2 não é possível distribuir as tomadas entre os 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)

Output:

<RuntimeJobV2('d9bjirnu62qs738pbieg', 'sampler')>

Opções disponíveis

A tabela a seguir apresenta as opções da versão mais recente do qiskit-ibm-runtime. Para ver versões anteriores das opções, acesse a qiskit-ibm-runtime referência da API e selecione uma versão anterior.

  • O número total de disparos a serem utilizados por circuito por configuração.

    Opções : Número inteiro >= 0

    Padrão : Nenhum

    default_shots Documentação da API

  • Controle as configurações de mitigação de erros de desacoplamento dinâmico.

    dynamical_decoupling Documentação da API

    • Opções : True, False

      Padrão : False

    • Opções : middle, edges

      Padrão : middle

    • Opções: asap, alap Padrão: alap

    • Opções: XX, XpXm, XY4 Padrão: XX

    • Opções: True, False Padrão: False

  • environment Documentação da API

    • Lista de tags.

      Opções : Nenhuma

      Padrão : Nenhum

    • Opções : DEBUG, INFO, WARNING, ERROR, CRITICAL

      Padrão : AVISO

    • Opções : True, False

      Padrão : False

  • execution Documentação da API

    • Se os qubits devem ser reinicializados para o estado fundamental a cada disparo.

      Opções : True, False

      Padrão : True

    • O intervalo entre uma medição e o circuito quântico subsequente.

      Opções : Valor na faixa fornecida por backend.rep_delay_range

      Padrão : Definido por backend.default_rep_delay

    • Opções : classified, kerneled, avg_kerneled

      Padrão : classified

  • Limita o tempo de execução de uma tarefa, em segundos. Consulte o guia sobre o tempo máximo de execução para obter mais detalhes.

    Opções : Número inteiro de segundos no intervalo [de] 1 a 10.800

    Padrão : 10800 (3 horas)

    max_execution_time Documentação da API

  • Opções a serem passadas ao simular um backend

    simulator Documentação da API

    • Opções : Lista de nomes de portas básicas para as quais se deve realizar o desenrolamento

      Padrão : O conjunto de todas as portas básicas suportadas pelo simulador Qiskit Aer

    • Opções : Lista de interações direcionadas entre dois qubits

      Padrão : Nenhum, o que implica a ausência de restrições de conectividade (conectividade total).

    • Opções : Qiskit Aer NoiseModel ou sua representação

      Padrão : Nenhum

    • Opções : Inteiro

      Padrão : Nenhum

  • Opções de rotação

    twirling Documentação da API

    • Opções : Verdadeiro, Falso

      Padrão : Falso

    • Opções : Verdadeiro, Falso

      Padrão : Falso

    • Opções : auto, Número inteiro >= 1

      Padrão : auto

    • Opções : auto, Número inteiro >= 1

      Padrão : auto

    • Opções : active, active-circuit, active-accum, all

      Padrão : active-accum

  • Opções experimentais, quando disponíveis.


Compatibilidade de recurso

Certas funcionalidades de tempo de execução não podem ser utilizadas em conjunto em um único trabalho. Clique na guia correspondente para ver uma lista de recursos incompatíveis com o recurso selecionado:

  • Incompatível com:

    • Desacoplamento dinâmico

    Outras observações:

    • A rotação de portas pode ser aplicada a circuitos dinâmicos, mas apenas a portas que não estejam dentro de blocos condicionais. A rotação da medição só pode ser aplicada a medições em terminais.
    • Compatível com portas fracionárias ao usar o qiskit-ibm-runtime v0.42.0 ou versões posteriores.
  • Incompatível com:

    • Circuitos dinâmicos
  • Incompatível com:

    • Giro do portão

    Compatível com circuitos dinâmicos ao usar o qiskit-ibm-runtimev0.42.0 ou versões posteriores.

  • Incompatível com:

    • Portas fracionárias
    • Alongamentos

    Outras observações:

    • A rotação de portas pode ser aplicada a circuitos dinâmicos, mas apenas a portas que não estejam dentro de blocos condicionais.
    • A rotação da medição só pode ser aplicada a medições em terminais.
    • A manipulação das medidas é incompatível com a store instrução.
    • Não funciona com entanglers que não sejam Clifford.

Próximas etapas

Recomendações
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.