Monitorar ou cancelar um trabalho
Este guia explica como monitorar o status dos trabalhos, visualizar informações de uso e cancelar trabalhos. Você pode acessar essas informações tanto pelo site IBM Quantum® Platform quanto programaticamente, usando o Qiskit.
O código desta página foi desenvolvido com base nos seguintes requisitos. Recomendamos o uso dessas versões ou versões mais recentes.
qiskit-ibm-runtime~=0.46.1
Monitorar uma tarefa
Utilize esses métodos para verificar o status dos trabalhos enviados, obter os resultados e visualizar detalhes relacionados ao trabalho e à sua execução.
A instância da tarefa oferece vários métodos para monitoramento:
Método | Descrição |
|---|---|
job.status() | Verifique o status atual do trabalho |
job.job_id() | Obter o identificador exclusivo do trabalho |
job.result() | Recuperar os resultados da tarefa (chamada que bloqueia até a conclusão) |
job.wait_for_final_state() | Bloquear até que a tarefa chegue a um estado final |
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve a job by ID
job = service.job("<job_id>")
# Get job ID (useful for saving for later retrieval)
print(f"Job ID: {job.job_id()}")
# Check current status
print(f"Status: {job.status()}")
# Wait for job to complete (blocking call)
job.wait_for_final_state()
print("Job completed")
# Get results
results = job.result()
print(results)Acesse a página “Cargas de trabalho” e verifique a coluna “Status”. Seu status profissional aparece como uma das seguintes opções:
- Em espera : o trabalho está aguardando para ser executado em uma QPU
- Em andamento : o trabalho está sendo executado no momento
- Concluído : O trabalho foi concluído com sucesso
- Falha : Ocorreu um erro na tarefa
- Cancelado : O usuário cancelou o trabalho
Clique no nome da tarefa ou na linha correspondente para abrir a visualização detalhada, onde você poderá ver informações como os resultados e eventuais mensagens de erro.
Por que um trabalho permanece no status “Em andamento”
Você pode perceber que uma tarefa (seja no modo de tarefa ou no modo em lote) que você esperava que levasse apenas alguns segundos permanece no status “Em andamento ” (denominado RUNNING no Qiskit) por muito mais tempo. Isso é normal e não significa que o trabalho esteja consumindo todo esse tempo como uso. Isso ocorre devido à forma como os trabalhos são agendados em uma QPU:
- Toda tarefa requer um pré-processamento clássico antes de poder ser executada na QPU. Um trabalho passa para o estado “Em andamento (
RUNNING)” assim que esse processamento clássico começa — e não quando começa a ser executado na QPU. - A maior parte desse processamento clássico é executada em paralelo, de modo que vários trabalhos podem estar em andamento ao mesmo tempo.
- No entanto, apenas uma tarefa por vez pode ser executada na QPU. Quando vários trabalhos concluem seu processamento clássico e estão prontos para serem executados, eles precisam aguardar sua vez para acessar a QPU. Isso é conhecido como contenção da QPU. Quando o nível de contenção é alto, um trabalho pode permanecer no estado “Em andamento” por um tempo visivelmente maior do que os poucos segundos de tempo de QPU de que realmente precisa.
- Também pode ocorrer conflito quando uma tarefa de manutenção do sistema, como a calibração, está sendo executada na QPU. Seu trabalho permanecerá no status “Em andamento” até que a tarefa de manutenção seja concluída e a QPU fique disponível.
Por isso, o tempo real decorrido que uma tarefa passa na fase “Em andamento” não é o mesmo que seu tempo de uso. Tanto a estimativa de uso quanto o tempo máximo de execução se baseiam exclusivamente no tempo em que a QPU fica reservada para executar seu trabalho e, portanto, excluem o processamento clássico multithread descrito acima. Um longo período no status “Em andamento” não aumenta o uso ou o custo registrado.
O modo de sessão é diferente
O comportamento descrito acima se aplica ao modo de tarefa e ao modo em lote. No modo de sessão, enquanto a janela da sessão estiver ativa, o usuário tem acesso exclusivo ao backend e nenhum outro trabalho pode ser executado, incluindo trabalhos de calibração. Portanto, qualquer conflito de QPU ocorre apenas entre os trabalhos da sua própria sessão. Além disso, como a capacidade da QPU é reservada durante toda a sessão, o uso da sessão é medido como o tempo decorrido enquanto a sessão permanece ativa, independentemente de os trabalhos estarem em execução ativa. Consulte “Utilização da carga de trabalho” para obter mais informações.
Ver uso restante
Acompanhe quanto ainda resta da cota de uso do seu plano.
Use o service.usage() método para obter informações de uso da sua instância ativa no momento.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)Acesse a página “Instâncias” e selecione a aba associada ao plano que você deseja verificar. São exibidos o tempo total utilizado e o tempo total restante do seu plano.
Visualizar métricas do trabalho
Obtenha uma visão geral dos seus envios de tarefas, incluindo métricas de carga de trabalho por lote e por sessão.
Use o método service.jobs() com filtros para obter informações sobre os trabalhos enviados, como quantos foram enviados, quais são seus status e quando foram criados. O exemplo a seguir recupera todos os trabalhos enviados nos últimos sete dias e calcula o uso total desses trabalhos.
from datetime import datetime, timedelta
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve all jobs in the last 7 days
seven_days_ago = datetime.now() - timedelta(days=7)
jobs = service.jobs(limit=None, created_after=seven_days_ago)
# To retrieve all jobs in a Session or Batch, use the session_id filter
# jobs = service.jobs(session_id="<session id>")
total_usage = 0
for job in jobs:
total_usage += job.usage()
print(f"{len(jobs)} jobs were submitted in the last 7 days.")
print(f"Total usage was {total_usage} seconds")Acesse a página “Análises” para visualizar e baixar dados, como os seguintes:
- Uso total
- Uso filtrado por instância, computador quântico e usuário
- Contagem das cargas de trabalho de tarefas, lotes e sessões
Observação : você só pode acessar a página “Analytics” das contas das quais é titular ou que gerencia.
Recuperar os resultados do trabalho posteriormente
Você pode salvar os IDs das tarefas e recuperar os resultados mais tarde, mesmo depois de encerrar sua sessão.
Se você salvou o ID do trabalho ao enviá-lo, use service.job(<job_id>) para recuperá-lo posteriormente. Se você não tiver o ID do trabalho ou se quiser recuperar vários trabalhos de uma só vez (incluindo trabalhos de QPUs desativadas), use service.jobs() em vez disso, com filtros opcionais.
Consulte a documentação da API QiskitRuntimeService.jobs para conhecer os filtros disponíveis.
Este exemplo demonstra como recuperar os resultados mais recentes gerados em um backend específico.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Uncomment the next line to retrieve a specific job by ID
# job = service.job("<job_id>")
# Optionally retrieve multiple jobs with filters
# Use `limit` to retrieve a specific number of jobs. The default `limit` is 10.
my_backend = "<your-backend>"
recent_jobs = service.jobs(backend_name=my_backend, limit=10)
print(f"Retrieved {len(recent_jobs)} recent jobs from {my_backend}\n")
# Get results from all jobs
for job in recent_jobs:
print(f"Job ID: {job.job_id()}")
print(f"Status: {job.status()}")
# Retrieve results if the job is complete
if str(job.status()) == "DONE":
try:
results = job.result()
print(f"Results: {results}")
except Exception as e:
print(f"Error retrieving results: {e}")
else:
print("Results: Not available (job still running or failed)")
print()- Acesse a página “Cargas de trabalho ”.
- Use as opções de pesquisa ou filtro para encontrar sua vaga por nome, data ou status.
- Clique na tarefa para visualizar seus resultados e detalhes.
Recuperar propriedades do backend
Você pode usar job.properties() para recuperar propriedades do backend, incluindo taxas de erro, no momento da execução da tarefa.
Este exemplo demonstra como recuperar propriedades do backend que estavam em vigor no momento em que um trabalho foi executado, incluindo os tempos de / e as taxas de erro para um qubit específico (0).
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve a specific job by ID
job = service.job("<job_id>")
print(f"Job ID: {job.job_id()}")
print(f"Backend: {job.backend}\n")
# Fetch backend properties at the time of job execution
properties = job.properties()
if properties:
print("Backend Properties at Job Execution Time:")
print("=" * 60)
# Get T1 (relaxation time) for qubit 0
t1 = properties.t1(0)
print(f"Qubit 0 T1 (relaxation time): {t1}")
# Get T2 (dephasing time) for qubit 0
t2 = properties.t2(0)
print(f"Qubit 0 T2 (dephasing time): {t2}")
# Get readout error for qubit 0
readout_error = properties.readout_error(0)
print(f"Qubit 0 readout error: {readout_error}")
# Get all properties for a specific qubit
print("All properties for qubit 0:")
qubit_props = properties.qubit_property(0)
for prop_name, prop_value in qubit_props.items():
print(f" {prop_name}: {prop_value}")
else:
print("No properties available for this job")service.jobs() também retorna trabalhos executados a partir do pacote obsoleto qiskit-ibm-provider . Os trabalhos enviados pelo pacote qiskit-ibmq-provider mais antigo (também obsoleto) não estão mais disponíveis.
É possível visualizar os dados de calibração do backend tanto no momento da execução da tarefa quanto na criação da tarefa.
- Acesse a página “Cargas de trabalho”
- Clique em uma carga de trabalho para abrir a página de detalhes dela
- Em “Computador quântico”, clique em “Exibir histórico de calibração”
- Use o menu suspenso para alterar a visualização dos dados de “No início da execução da tarefa” para “Na criação da tarefa”
Cancelar uma Tarefa
Cancelar um trabalho que está na fila ou em execução. Uma vez que um trabalho seja cancelado, ele não pode ser retomado.
Use o método job.cancel() para cancelar um trabalho programaticamente.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Retrieve the job
job = service.job("<job_id>")
# Cancel the job
job.cancel()
print(f"Job {job.job_id()} has been canceled")- Na tabela de cargas de trabalho : clique no menu de opções adicionais no final da linha da carga de trabalho que você deseja cancelar e selecione “Cancelar ”.
- Na página de detalhes da tarefa : clique na carga de trabalho para abrir sua página de detalhes, use o menu suspenso “Ações ” na parte superior e selecione “Cancelar ”.
Próximas etapas
- Consulte a referência da API
QiskitRuntimeServicepara conhecer outros métodos de gerenciamento de tarefas. - Explore os modos de execução para entender os tipos de carga de trabalho em lote e por sessão.