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
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:
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 = 3Wä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_idOutput:
'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 habenINITIALIZING: Das entfernte Programm wird gestartet; dies beinhaltet die Einrichtung der entfernten Umgebung und die Installation von AbhängigkeitenRUNNING: Das Programm wird ausgeführt. Wenn Sie zu diesem Zeitpunktprint()Ausgaben in Ihrem Programm haben, können Sie die Protokolle mitjob.logs()DONE: Das Programm ist abgeschlossen, und Sie können die insave_result()gespeicherten Daten mitjob.results()
Sie können auch detailliertere Auftragsstatus unter Verwalten von Qiskit Serverless-Rechen- und Datenressourcen festlegen.
job.status()Output:
'QUEUED'
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_jobsOutput:
[<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
- Entdecken Sie die Ihrem Programm zur Verfügung stehenden Tools für die Datenverarbeitung und das Datenmanagement, einschließlich der Parallelisierung.