Zum Hauptinhalt springen

Einführung in Qiskit Functions

Hinweise
  • Qiskit Functions sind ein experimentelles Feature, das ausschließlich Nutzenden des IBM Quantum® Premium Plan, Flex Plan und On-Prem (über die IBM Quantum Platform API) Plan zur Verfügung steht. Sie befinden sich im Preview-Release-Status und können sich noch ändern.
Paketversionen

Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen, diese Versionen oder neuere zu verwenden.

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Qiskit Functions vereinfachen und beschleunigen die Entdeckung von Algorithmen und die Anwendungsentwicklung im Utility-Scale-Bereich, indem sie Teile des Quantum-Software-Entwicklungsworkflows abstrahieren. So geben Qiskit Functions Zeit frei, die sonst für das manuelle Schreiben von Code und die Feinabstimmung von Experimenten aufgewendet wird.

Übersicht über Qiskit Functions Functions gibt es in zwei Formen:

TypWas tut sie?Beispielhafte Ein- und AusgabenFür wen ist sie gedacht?
Circuit functionVereinfachte Schnittstelle zur Ausführung von Circuits. Abstrahiert Transpilation, Fehlerunterdrückung und FehlerminderungEingabe: Abstrakte PUB-Objekte
Ausgabe: Geminderte Erwartungswerte
Forschende, die Qiskit nutzen, um neue Algorithmen und Anwendungen zu entdecken, ohne sich auf die Hardware-Optimierung oder Fehlerbehandlung konzentrieren zu müssen. Circuit Functions können verwendet werden, um benutzerdefinierte Application Functions zu erstellen.
Application functionDeckt Aufgaben auf höherer Ebene ab, etwa die Erkundung von Algorithmen und domänenspezifischen Anwendungsfällen. Abstrahiert den Quantum-Workflow zur Lösung von Aufgaben mit klassischen Ein- und AusgabenEingabe: Moleküle, Graphen
Ausgabe: Grund- und angeregte Zustandsenergie, optimale Werte für die Kostenfunktion
Forschende aus nicht-quantenmechanischen Domänen, die Quantencomputing in bestehende groß angelegte klassische Workflows integrieren, ohne klassische Daten auf Quantum Circuits abbilden zu müssen.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Functions werden von IBM® und Drittanbieter-Partnern bereitgestellt. Jede ist für bestimmte Workload-Charakteristiken leistungsfähig und bietet einzigartige Optionen zur Leistungsoptimierung.

Übersicht der verfügbaren Functions

Circuit functions

NameAnbieterEmpfohlene VerwendungEinzigartige Vorteile
Tensor-Network Error MitigationAlgorithmiqWorkloads mit leichtgewichtigen Observablen und schleifenfreien Circuits.Reduziert den Messaufwand und die Varianz und übertrifft Standard-Fehlerminderungs-Baselines wie Zero Noise Extrapolation (ZNE) und Probabilistic Error Cancellation (PEC) für relevante Circuit-Klassen.
QESEM: Error Suppression and Error MitigationQedmaWorkloads mit Circuits, die fraktionale oder parametrisierte Gates, hochgewichtige Observablen enthalten, sowie Workflows, die unverzerrte Erwartungswerte und genaue Laufzeitschätzungen erfordern.Erzeugt unverzerrte Erwartungswerte mit geringerer Varianz und geringerem Ressourcenaufwand und übertrifft ZNE und PEC für relevante Circuit-Klassen.
Performance ManagementQ-CTRLWorkloads mit parametrischen Circuits, tiefen Circuits oder Anforderungen an viele Circuit-Ausführungen.Wendet automatisch KI-gestützte Fehlerunterdrückung auf Quantenalgorithmen an, maximiert die Leistung von IBM-Geräten für genaue Ergebnisse und reduziert dabei die Anzahl der Shots, Rechenzeit und Kosten.

Zero-Overhead-Methode, die die Ausführungsgenauigkeit für die Sampler- und Estimator-Primitive verbessert und mit beliebig gewichteten Observablen kompatibel ist.

Application functions

NameAnbieterEmpfohlene VerwendungEinzigartige Vorteile
QUICK-PDEColibriTDNutzung von Quantencomputing für Multi-Physik-PDEs.

Vorbereitung von Simulations-Workflows für Quantum-Hardware unter vollständiger Kontrolle über sowohl Quanten- als auch physikalische Modellierungsparameter.
Bietet ein robustes hybrides VQA-Framework, das präzise, skalierbare PDE-Lösungen durch fortgeschrittene Lösungskodierung und Spektralmethoden liefert – ein idealer Einstiegspunkt für Teams, die quantenfähige Simulationsfähigkeiten aufbauen möchten.
Quantum Portfolio OptimizerGlobal Data QuantumWorkloads für die Finanzoptimierung, die optimale Portfolio-Strategien über die Zeit suchen und dabei Risiken minimieren und Renditen maximieren sowie das Backtesting von Handelsstrategien ermöglichen.Löst kombinatorische Optimierungsprobleme durch eine hochspezialisierte Anpassung des VQE-Quantenalgorithmus für diesen Finanz-Anwendungsfall unter Verwendung optimierter Ausführungsstrategien und Optimierer sowie rauschbewusster Fehlerminderungstechniken, die auf die Portfolio-Optimierung zugeschnitten sind.
HI-VQE ChemistryQunova ComputingWorkloads in der computergestützten Chemie, Molekularsimulation, Materialwissenschaft oder jeder Hamiltonian-Simulation, die die Lösung von Vielteilchen-Elektronenstrukturproblemen erfordert.Löst molekulare Elektronenstrukturen durch verbessertes SQD und erreicht chemische Genauigkeit (1 kcal/mol, 1,6 mHa) für Probleme, die mit 40 bis 60 Qubits modelliert werden, und übertrifft dabei einige klassische Lösungen auf Supercomputern oder Standard-SQD in Bezug auf Konvergenzgeschwindigkeit bzw. Genauigkeit um Größenordnungen.
Iskay Quantum OptimizerKipu QuantumOptimierungs-Workloads wie Scheduling, Logistik, Routing und QUBO/HUBO-Probleme.

Integrierte abstimmbare klassische Vor- und Nachverarbeitungsmethoden für die Quanten-Optimierungsroutine.

Liefert Laufzeitvorteile gegenüber klassischen Lösern (CPLEX, Simulated Annealing und Tabu Search) auf ausgewählten HUBO-Benchmarks.

Market Split ms_5_100, eine schwierige Herausforderung, wurde innerhalb von Stunden gelöst (siehe dieses Tutorial).
Singularity Machine LearningMultiverse ComputingKlassische maschinelle Lernklassifizierungs-Workflows, die von verbesserter Genauigkeit oder Recheneffizienz durch Quanten-Optimierung auf IBM-Hardware profitieren könnten.Liefert eine Genauigkeit, die mit klassischen Modellen wie Random Forest oder XGBoost vergleichbar ist oder diese übertrifft, während sie mit deutlich weniger Lernenden und einem kompakteren Ensemble arbeitet.

Angetrieben durch quantenoptimiertes Voting wählt sie die informativsten Lernenden aus und verfeinert Entscheidungsgrenzen, was zu höherer Effizienz, reduzierter Modellkomplexität und robusterer Leistung führt.
Optimization SolverQ-CTRLBinäre Optimierungsprobleme oder kombinatorische Probleme, die auf eine binäre Kostenfunktion abgebildet werden können.

Kostenfunktionen beliebiger Ordnung und Problemgrößen bis zur maximalen Geräteskala werden unterstützt.
Rauschbewusste, End-to-End-Quanten-Optimierungslösung, die hochwertige Problemdefinitionen als Eingabe ermöglicht und automatisch genaue Lösungen für klassisch schwierige kombinatorische Probleme auf Quantum-Hardware im Utility-Scale findet.

Sie abstrahiert die Komplexität durch Fehlerunterdrückung, effizientes Mapping und hybride Quanten-klassische Optimierung, um Optimierungsaufgaben in vollem Geräteumfang ohne tiefes Quantenexpertenwissen zu lösen.

Erste Schritte mit Qiskit Functions

Nutzende des Premium-, Flex- und On-Prem-Plans (über die IBM Quantum Platform API) können kostenlos mit IBM Qiskit Functions einsteigen oder eine Lizenz von einem der Partner erwerben, die eine Function zum Katalog beigetragen haben.

Kostenlose Testversion für Qiskit Functions von Drittanbietern anfordern

Um eine neue kostenlose Testversion anzufordern, navigiere zum Qiskit Functions Catalog und erkunde das Detailpanel. Klicke auf Request a free trial und fülle die vom Functions-Partner erforderlichen Informationen aus, einschließlich der IBM Cloud AccessGroupId:

  1. Navigiere zu IBM Cloud IAM.
  2. Überprüfe die Berechtigung.
    • Wechsle dein Konto in der oberen Leiste zu einem mit dem folgenden Format: XXXXXXX - [Organisationsname]
    • Stelle sicher, dass die Organisation dieselbe ist wie die, die mit deinem Premium-Konto verknüpft ist.
    • Wenn du „[Dein Name]'s Account" siehst, verwendest du dein persönliches Konto, das nicht für Premium-Zugang berechtigt ist.
  3. Finde deine Access-Group-ID.
    • Klicke auf einen Gruppennamen.
    • Klicke auf Details.
    • Kopiere die Access-Group-ID. Sie sollte mit AccessGroup- beginnen.

Qiskit Functions Catalog-Client installieren

  1. Um Qiskit Functions zu nutzen, installiere den IBM Qiskit Functions Catalog-Client:

    pip install qiskit-ibm-catalog
  2. Rufe deinen API-Schlüssel vom IBM Quantum Platform-Dashboard ab und aktiviere deine virtuelle Python-Umgebung. Sieh dir die Installationsanleitung an, wenn du noch keine virtuelle Umgebung eingerichtet hast.

    Wenn du in einer vertrauenswürdigen Python-Umgebung arbeitest (z. B. auf einem persönlichen Laptop oder einer Workstation), verwende die Methode save_account(), um deine Anmeldedaten lokal zu speichern. (Springe zum nächsten Schritt, wenn du keine vertrauenswürdige Umgebung verwendest, z. B. einen öffentlichen Computer, um dich bei IBM Quantum Platform zu authentifizieren.)

    Um save_account() zu verwenden, führe python in deiner Shell aus und gib dann Folgendes ein:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    Tippe exit(). Von nun an kannst du deine Anmeldedaten laden, wenn du dich beim Dienst authentifizieren musst:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. Vermeide die Ausführung von Code auf einer nicht vertrauenswürdigen Maschine oder in einer externen Cloud-Python-Umgebung, um Sicherheitsrisiken zu minimieren. Wenn du eine nicht vertrauenswürdige Umgebung (z. B. auf einem öffentlichen Computer) verwenden musst, ändere deinen API-Schlüssel nach jeder Nutzung, indem du ihn auf der Seite IBM Cloud API keys löschst, um das Risiko zu reduzieren. Erfahre mehr im Thema Managing user API keys. Um den Dienst in dieser Situation zu initialisieren, klappe den folgenden Abschnitt auf, um den verwendbaren Code anzuzeigen:

    Dienst in einer nicht vertrauenswürdigen Umgebung initialisieren
    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    # After using the following code, delete your API key on the IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    vorsicht

    Schütze deinen API-Schlüssel! Füge deinen Schlüssel niemals in Quellcode, Python-Skripte oder Notebook-Dateien ein. Wenn du Code mit anderen teilst, stelle sicher, dass dein API-Schlüssel nicht direkt im Python-Skript eingebettet ist. Teile stattdessen das Skript ohne den Schlüssel und gib Anweisungen zur sicheren Einrichtung.

    Wenn du deinen Schlüssel versehentlich mit jemandem geteilt oder in eine Versionskontrolle wie Git aufgenommen hast, widerrufe deinen Schlüssel sofort, indem du ihn auf der Seite IBM Cloud API keys löschst, um das Risiko zu reduzieren. Erfahre mehr im Thema Managing user API keys.

  2. Nachdem du dich authentifiziert hast, kannst du die Functions aus dem Qiskit Functions Catalog auflisten, auf die du Zugriff hast:

catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

Freigeschaltete Functions ausführen

Nachdem ein Catalog-Objekt instanziiert wurde, kannst du eine Function mit catalog.load(provider/function-name) auswählen:

ibm_cf = catalog.load("ibm/circuit-function")

Jede Qiskit Function hat benutzerdefinierte Eingaben, Optionen und Ausgaben. Sieh dir die spezifischen Dokumentationsseiten der Function an, die du ausführen möchtest, für weitere Informationen. Standardmäßig können alle Nutzenden jeweils nur einen Function-Job gleichzeitig ausführen:

# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)

job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'

Job-Status prüfen

tipp

Derzeit spiegelt die IBM Quantum-Workload-Tabelle nur Qiskit-Runtime-Workloads wider. Verwende job.status(), um den aktuellen Status deines Qiskit-Function-Workloads zu sehen.

Mit deiner Qiskit Function job_id kannst du den Status laufender Jobs prüfen. Dazu gehören folgende Status:

  • QUEUED: Das Remote-Programm befindet sich in der Qiskit-Function-Warteschlange. Die Warteschlangenpriorität basiert darauf, wie viel du Qiskit Functions genutzt hast.
  • INITIALIZING: Das Remote-Programm startet; dazu gehört das Einrichten der Remote-Umgebung und die Installation von Abhängigkeiten.
  • RUNNING: Das Programm wird ausgeführt. Dies umfasst auch mehrere detailliertere Status, sofern von bestimmten Functions unterstützt:
    • RUNNING: MAPPING: Die Function bildet derzeit deine klassischen Eingaben auf Quanteneingaben ab.
    • RUNNING: OPTIMIZING_FOR_HARDWARE: Die Function optimiert für die ausgewählte QPU. Dies kann Circuit-Transpilation, QPU-Charakterisierung, Observable-Rückpropagierung und Ähnliches umfassen.
    • RUNNING: WAITING_FOR_QPU: Die Function hat einen Job an Qiskit Runtime übermittelt und wartet in der Warteschlange.
    • RUNNING: EXECUTING_QPU: Die Function hat einen aktiven Qiskit-Runtime-Job.
    • RUNNING: POST_PROCESSING: Die Function führt eine Nachverarbeitung der Ergebnisse durch. Dies kann Fehlerminderung, die Abbildung von Quantenergebnissen auf klassische und Ähnliches umfassen.
  • DONE: Das Programm ist abgeschlossen, und du kannst Ergebnisdaten mit job.results() abrufen.
  • ERROR: Das Programm wurde aufgrund eines Problems gestoppt. Verwende job.result(), um die Fehlermeldung abzurufen.
  • CANCELED: Das Programm wurde abgebrochen – entweder durch eine Nutzerin oder einen Nutzer, den Dienst oder den Server.
job.status()
'QUEUED'

Ergebnisse abrufen

Sobald ein Programm den Status DONE hat, kannst du job.results() verwenden, um das Ergebnis abzurufen. Das Ausgabeformat variiert je nach Function, daher solltest du die jeweilige Dokumentation beachten:

result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

Du kannst einen Job auch jederzeit abbrechen:

job.stop()
'Job has been stopped.'

Zuvor ausgeführte Jobs mit Qiskit Functions auflisten

Du kannst jobs() verwenden, um alle an Qiskit Functions übermittelten Jobs aufzulisten:

old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

Wenn du bereits die Job-ID für einen bestimmten Job hast, kannst du den Job mit catalog.get_job_by_id() abrufen:

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763

Fehlermeldungen abrufen

Wenn ein Programmstatus ERROR ist, verwende job.error_message(), um die Fehlermeldung wie folgt abzurufen:

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

Nächste Schritte

Empfehlungen