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.
- 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
Unsete os padrões do servidor são usados. - O atributo
optionsé do tipo Pythondataclass. Você pode usar o método embutidoasdictpara 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
- Encontre detalhes sobre como configurar supressão de erros e mitigação de erros.
- Saiba mais sobre as opções do Estimator.
- Saiba mais sobre as opções do Sampler.
- Saiba mais sobre as op ções do Executor.