Fonction Circuit IBM
Consulte la référence API
- Les fonctions Qiskit sont une fonctionnalité expérimentale disponible uniquement pour les utilisateurs des plans IBM Quantum® Premium, Flex et On-Prem (via l'API IBM Quantum Platform). Elles sont en version préliminaire et susceptibles de changer.
Vue d'ensemble
La fonction Circuit IBM® prend des PUBs abstraits comme entrées et retourne des valeurs attendues atténuées comme sorties. Cette fonction de circuit inclut un pipeline automatisé et personnalisé pour permettre aux chercheurs de se concentrer sur la découverte d'algorithmes et d'applications.
Description
Après avoir soumis ton PUB, tes circuits abstraits et tes observables sont automatiquement transpilés, exécutés sur le matériel et post-traités pour retourner des valeurs attendues atténuées. Pour ce faire, cette fonction combine les outils suivants :
- Service de transpilation Qiskit, incluant la sélection automatique des passes de transpilation assistée par IA et heuristiques pour traduire tes circuits abstraits en circuits ISA optimisés pour le matériel
- Suppression et atténuation d'erreurs requises pour le calcul à l'échelle utilitaire, incluant le twirling de mesure et de porte, le découplage dynamique, l'extinction d'erreurs de lecture par twirling (TREX), l'extrapolation zéro-bruit (ZNE) et l'amplification probabiliste d'erreurs (PEA)
- Qiskit Runtime Estimator, pour exécuter les PUBs ISA sur le matériel et retourner les valeurs attendues atténuées
Premiers pas
Authentifie-toi en utilisant ta clé API et sélectionne la fonction Qiskit comme suit. (Cet extrait suppose que tu as déjà enregistré ton compte dans ton environnement 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")
Exemples
Pour démarrer, essaie cet exemple de base :
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,
)
Vérifie le statut de ta charge de travail Qiskit Function ou récupère les résultats comme suit :
print(job.status())
result = job.result()
QUEUED
Les résultats ont le même format qu'un résultat 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
Exemples de niveau d'atténuation
L'exemple suivant montre comment définir le niveau d'atténuation :
options = {"mitigation_level": 2}
job = function.run(backend_name=backend.name, pubs=pubs, options=options)
Dans l'exemple suivant, définir le niveau d'atténuation à 1 désactive initialement l'atténuation ZNE, mais définir zne_mitigation à True remplace la configuration pertinente de mitigation_level.
options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}
Exemple de sortie
L'extrait de code suivant décrit le format PrimitiveResult (et le PubResult associé).
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}
Récupérer les messages d'erreur
Si le statut de ta charge de travail est ERROR, utilise job.result() pour récupérer le message d'erreur et aider au débogage comme suit :
job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)
print(job.result())
Obtenir de l'aide
Contacte le support IBM Quantum et inclus les informations suivantes :
- ID du job Qiskit Function (
qiskit-ibm-catalog),job.job_id - Une description détaillée du problème
- Tout message d'erreur ou code pertinent
- Les étapes pour reproduire le problème
Étapes suivantes
- Essaie le tutoriel Atténuation d'erreurs avec la fonction Circuit IBM.
- Consulte la référence API pour cette fonction Qiskit.