Função de circuito IBM
Consulte a referência da API
- As Qiskit Functions são um recurso experimental disponível apenas para usuários dos planos IBM Quantum® Premium, Flex e On-Prem (via API do IBM Quantum Platform). Elas estão em status de pré-lançamento e sujeitas a alterações.
Visão geral
A função de circuito IBM® recebe PUBs abstratos como entradas e retorna valores de expectativa mitigados como saídas. Essa função de circuito inclui um pipeline automatizado e personalizado para permitir que pesquisadores se concentrem na descoberta de algoritmos e aplicações.
Descrição
Após enviar seu PUB, seus circuitos abstratos e observáveis são automaticamente transpilados, executados em hardware e pós-processados para retornar valores de expectativa mitigados. Para isso, combina as seguintes ferramentas:
- Qiskit Transpiler Service, incluindo seleção automática de passes de transpilação baseados em IA e heurísticos para traduzir seus circuitos abstratos em circuitos ISA otimizados para hardware
- Supressão e mitigação de erros necessárias para computação em escala utilitária, incluindo twirling de medições e de portas, desacoplamento dinâmico, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE) e Probabilistic Error Amplification (PEA)
- Qiskit Runtime Estimator, para executar PUBs ISA em hardware e retornar valores de expectativa mitigados
Primeiros passos
Autentique-se usando sua chave de API e selecione a Qiskit Function da seguinte forma. (Este trecho assume que você já salvou sua conta no seu ambiente local.)
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
function = catalog.load("ibm/circuit-function")
Exemplos
Para começar, experimente este exemplo básico:
from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService
# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]
job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)
Verifique o status da sua carga de trabalho da Qiskit Function ou obtenha os resultados da seguinte forma:
print(job.status())
result = job.result()
QUEUED
Os resultados têm o mesmo formato de um resultado do Estimator:
print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB
The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))
And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492
Exemplos de nível de mitigação
O exemplo a seguir demonstra como definir o nível de mitigação:
options = {"mitigation_level": 2}
job = function.run(backend_name=backend.name, pubs=pubs, options=options)
No exemplo a seguir, definir o nível de mitigação como 1 desativa inicialmente a mitigação ZNE, mas definir zne_mitigation como True substitui a configuração relevante do mitigation_level.
options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}
Exemplo de saída
O trecho de código a seguir descreve o formato do PrimitiveResult (e do PubResult associado).
print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
Buscar mensagens de erro
Se o status da sua carga de trabalho for ERROR, use job.result() para obter a mensagem de erro e ajudar na depuração da seguinte forma:
job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)
print(job.result())
Obter suporte
Entre em contato com o suporte IBM Quantum e inclua as seguintes informações:
- ID do job da Qiskit Function (
qiskit-ibm-catalog),job.job_id - Uma descrição detalhada do problema
- Quaisquer mensagens de erro ou códigos relevantes
- Passos para reproduzir o problema
Próximos passos
- Experimente o tutorial Mitigação de erros com a função de circuito IBM.
- Visite a referência da API para esta Qiskit Function.