IBM Circuit-Funktion
Siehe die API-Referenz
- 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:
- Qiskit Transpiler Service, einschließlich automatischer Auswahl von KI-gestützten und heuristischen Transpilierungspässen, um abstrakte Circuits in hardware-optimierte ISA-Circuits umzuwandeln
- Fehlerunterdrückung und -minderung für Berechnungen im Utility-Maßstab, einschließlich Messung und Gate-Twirling, Dynamical Decoupling, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE) und Probabilistic Error Amplification (PEA)
- Qiskit Runtime Estimator, zur Ausführung von ISA-PUBs auf Hardware und Rückgabe geminderter Erwartungswerte
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
- Probiere das Tutorial Fehlerminderung mit der IBM Circuit function aus.
- Besuche die API-Referenz für diese Qiskit Function.