Aller au contenu principal

Fonction Circuit IBM

Consulte la référence API

Remarque
  • 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 :

Fonction Circuit IBM

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

Recommandations