Pular para o conteúdo principal

Portar código para o Qiskit Serverless

O exemplo a seguir demonstra como portar código existente para aproveitar o Qiskit Serverless.

nota

O código a seguir assume que você já salvou suas credenciais. Caso ainda não tenha feito isso, siga as instruções em Configure sua conta IBM Cloud para autenticar com sua chave de API.

Atualize o 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)

Fazer upload para o Qiskit Serverless

Siga as instruções na página Introdução às Funções Qiskit para autenticar com sua chave 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)

Saída

'transpile_remote_serverless'

Executar remotamente no 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

Saída

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

Próximos passos

Recomendações
  • Leia um artigo em que pesquisadores usaram o Qiskit Serverless e a supercomputação quântica centrada em quantum para explorar a química quântica.