Pular para o conteúdo principal

Introdução às opções

Você pode usar opções para personalizar as primitivas do Qiskit Runtime de acordo com suas necessidades.

Estrutura

Ao chamar as primitivas, você pode passar opções usando uma classe de opções ou um dicionário. Opções usadas com frequência, como resilience_level, ficam no primeiro nível. Outras opções são agrupadas em categorias, como execution. Especifique as opções neste formato: options.option.sub-option.sub-sub-option = choice. Por exemplo: options.dynamical_decoupling.enable = True.

Valores padrão

Se você não especificar um valor para uma opção, ela recebe um valor especial Unset e os valores padrão do servidor são utilizados. Assim, o valor padrão será o mesmo independentemente da versão do seu código.

As tabelas na seção "Resumo das classes de opções" em cada guia de "opções" das primitivas listam os valores padrão.

Definir opções

As opções podem ser definidas antes de uma primitiva ser construída e passadas para ela como uma instância da classe de opções ou um dicionário. A primitiva faz uma cópia delas, o que significa que alterar o dicionário original ou a instância de opções não afeta as opções que a primitiva possui.

Além disso, você pode alterar as opções após a primitiva ser construída. Use o fluxo de trabalho que melhor se adapte à sua aplicação.

Notas sobre como especificar opções de primitivas
  • Você pode ver as opções disponíveis durante ou após a inicialização da primitiva.
  • Se você não especificar um valor para uma opção, ela recebe um valor especial Unset e os padrões do servidor são usados.
  • O atributo options é do tipo Python dataclass. Você pode usar o método embutido asdict para convertê-lo em um dicionário.

Classe options

Ao criar uma instância da classe primitiva, você pode passar uma instância da classe options. Essas opções são então aplicadas quando você usa 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.

Veja SamplerOptions ou EstimatorOptions para obter detalhes completos sobre a classe.

O exemplo a seguir usa a primitiva Estimator, mas a sintaxe para outras primitivas é semelhante.

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 uma primitiva.

O exemplo a seguir usa a primitiva Estimator, mas a sintaxe para outras primitivas é semelhante.

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]},
},
},
)

Atualizar opções após a inicialização

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

A classe de opções da primitiva (EstimatorOptions ou SamplerOptions) não precisa ser instanciada se você estiver definindo opções após inicializar a primitiva.

O exemplo a seguir usa a primitiva Estimator, mas a sintaxe para outras primitivas é semelhante.

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

Próximos passos

Recomendações