Codice porto - Qiskit Serverless
Qiskit Serverless sta subendo un aggiornamento e le sue caratteristiche stanno cambiando rapidamente. Durante questa fase di sviluppo, è possibile trovare le note di rilascio e la documentazione più recente alla pagina Qiskit ServerlessGitHub.
L'esempio seguente mostra come portare il codice esistente per sfruttare Qiskit Serverless.
Il codice seguente presuppone che le credenziali siano state salvate. Se non l'avete fatto, seguite le istruzioni in Impostazione dell'account IBM Cloud per autenticarvi con la vostra chiave API.
Aggiorna l'esperimento
Nella versione Serverless, creare il servizio di runtime utilizzando get_runtime_service() (da qiskit_serverless) anziché QiskitRuntimeService(), in modo che i lavori e le sessioni del servizio IBM Quantum® Compute che esso avvia vengano tracciati in relazione al lavoro padre Qiskit Serverless. Per ulteriori dettagli, consulta la guida “Scrivi il tuo primo programma in 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())Carica su Qiskit Serverless
Seguire le istruzioni riportate nella pagina Introduzione alle funzioni di Qiskit per autenticarsi con la propria chiave API.
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)Emissione
'transpile_remote_serverless'Eseguito in remoto 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_idEmissione
'727e921d-512d-4b7d-af97-fe29e93ce7ea'Passi successivi
- Leggete un articolo in cui i ricercatori hanno utilizzato Qiskit Serverless e il supercomputing quantum-centrico per esplorare la chimica quantistica.