Skip to main content
IBM Quantum Platform

Especificar opções do Estimador

  • 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 Estimador. 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 para obter informações sobre as opções qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 e.

Notas:

Notas sobre a especificação de opções nas primitivas do Estimador
  • Você pode ver as opções disponíveis e atualizar os valores das opções durante ou após a inicialização do Estimador.
  • Use o update() método para aplicar alterações ao options atributo.
  • Se você não especificar um valor para uma opção, será atribuído a ela um valor especial de Unset e serão utilizados os valores padrão do servidor.
  • O options atributo é do dataclass tipo Python. Você pode usar o método integrado asdict para convertê-lo em um dicionário.

Definir opções do Estimador

Você pode definir opções ao inicializar o Estimator, após a inicialização do Estimator ou (apenas para precision ) no método run() .

Inicialização primitiva

Você pode passar uma instância da classe de opções ou um dicionário ao inicializar o Estimator, que então cria uma cópia dessas opções. Portanto, alterar o dicionário original ou a instância de opções não afeta as opções associadas à primitiva.

Classe de opções

Ao criar uma instância da EstimatorV2 classe, você pode passar uma instância da classe de opções. Essas opções serão aplicadas quando você usar run() para realizar o cálculo. Especifique as opções neste formato: options.option.sub-option.sub-sub-option = choice. Por exemplo: options.dynamical_decoupling.enable = True

Exemplo:

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions

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

options = EstimatorOptions(
    resilience_level=2,
    resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

Dicionário

Você pode especificar opções como um dicionário ao inicializar o Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

# Setting options during initialization
estimator = Estimator(
    backend,
    options={
        "resilience_level": 2,
        "resilience": {
            "zne_mitigation": True,
            "zne": {"noise_factors": [1, 3, 5]},
        },
    },
)

Opções de atualização após a inicialização

Você pode especificar as opções neste formato: estimator.options.option.sub-option.sub-sub-option = choice para aproveitar o preenchimento automático, ou usar o update() método para fazer atualizações em massa.

A classe de EstimatorV2 opções (EstimatorOptions) não precisa ser instanciada se você estiver definindo opções após a inicialização do objeto primitivo.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
    default_precision=0.02, resilience={"zne_mitigation": True}
)

Método Run()

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

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
    [(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9bjitvu62qs738pbiig', 'estimator')>

Caso especial: precisão

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

No entanto, se não precision 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 precisão das opções, mais especificamente default_precision.

Note

Esses parâmetros de precisão servem apenas para especificar a precisão alvo, e não há garantia de que os resultados atinjam a precisão especificada.

Observe que as opções do Estimador incluem tanto default_shots quanto default_precision. No entanto, como a função "gate-twirling" está ativada por padrão, o produto de num_randomizations e shots_per_randomization tem precedência sobre essas duas opções.

Especificamente, para qualquer Estimador PUB :

  1. Se o parâmetro PUB especificar a precisão, use esse valor.
  2. Se o argumento da palavra-chave precision for especificado em run, use esse valor.
  3. Se twirling estiver ativado (True por padrão), será utilizado o produto de num_randomizations e shots_per_randomization, conforme especificado nas twirling opções.
  4. Se estimator.options.default_shots for especificado, use esse valor para controlar a quantidade de dados.
  5. Se estimator.options.default_precision for especificado, use esse valor.

Por exemplo, se a precisão for especificada nas quatro posições, será utilizada aquela com maior prioridade (a precisão especificada no campo " PUB ").

Note

Embora a precisão especificada no PUB e em run tenha maior prioridade, o trabalho falha se twirling estiver ativado e o produto de num_randomizations e shots_per_randomization for menor do que o número de iterações necessárias para atingir a precisão. num_randomizationsNesse cenário, EstimatorV2 não é possível distribuir as tomadas entre os especificados.

Note

A precisão é inversamente proporcional ao uso. Ou seja, quanto menor for a precisão, mais tempo de processamento da QPU será necessário para a execução.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
    [(isa_circuit, isa_observable1)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9bjj03v6alc73ct56lg', 'estimator')>

Desative todas as funções de mitigação e supressão de erros

Você pode desativar todas as funções de mitigação e supressão de erros se, por exemplo, estiver pesquisando suas próprias técnicas de mitigação. Para fazer isso, defina resilience_level = 0.

Exemplo:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# Define the service.  This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

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

  • A precisão padrão a ser usada para qualquer chamada de PUBrun() que não especifique uma.

    Opções : Float > 0

    Padrão : 0.015625 (1 / √4096)

    default_precision 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

    • Função chamável que recebe Job ID e Job result.

      Opções : Nenhuma

      Padrão : Nenhum

    • 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

  • 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)

  • Opções avançadas de resiliência para ajustar a estratégia de resiliência.

    resilience Documentação da API

    • Opções para o ruído da camada de aprendizagem.

      resilience.layer_noise_learning Documentação da API

    • Opções : [lista] de 2 a 10 valores no intervalo [de] 0 a 200

      Padrão : (0, 1, 2, 4, 16, 32)

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

      Padrão : 4

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

      Padrão : 32

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

      Padrão : 128

    • Opções : NoiseLearnerResult, Sequence[LayerError]

      Padrão : Nenhum

    • Opções : True, False

      Padrão : True

    • Opções para o aprendizado do ruído de medição.

      resilience.measure_noise_learning Documentação da API

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

      Padrão : 32

    • Opções : Inteiro, auto

      Padrão : auto

    • Opções : True, False

      Padrão : False

    • Opções de mitigação de erros por cancelamento probabilístico.

      resilience.pec Documentação da API

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

      Padrão : 100

    • Opções : auto, número real no intervalo [0, 1]

      Padrão : auto

    • Opções : True, False

      Padrão : False

    • Opções : gate_folding, gate_folding_front, gate_folding_back, pea

      Padrão : gate_folding

    • Opções : Lista de flutuadores

      Padrão : [0, *noise_factors]

    • Opções : Uma ou mais das seguintes opções: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

      Padrão : (exponential, linear)

    • Opções : Lista de números de tipo float; cada número deve ser maior ou igual a 1

      Padrão : (1, 1.5, 2) para PEA, e (1, 3, 5) caso contrário

  • Qual o nível de resiliência necessário para lidar com erros? Níveis mais altos geram resultados mais precisos, mas aumentam o tempo de processamento. Consulte a seção sobre níveis de resiliência no tópico “Gerenciamento de ruído” para saber mais.

    Opções : 0, 1, 2

    Padrão : 1

    resilience_level Documentação da API

  • Opções : Inteiro

    Padrão : Nenhum

    seed_estimator

  • 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 : True

    • 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:

    • Giro do portão
    • PEA
    • PEC
  • Pode não funcionar ao usar portas personalizadas. Incompatível com:

    • PEA
    • PEC
  • Incompatível com:

    • Portas fracionárias
    • Alongamentos

    Outras observações:

    • A rotação da medição só pode ser aplicada a medições em terminais.
    • Não funciona com entanglers que não sejam Clifford.
  • Incompatível com:

    • Portas fracionárias
    • ZNE com dobra em porta
    • PEC
  • Incompatível com:

    • Portas fracionárias
    • ZNE com dobra em porta
    • PEA

Próximas etapas

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