Zum Hauptinhalt springen

IBM Circuit-Funktion

Siehe die API-Referenz

Hinweis
  • Qiskit Functions sind ein experimentelles Feature, das ausschließlich für Nutzer des IBM Quantum® Premium Plan, Flex Plan und On-Prem (über die IBM Quantum Platform API) Plan verfügbar ist. Sie befinden sich im Preview-Status und können sich noch ändern.

Überblick

Die IBM® Circuit function nimmt abstrakte PUBs als Eingabe und gibt geminderte Erwartungswerte als Ausgabe zurück. Diese Circuit function umfasst eine automatisierte und individuell angepasste Pipeline, damit sich Forschende auf die Entdeckung neuer Algorithmen und Anwendungen konzentrieren können.

Beschreibung

Nachdem du deinen PUB eingereicht hast, werden deine abstrakten Circuits und Observablen automatisch transpiliert, auf Hardware ausgeführt und nachbearbeitet, um geminderte Erwartungswerte zurückzugeben. Dafür werden folgende Tools kombiniert:

IBM Circuit function

Erste Schritte

Authentifiziere dich mit deinem API-Schlüssel und wähle die Qiskit Function wie folgt aus. (Dieser Codeausschnitt setzt voraus, dass du dein Konto bereits in deiner lokalen Umgebung gespeichert hast.)

# 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")

Beispiele

Probiere zunächst dieses einfache Beispiel aus:

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,
)

Überprüfe den Status deines Qiskit Function-Workloads oder rufe die Ergebnisse wie folgt ab:

print(job.status())
result = job.result()
QUEUED

Die Ergebnisse haben dasselbe Format wie ein Estimator-Ergebnis:

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

Beispiele zur Minderungsstufe

Das folgende Beispiel zeigt, wie die Minderungsstufe gesetzt wird:

options = {"mitigation_level": 2}

job = function.run(backend_name=backend.name, pubs=pubs, options=options)

Im folgenden Beispiel deaktiviert das Setzen der Minderungsstufe auf 1 zunächst die ZNE-Minderung, aber das Setzen von zne_mitigation auf True überschreibt die entsprechende Einstellung aus mitigation_level.

options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}

Ausgabe-Beispiel

Der folgende Codeausschnitt beschreibt das Format von PrimitiveResult (und dem zugehörigen PubResult).

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}

Fehlermeldungen abrufen

Wenn der Status deines Workloads ERROR ist, kannst du mit job.result() die Fehlermeldung zum Debuggen abrufen:

job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)

print(job.result())

Support erhalten

Wende dich an den IBM Quantum Support und gib dabei folgende Informationen an:

  • Qiskit Function Job-ID (qiskit-ibm-catalog), job.job_id
  • Eine detaillierte Beschreibung des Problems
  • Alle relevanten Fehlermeldungen oder -codes
  • Schritte zur Reproduktion des Problems

Nächste Schritte

Empfehlungen