Saltar al contenido principal

Portar código a Qiskit Serverless

El siguiente ejemplo muestra cómo portar código existente para aprovechar Qiskit Serverless.

nota

El siguiente código asume que ya guardaste tus credenciales. Si no lo has hecho, sigue las instrucciones en Configura tu cuenta de IBM Cloud para autenticarte con tu clave de API.

Actualizar el experimento

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)

Subir a Qiskit Serverless

Sigue las instrucciones en la página Introducción a las funciones de Qiskit para autenticarte con tu clave de 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)

Salida

'transpile_remote_serverless'

Ejecutar remotamente en 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_id

Salida

'727e921d-512d-4b7d-af97-fe29e93ce7ea'

Próximos pasos

Recomendaciones
  • Lee un artículo en el que investigadores usaron Qiskit Serverless y la supercomputación cuántica centralizada para explorar la química cuántica.