Port-Code zu „ Qiskit Serverless “
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.
Das folgende Beispiel zeigt, wie Sie vorhandenen Code portieren können, um Qiskit Serverless zu nutzen.
Der folgende Code geht davon aus, dass Sie Ihre Anmeldedaten gespeichert haben. Wenn Sie dies noch nicht getan haben, folgen Sie den Anweisungen unter Einrichten Ihres IBM Cloud Kontos, um sich mit Ihrem API-Schlüssel zu authentifizieren.
Aktualisieren Sie das Experiment
Erstellen Sie in der serverlosen Version den Laufzeitservice mit get_runtime_service() (aus qiskit_serverless) anstelle von QiskitRuntimeService(), damit die von ihm gestarteten „ IBM Quantum® Compute “-Service-Jobs und -Sitzungen dem übergeordneten „ Qiskit Serverless “-Job zugeordnet werden. Weitere Informationen finden Sie unter „Schreiben Sie Ihr erstes Programm für Qiskit Serverless “.
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit
qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
optimization_level = 3
service = QiskitRuntimeService(channel="ibm_quantum_platform")
backend = service.get_backend(backend_name)
pass_manager = generate_preset_pass_manager(
optimization_level=optimization_level, backend=backend
)
# @distribute_task(target={"cpu": 1})
def transpile_parallel(circuit, pass_manager):
"""Distributed transpilation for an abstract circuit into an ISA circuit for a given backend."""
isa_circuit = pass_manager.run(circuit)
return isa_circuit
transpiled_circuits = [
transpile_parallel(circuit, pass_manager)
for circuit in circuits
]
print(transpiled_circuits)# transpile_remote.py
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_serverless import get_arguments, save_result, distribute_task, get, get_runtime_service
# Get program arguments
arguments = get_arguments()
circuits = arguments.get("circuits")
backend_name = arguments.get("backend_name")
optimization_level = arguments.get("optimization_level")
pass_manager = generate_preset_pass_manager(
optimization_level=optimization_level, backend=backend_name
)
# Distribute task across workers
@distribute_task(target={"cpu": 1})
def transpile_parallel(circuit, pass_manager):
"""Distributed transpilation for an abstract circuit into an ISA circuit for a given backend."""
isa_circuit = pass_manager.run(circuit)
return isa_circuit
try:
# Get backend
service = get_runtime_service()
backend = service.get_backend(backend_name)
# run distributed tasks as async function
# we get task references as a return type
sample_task_references = [
transpile_parallel(circuit, pass_manager)
for circuit in circuits
]
# now we need to collect results from task references
results = get(sample_task_references)
# Return results
save_result({
"transpiled_circuits": results
})
except Exception as e:
# Exception handling
import traceback
print(traceback.format_exc())Hochladen auf Qiskit Serverless
Folgen Sie den Anweisungen auf der Seite Einführung in die Qiskit-Funktionen, um sich mit Ihrem API-Schlüssel zu authentifizieren.
from qiskit_ibm_catalog import QiskitServerless, QiskitFunction
# Authenticate to the remote cluster and submit the pattern for remote execution.
serverless = QiskitServerless()
transpile_remote_demo = QiskitFunction(
title="transpile_remote_serverless",
entrypoint="transpile_remote.py",
working_dir="./source_files/",
)
serverless.upload(transpile_remote_demo)Ausgabe
'transpile_remote_serverless'Fernsteuerung in „ Qiskit Serverless “
from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService
# Setup inputs
qc_random = [(random_circuit(20, 20, measure=True)) for _ in range(30)]
backend = "ibm_brisbane"
optimization_level = 3
# Running program
transpile_remote_serverless = serverless.load('transpile_remote_serverless')
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend,
optimization_level=optimization_level
)
job.job_idAusgabe
'727e921d-512d-4b7d-af97-fe29e93ce7ea'Nächste Schritte
- Lesen Sie einen Artikel, in dem Forscher Qiskit Serverless und quantenzentriertes Supercomputing zur Erforschung der Quantenchemie einsetzen.