Skip to main content
IBM Quantum Platform

Führen Sie Ihre erste „ Qiskit Serverless “-Workload remote aus

  • Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt. Wir empfehlen die Verwendung dieser oder neuerer Versionen.

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

Qiskit Serverless wird aktualisiert, und seine Funktionen ändern sich schnell. Während dieser Entwicklungsphase finden Sie Release Notes und die aktuellste Dokumentation auf der Seite „ Qiskit Serverless “ () unter GitHub.

In diesem Abschnitt wird erläutert, wie Sie qiskit-ibm-catalog verwenden, um in Qiskit Serverless verfügbare Programme aufzulisten, Eingaben an diese Programme zu übergeben, sie ferngesteuert auszuführen, ihren Status zu überprüfen und Ergebnisse und Protokolle abzurufen.

Vergewissern Sie sich, dass Sie den Arbeitsablauf unter „Schreiben Sie Ihr erstes Programm in Qiskit Serverless “ befolgt haben, bevor Sie beginnen.


Liste der verfügbaren Programme

Mit können Sie eine Liste der QiskitServerless.list() verfügbaren Programme abrufen, die mit „ Qiskit Serverless “ ausgeführt werden können. Dazu gehören auch die zuvor hochgeladenen transpile_remote_serverless.

from qiskit_ibm_catalog import QiskitServerless

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

Output:

QiskitFunction(transpile_remote_serverless)

Ein hochgeladenes Programm ausführen und Eingaben übergeben

Richten Sie zunächst Ihre Eingänge ein. Ihr Programm hat drei Eingänge: circuits, backend, und optimization_level. Mit random_circuit können Sie 30 zufällige Schaltungen 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)

Output:

Output of the previous code cell

Wählen Sie dann mit QiskitRuntimeService und least_busy eine backend aus:

from qiskit_ibm_runtime import QiskitRuntimeService

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

Legen Sie Ihre Optimierungsstufe fest:

optimization_level = 3

Wählen Sie Ihr Programm mit serverless.load('PROGRAM_NAME'):

transpile_remote_serverless = serverless.load("transpile_remote_serverless")

Als Nächstes übergeben Sie Ihre Eingaben und führen 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

Output:

'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

Auftragsstatus überprüfen

Mit Ihrem Qiskit Serverless job_id können Sie den Status der laufenden Aufträge überprüfen. Dazu gehören die folgenden Status:

  • QUEUED: Das entfernte Programm befindet sich in der Qiskit Serverless-Warteschlange. Die Priorität der Warteschlange basiert derzeit darauf, wie oft Sie Qiskit Serverless verwendet haben
  • INITIALIZING: Das entfernte Programm wird gestartet; dies beinhaltet die Einrichtung der entfernten Umgebung und die Installation von Abhängigkeiten
  • RUNNING: Das Programm wird ausgeführt. Wenn Sie zu diesem Zeitpunkt print() Ausgaben in Ihrem Programm haben, können Sie die Protokolle mit job.logs()
  • DONE: Das Programm ist abgeschlossen, und Sie können die in save_result() gespeicherten Daten mit job.results()

Sie können auch detailliertere Auftragsstatus unter Verwalten von Qiskit Serverless-Rechen- und Datenressourcen festlegen.

job.status()

Output:

'QUEUED'
Tip

Derzeit werden in der Tabelle „ IBM Quantum -Workloads“ ausschließlich Workloads des „ IBM Quantum Compute Service“ angezeigt. Verwenden Sie, job.status() um den aktuellen Status Ihrer „ Qiskit Serverless “-Workload anzuzeigen.

Sie haben Ihr erstes Qiskit Serverless-Programm erfolgreich ausgeführt!


Protokolle und Ergebnisse abrufen

Wie bereits erwähnt, können Sie, sobald ein Programm RUNNING ist, job.logs() verwenden, um Protokolle zu holen, die von print() Ausgaben erstellt wurden:

logs = job.logs()
print(logs)

Output:

No logs yet.

Sie können einen Auftrag auch jederzeit abbrechen:

job.stop()

Output:

'Job has been stopped.'

Sobald ein Programm DONE ist, können Sie 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()

Output:

{'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>]}

Liste der zuvor ausgeführten Jobs mit „ Qiskit Serverless “

Sie können jobs() verwenden, um alle an Qiskit Serverless übermittelten Aufträge aufzulisten:

old_jobs = serverless.jobs()
old_jobs

Output:

[<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
  • Entdecken Sie die Ihrem Programm zur Verfügung stehenden Tools für die Datenverarbeitung und das Datenmanagement, einschließlich der Parallelisierung.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.