Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

Deine erste Qiskit Serverless-Arbeitslast remote ausführen

Paketversionen

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

qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
tipp

Qiskit Serverless wird gerade grundlegend überarbeitet, und seine Funktionen ändern sich schnell. Während dieser Entwicklungsphase findest du Release Notes und die aktuellste Dokumentation auf der Qiskit Serverless GitHub-Seite.

Dieser Abschnitt zeigt, wie du qiskit-ibm-catalog verwendest, um in Qiskit Serverless verfügbare Programme aufzulisten, Eingaben an diese Programme zu übergeben, sie remote auszuführen, ihren Status zu prüfen sowie Ergebnisse und Logs abzurufen.

Stelle sicher, dass du den Workflow in Dein erstes Qiskit Serverless-Programm schreiben abgeschlossen hast, bevor du beginnst.

Verfügbare Programme auflisten​

Du kannst QiskitServerless.list() verwenden, um eine Liste der verfügbaren Programme abzurufen, die du mit Qiskit Serverless ausführen kannst. Dazu gehört das zuvor hochgeladene transpile_remote_serverless.

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit", "qiskit_ibm_catalog": "qiskit-ibm-catalog", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_catalog import QiskitServerless

serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)

Ein hochgeladenes Programm ausführen und Eingaben übergeben​

Zuerst richtest du deine Eingaben ein. Dein Programm hat drei Eingaben: circuits, backend und optimization_level. Du kannst random_circuit verwenden, um 30 zufällige Circuits zu erstellen:

from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)

Ausgabe der vorherigen Code-Zelle

Verwende anschließend QiskitRuntimeService und least_busy, um ein backend auszuwählen:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)

Lege deinen Optimierungsgrad fest:

optimization_level = 3

Wähle dein Programm mit serverless.load('PROGRAM_NAME'):

transpile_remote_serverless = serverless.load("transpile_remote_serverless")

Übergib dann deine Eingaben und führe es auf pythonische Weise wie folgt aus:

job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

Job-Status prüfen​

Mit deiner Qiskit Serverless job_id kannst du den Status laufender Jobs prüfen. Dabei sind folgende Statuswerte möglich:

  • QUEUED: Das Remote-Programm befindet sich in der Qiskit Serverless-Warteschlange. Die Warteschlangenpriorität basiert derzeit darauf, wie viel du Qiskit Serverless bereits genutzt hast

  • INITIALIZING: Das remote Programm startet; dazu gehört das Einrichten der Remote-Umgebung und das Installieren von Abhängigkeiten

  • RUNNING: Das Programm wird ausgeführt. In dieser Phase kannst du, wenn dein Programm print()-Ausgaben enthält, Logs mit job.logs() abrufen

  • DONE: Das Programm ist abgeschlossen, und du kannst in save_result() gespeicherte Daten mit job.results() abrufen

Weitere detaillierte Job-Statuswerte kannst du unter Qiskit Serverless-Compute- und Datenressourcen verwalten festlegen.

job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
tipp

Derzeit spiegelt die IBM Quantum-Arbeitslasttabelle nur IBM Quantum Compute Service-Arbeitslasten wider. Verwende job.status(), um den aktuellen Status deiner Qiskit Serverless-Arbeitslast zu sehen.

Du hast dein erstes Qiskit Serverless-Programm erfolgreich ausgeführt!

Logs und Ergebnisse abrufen​

Wie bereits erwähnt, kannst du, sobald ein Programm RUNNING ist, job.logs() verwenden, um Logs aus print()-Ausgaben abzurufen:

logs = job.logs()
print(logs)
No logs yet.

Du kannst einen Job auch jederzeit abbrechen:

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

Sobald ein Programm DONE ist, kannst du job.results() verwenden, um das in save_result() gespeicherte Ergebnis abzurufen:

# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}

Zuvor mit Qiskit Serverless ausgeführte Jobs auflisten​

Du kannst jobs() verwenden, um alle an Qiskit Serverless gesendeten Jobs aufzulisten:

old_jobs = serverless.jobs()
old_jobs
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]

Nächste Schritte​

Empfehlungen