Skip to main content
IBM Quantum Platform

Execute sua primeira carga de trabalho do Qiskit Serverless remotamente

  • O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.

    qiskit[all]~=1.4.0
    qiskit-ibm-runtime~=0.36.1
    qiskit-ibm-catalog~=0.4
    
Tip

Qiskit Serverless está recebendo uma atualização e seus recursos estão mudando rapidamente. Durante esta fase de desenvolvimento, encontre notas de lançamento e a documentação mais recente na página Qiskit ServerlessGitHub.

Esta seção explora como usar o site qiskit-ibm-catalog para listar os programas disponíveis no Qiskit Serverless, passar entradas para esses programas, executá-los remotamente, verificar seu status e recuperar resultados e registros.

Certifique-se de ter seguido o fluxo de trabalho descrito em “Escreva seu primeiro programa em Qiskit Serverless ” antes de começar.


Lista de programas disponíveis

Você pode usar QiskitServerless.list() para obter uma lista dos programas disponíveis para execução com o Qiskit Serverless. Isso inclui o arquivo transpile_remote_serverless.

from qiskit_ibm_catalog import QiskitServerless

serverless = QiskitServerless()
next(
    program
    for program in serverless.list()
    if program.title == "transpile_remote_serverless"
)

Output:

QiskitFunction(transpile_remote_serverless)

Execute um programa carregado e passe as entradas

Primeiro, configure suas entradas. Seu programa tem três entradas: circuits, backend, e optimization_level. Você pode usar o site random_circuit para criar 30 circuitos aleatórios:

from qiskit.circuit.random import random_circuit

qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)

Output:

Output of the previous code cell

Em seguida, use QiskitRuntimeService e least_busy para selecionar um backend:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)

Defina seu nível de otimização:

optimization_level = 3

Selecione seu programa com serverless.load('PROGRAM_NAME'):

transpile_remote_serverless = serverless.load("transpile_remote_serverless")

Em seguida, passe suas entradas e execute-o de forma pitônica da seguinte forma:

job = transpile_remote_serverless.run(
    circuits=qc_random,
    backend=backend.name,
    optimization_level=optimization_level,
)
job.job_id

Output:

'118256c5-bbb0-4ea8-9e9f-51aac2220aef'

Verificar o status do trabalho

Com o Qiskit Serverless job_id, você pode verificar o status dos trabalhos em execução. Isso inclui os seguintes status:

  • QUEUED: O programa remoto está na fila do Qiskit Serverless. Atualmente, a prioridade da fila é baseada no quanto você usou o Qiskit Serverless
  • INITIALIZING: O programa remoto está sendo iniciado; isso inclui a configuração do ambiente remoto e a instalação de dependências
  • RUNNING: O programa está em execução. Nesse estágio, se você tiver saídas print() em seu programa, poderá recuperar os registros usando job.logs()
  • DONE: O programa está concluído e você pode recuperar os dados armazenados em save_result() com job.results()

Você também pode definir status de trabalho mais detalhados em Gerenciar recursos de dados e computação do Qiskit Serverless.

job.status()

Output:

'QUEUED'
Tip

Atualmente, a tabela de cargas de trabalho do IBM Quantum reflete apenas as cargas de trabalho do Qiskit Runtime. Use job.status() para ver o status atual de sua carga de trabalho do Qiskit Serverless.

Você executou com sucesso seu primeiro programa Qiskit Serverless!


Recuperar registros e resultados

Conforme mencionado anteriormente, depois que um programa é RUNNING, você pode usar job.logs() para buscar registros criados a partir de saídas print() :

logs = job.logs()
print(logs)

Output:

No logs yet.

A qualquer momento, você também pode cancelar um trabalho:

job.stop()

Output:

'Job has been stopped.'

Quando um programa é DONE, você pode usar job.results() para buscar o resultado armazenado em save_result():

# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
    job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()

Output:

{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
  <qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}

Listar tarefas executadas anteriormente com Qiskit Serverless

Você pode usar jobs() para listar todos os trabalhos enviados ao Qiskit Serverless:

old_jobs = serverless.jobs()
old_jobs

Output:

[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
 <Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
 <Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
 <Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
 <Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
 <Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
 <Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
 <Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
 <Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
 <Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]

Próximas etapas

Recomendações
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.