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:
- 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 aooptionsatributo. - Se você não especificar um valor para uma opção, será atribuído a ela um valor especial de
Unsete serão utilizados os valores padrão do servidor. - O
optionsatributo é dodataclasstipo Python. Você pode usar o método integradoasdictpara 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.
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 :
- Se o parâmetro
PUBespecificar a precisão, use esse valor. - Se o argumento da palavra-chave precision for especificado em
run, use esse valor. - Se
twirlingestiver ativado (True por padrão), será utilizado o produto denum_randomizationseshots_per_randomization, conforme especificado nastwirlingopções. - Se
estimator.options.default_shotsfor especificado, use esse valor para controlar a quantidade de dados. - Se
estimator.options.default_precisionfor 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 ").
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.
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 = 0Opçõ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
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)
Controle as configurações de mitigação de erros de desacoplamento dinâmico.
dynamical_decouplingDocumentação da APIOpções :
True,FalsePadrão :
FalseOpções :
middle,edgesPadrão :
middleOpções:
asap,alapPadrão:alapOpções:
XX,XpXm,XY4Padrão:XXOpções:
True,FalsePadrão:False
environmentDocumentação da APIFunção chamável que recebe
Job IDeJob 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,FalsePadrão :
False
Se os qubits devem ser reinicializados para o estado fundamental a cada disparo.
Opções :
True,FalsePadrão :
TrueO intervalo entre uma medição e o circuito quântico subsequente.
Opções : Valor na faixa fornecida por
backend.rep_delay_rangePadrã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.
resilienceDocumentação da APIOpções para o ruído da camada de aprendizagem.
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 :
4Opções : Número inteiro >= 1
Padrão :
32Opções : Número inteiro >= 1
Padrão :
128Opções :
NoiseLearnerResult,Sequence[LayerError]Padrão : Nenhum
Opções :
True,FalsePadrão :
TrueOpções para o aprendizado do ruído de medição.
Opções : Número inteiro >= 1
Padrão :
32Opções : Inteiro,
autoPadrão :
autoOpções :
True,FalsePadrão :
FalseOpções de mitigação de erros por cancelamento probabilístico.
Opções :
None, Número inteiro >= 1Padrão :
100Opções :
auto, número real no intervalo [0, 1]Padrão :
autoOpções :
True,FalsePadrão :
FalseOpções :
gate_folding,gate_folding_front,gate_folding_back,peaPadrão :
gate_foldingOpçõ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),fallbackPadrã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)paraPEA, 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,2Padrão :
1Opções a serem passadas ao simular um backend
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
Opções : Verdadeiro, Falso
Padrão : Falso
Opções : Verdadeiro, Falso
Padrão : True
Opções :
auto, Número inteiro >= 1Padrão :
autoOpções :
auto, Número inteiro >= 1Padrão :
autoOpções :
active,active-circuit,active-accum,allPadrã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
- Veja mais detalhes sobre os
EstimatorV2métodos na documentação de referência da API do Estimator. - Decida em que modo de execução deseja executar sua tarefa.
- Saiba mais sobre o gerenciamento de ruídos com o Estimator.