Monitorare o annullare un lavoro
Questa guida spiega come monitorare lo stato dei lavori, visualizzare le informazioni sull'utilizzo e annullare i lavori. È possibile accedere a queste informazioni sia tramite IBM Quantum® Platform sia a livello di programmazione utilizzando Qiskit.
Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.
qiskit-ibm-runtime~=0.46.1
Monitorare un lavoro
Utilizza questi metodi per verificare lo stato dei lavori inviati, recuperare i risultati e visualizzare i dettagli relativi al lavoro e alla sua esecuzione.
L'istanza di lavoro offre diversi metodi di monitoraggio:
Metodo | Descrizione |
|---|---|
job.status() | Verifica lo stato attuale del lavoro |
job.job_id() | Ottieni l'identificativo univoco del lavoro |
job.result() | Recupera i risultati del processo (chiamata in attesa fino al completamento) |
job.wait_for_final_state() | Bloccare fino a quando il processo non raggiunge uno stato finale |
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)Accedi alla pagina "Workloads" e controlla la colonna "Stato". Il tuo stato lavorativo può essere uno dei seguenti:
- In sospeso : il processo è in attesa di essere eseguito su una QPU
- In corso : il processo è attualmente in esecuzione
- Completato : lavoro portato a termine con successo
- Errore : si è verificato un errore durante l'esecuzione del processo
- Annullato : l'utente ha annullato il lavoro
Fai clic sul nome del processo o sulla riga per aprire la vista dettagliata, dove potrai visualizzare informazioni quali i risultati ed eventuali messaggi di errore.
Perché un'attività rimane "In corso"
Potresti notare che un’operazione (sia in modalità job che in modalità batch) che ti aspetti duri solo pochi secondi rimane nello stato “In corso ” (denominato RUNNING in Qiskit) per molto più tempo. È normale, e non significa che l'attività stia occupando tutto quel tempo in termini di utilizzo. Ciò accade a causa del modo in cui i processi vengono pianificati su una QPU:
- Ogni processo richiede una fase di pre-elaborazione standard prima di poter essere eseguito sulla QPU. Un lavoro passa allo stato “In corso ” (
RUNNING) non appena ha inizio questa elaborazione classica — non quando inizia l’esecuzione sulla QPU. - La maggior parte di queste operazioni di elaborazione classica viene eseguita in parallelo, quindi è possibile che più processi siano in corso contemporaneamente.
- Tuttavia, sulla QPU può essere eseguito un solo processo alla volta. Quando diversi processi hanno completato l'elaborazione classica e sono pronti per essere eseguiti, devono attendere il proprio turno per accedere alla QPU. Questo fenomeno è noto come contesa QPU. Quando il livello di contesa è elevato, un processo può rimanere in corso per un tempo notevolmente più lungo rispetto ai pochi secondi di tempo QPU di cui ha effettivamente bisogno.
- Possono verificarsi situazioni di contesa anche quando sulla QPU è in esecuzione un’attività di manutenzione del sistema, come ad esempio la calibrazione. Il tuo lavoro rimane " In corso" fino al completamento dell'attività di manutenzione e alla disponibilità della QPU.
Per questo motivo, il tempo effettivo trascorso da un processo nello stato “In corso” non corrisponde al suo tempo di utilizzo. Sia la stima dei tempi di utilizzo che il tempo massimo di esecuzione si basano esclusivamente sul tempo in cui la QPU è riservata all'esecuzione del tuo lavoro e, pertanto, escludono l'elaborazione classica multithread descritta sopra. Un tempo di elaborazione prolungato non comporta un aumento dell'utilizzo o dei costi riportati.
La modalità di sessione è diversa
Il comportamento descritto in precedenza si applica sia alla modalità "job" che alla modalità "batch". In modalità sessione, mentre la finestra della sessione è attiva, l'utente ha accesso esclusivo al backend e nessun altro processo può essere eseguito, compresi i processi di calibrazione. Pertanto, eventuali conflitti relativi alla QPU si verificano solo tra i processi della propria sessione. Inoltre, poiché la capacità della QPU viene riservata per tutta la durata della sessione, l'utilizzo della sessione viene misurato in base al tempo trascorso mentre la sessione rimane attiva, indipendentemente dal fatto che i processi siano effettivamente in esecuzione. Per ulteriori informazioni, consultare la sezione " Utilizzo del carico di lavoro".
Visualizza utilizzo residuo
Tieni traccia di quanto rimane della quota di utilizzo del tuo piano.
Utilizza il metodo service.usage() per ottenere informazioni sull'utilizzo dell'istanza attualmente attiva.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)Accedi alla pagina "Istanze" e seleziona la scheda relativa al piano che desideri controllare. Vengono visualizzati il tempo totale utilizzato e il tempo totale rimanente del tuo piano.
Visualizza le metriche relative alle offerte di lavoro
Ottieni una panoramica delle tue richieste di elaborazione, comprese le metriche relative al carico di lavoro per batch e per sessione.
Utilizza il metodo service.jobs() con i filtri per recuperare informazioni sui tuoi lavori inviati, ad esempio quanti ne sono stati inviati, quali sono i loro stati e quando sono stati creati. L'esempio seguente recupera tutti i lavori inviati negli ultimi sette giorni e calcola l'utilizzo totale di tali lavori.
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")Accedi alla pagina "Analisi" per visualizzare e scaricare dati come quelli riportati di seguito:
- Utilizzo totale
- Utilizzo filtrato per istanza, computer quantistico e utente
- Conteggio dei carichi di lavoro relativi a processi, batch e sessioni
Nota : è possibile accedere alla pagina "Analytics" solo per gli account di cui sei titolare o che gestisci.
Recuperare i risultati del lavoro in un secondo momento
È possibile salvare gli ID dei lavori e recuperare i risultati in un secondo momento, anche dopo aver chiuso la sessione.
Se hai salvato l'ID del lavoro al momento dell'invio, utilizzalo service.job(<job_id>) per recuperarlo in un secondo momento. Se non disponi dell'ID del processo, oppure se desideri recuperare più processi contemporaneamente (compresi quelli provenienti da QPU dismesse), utilizza service.jobs() invece questa opzione, con filtri opzionali.
Consulta la documentazione dell'API QiskitRuntimeService.jobs per conoscere i filtri disponibili.
Questo esempio illustra come recuperare i risultati più recenti ottenuti su un backend specifico.
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()- Vai alla pagina "Workloads".
- Utilizza le opzioni di ricerca o di filtro per trovare il tuo lavoro in base al nome, alla data o allo stato.
- Clicca sul lavoro per visualizzarne i risultati e i dettagli.
Recupera le proprietà del backend
È possibile utilizzare job.properties() per recuperare le proprietà del backend, compresi i tassi di errore, al momento dell'esecuzione del processo.
Questo esempio illustra come recuperare le proprietà del backend valide al momento dell'esecuzione di un lavoro, inclusi i tempi di / e i tassi di errore relativi a uno specifico qubit (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() restituisce anche i lavori eseguiti dal pacchetto deprecato qiskit-ibm-provider . I lavori inviati dal vecchio pacchetto (anch'esso deprecato) qiskit-ibmq-provider non sono più disponibili.
È possibile visualizzare i dati di calibrazione del backend sia al momento dell'esecuzione del processo, sia al momento della sua creazione.
- Vai alla pagina "Carichi di lavoro"
- Fai clic su un carico di lavoro per aprire la pagina dei dettagli
- Nella sezione "Computer quantistico", fare clic su "Visualizza cronologia delle calibrazioni"
- Utilizza il menu a tendina per passare dalla visualizzazione dei dati "All'avvio dell'esecuzione del processo" a "Al momento della creazione del processo"
Annulla un lavoro
Annulla un processo in coda o in esecuzione. Una volta annullato, un lavoro non può essere ripreso.
Utilizzare il metodo job.cancel() per annullare un processo a livello di programmazione.
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")- Dalla tabella dei carichi di lavoro : fare clic sul menu a tendina alla fine della riga corrispondente al carico di lavoro che si desidera annullare, quindi selezionare Annulla.
- Dalla pagina dei dettagli del lavoro : clicca sul carico di lavoro per aprirne la pagina dei dettagli, utilizza il menu a tendina "Azioni" nella parte superiore e seleziona "Annulla".
Passi successivi
- Consulta la documentazione di riferimento dell'API
QiskitRuntimeServiceper ulteriori metodi di gestione dei lavori. - Esplora le modalità di esecuzione per comprendere i tipi di carico di lavoro in batch e a sessione.