Pular para o conteúdo principal
Este projeto está em fase beta. Encontrou um bug? Abra uma issue no GitHub. Tem uma pergunta ou ideia? Pergunte no Discussions — adoraríamos receber seu feedback!
Como está a qualidade da tradução nesta página?

Portar código para o Qiskit Serverless

dica

O Qiskit Serverless está sendo atualizado e seus recursos estão mudando rapidamente. Durante esta fase de desenvolvimento, encontre as notas de versão e a documentação mais recente na página do Qiskit Serverless GitHub.

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​

nota

Na versão Serverless, crie o serviço de runtime com get_runtime_service() (de qiskit_serverless) em vez de QiskitRuntimeService(), para que os jobs e sessões do IBM Quantum® Compute Service que ele iniciar sejam rastreados em relação ao job pai do Qiskit Serverless. Consulte Escreva seu primeiro programa Qiskit Serverless para obter detalhes.

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)

Upload to Qiskit Serverless​

Follow the instructions on the Introduction to Qiskit Functions page to authenticate with your API key.

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 centrada em computação quântica para explorar a química quântica.