Sledování nebo zrušení úlohy
Tento průvodce vysvětluje, jak sledovat stav úlohy, zobrazovat informace o využití a rušit úlohy. K těmto informacím máš přístup jak přes IBM Quantum® Platform, tak programově pomocí Qiskit.
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto nebo novější verze.
qiskit-ibm-runtime~=0.46.1
Sledování úlohy
Pomocí těchto metod můžeš zkontrolovat stav svých odeslaných úloh, získat výsledky a zobrazit podrobnosti týkající se úlohy a jejího provádění.
- Sledování úlohy pomocí Qiskit
- Sledování úlohy na IBM Quantum Platform
Instance úlohy poskytuje několik metod pro sledování:
| Metoda | Popis |
|---|---|
job.status() | Zkontroluje aktuální stav úlohy |
job.job_id() | Získá jedinečný identifikátor úlohy |
job.result() | Získá výsledky úlohy (blokující volání až do dokončení) |
job.wait_for_final_state() | Blokuje, dokud úloha nedosáhne konečného stavu |
Přejdi na stránku Workloads a zkontroluj sloupec Status. Stav tvé úlohy se zobrazí jako jeden z následujících:
- Pending: Úloha čeká na spuštění na QPU
- In progress: Úloha se právě provádí
- Completed: Úloha byla úspěšně dokončena
- Failed: Při úloze došlo k chybě
- Canceled: Uživatel úlohu zrušil
Klikni na název úlohy nebo na řádek a otevři podrobné zobrazení, kde uvidíš informace jako výsledky a případné chybové zprávy.
Proč úloha zůstává ve stavu „In progress“
Můžeš si všimnout, že úloha (ať už v režimu úlohy nebo dávkovém režimu), u které očekáváš, že bude trvat jen několik sekund, zůstává ve stavu In progress (v Qiskit nazývaném RUNNING) mnohem déle. To je normální a neznamená to, že úloha po celou tuto dobu spotřebovává využití. Je to dáno tím, jak se úlohy plánují na QPU:
-
Každá úloha vyžaduje před spuštěním na QPU klasické předzpracování. Úloha přejde do stavu In progress (
RUNNING), jakmile toto klasické zpracování začne – nikoli až se začne provádět na QPU. -
Většina tohoto klasického zpracování probíhá paralelně, takže více úloh může být ve stavu In progress současně.
-
Na QPU však může běžet vždy jen jedna úloha. Když několik úloh dokončí své klasické zpracování a jsou připraveny k provedení, musí čekat na svou řadu na QPU. To se nazývá soupeření o QPU. Když je soupeření vysoké, úloha může zůstat ve stavu In progress znatelně déle, než kolik sekund času QPU skutečně potřebuje.
-
K soupeření může dojít i tehdy, když na QPU probíhá úloha systémové údržby, například kalibrace. Tvoje úloha zůstane ve stavu In progress, dokud se úloha údržby nedokončí a QPU nebude k dispozici.
Z tohoto důvodu se doba reálného času, kterou úloha stráví ve stavu In progress, neshoduje s jejím využitím. Jak odhadované využití, tak maximální doba provádění vycházejí pouze z doby, po kterou je QPU uzamčeno pro provádění tvé úlohy, a proto nezahrnují výše popsané vícevláknové klasické zpracování. Dlouhá doba ve stavu In progress nezvyšuje tvé vykázané využití ani náklady.
Režim Session je jiný
Předchozí chování platí pro režim úlohy a dávkový režim. V režimu Session má uživatel během aktivního okna Session výhradní přístup k backendu a žádné jiné úlohy nemohou běžet, včetně kalibračních úloh. Soupeření o QPU proto probíhá pouze mezi tvými vlastními úlohami v rámci Session. Kromě toho, protože kapacita QPU je vyhrazena po celou dobu trvání Session, měří se využití Session jako uplynulý čas, po který Session zůstává aktivní, bez ohledu na to, zda úlohy skutečně běží. Další informace najdeš v části Využití pracovní zátěže.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
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)
Zobrazení zbývajícího využití
Sleduj, kolik ti zbývá z kvóty využití tvého plánu.
- Kontrola využití pomocí Qiskit
- Zobrazení využití na IBM Quantum Platform
Použij metodu service.usage() k získání informací o využití pro tvou aktuálně aktivní instanci.
Přejdi na stránku Instances a vyber záložku odpovídající plánu, který chceš zkontrolovat. Zobrazí se celkový použitý čas a celkový zbývající čas na tvém plánu.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)
Zobrazení metrik úlohy
Získej přehled o svých odeslaných úlohách, včetně metrik pracovní zátěže pro dávky a Session.
- Získání metrik úlohy pomocí Qiskit
- Zobrazení metrik úlohy na IBM Quantum Platform
Použij metodu service.jobs() s filtry k získání informací o svých odeslaných úlohách, například kolik jich bylo odesláno, jaké mají stavy a kdy byly vytvořeny. Následující příklad načte všechny úlohy odeslané za posledních sedm dní a vypočítá celkové využití z těchto úloh.
Přejdi na stránku Analytics, kde uvidíš a budeš moci stáhnout data, jako například:
- Celkové využití
- Využití filtrované podle instance, kvantového počítače a uživatele
- Počet pracovních zátěží typu úloha, dávka a Session
Poznámka: Ke stránce Analytics máš přístup pouze u účtů, které vlastníš nebo spravuješ.
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")
Načtení výsledků úlohy později
Můžeš si uložit ID úloh a později získat výsledky, i po ukončení Session.
- Získání výsledků pomocí Qiskit
- Získání výsledků na IBM Quantum Platform
Pokud jsi si při odeslání úlohy uložil ID úlohy, použij service.job(<job_id>) k jeho pozdějšímu získání. Pokud ID úlohy nemáš, nebo pokud chceš získat více úloh najednou (včetně úloh z vyřazených QPU), použij místo toho service.jobs() s volitelnými filtry.
Dostupné filtry najdeš v dokumentaci API QiskitRuntimeService.jobs.
Tento příklad ukazuje, jak získat nedávné výsledky spuštěné na konkrétním backendu.
- Přejdi na stránku Workloads.
- Pomocí vyhledávání nebo filtrů najdi svou úlohu podle názvu, data nebo stavu.
- Klikni na úlohu a zobraz její výsledky a podrobnosti.
Získání vlastností backendu
- Získání vlastností backendu pomocí Qiskit
- Získání vlastností backendu na IBM Quantum Platform
Pomocí job.properties() můžeš získat vlastnosti backendu, včetně chybovosti, v okamžiku provádění úlohy.
Tento příklad ukazuje, jak získat vlastnosti backendu, které platily v okamžiku, kdy byla úloha spuštěna, včetně časů / a chybovosti pro konkrétní qubit (0).
service.jobs() vrací i úlohy spuštěné pomocí zastaralého balíčku qiskit-ibm-provider. Úlohy odeslané starším (rovněž zastaralým) balíčkem qiskit-ibmq-provider už nejsou dostupné.
Můžeš zobrazit kalibrační data backendu v okamžiku provádění úlohy i v okamžiku jejího vytvoření.
- Přejdi na stránku Workloads
- Klikni na pracovní zátěž a otevři její stránku s podrobnostmi
- V sekci Quantum computer klikni na View calibration history
- V rozbalovací nabídce přepni zobrazení dat z „At job execution start“ na „At job creation“
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()
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")
Zrušení úlohy
Zruš úlohu, která čeká ve frontě nebo běží. Jakmile je úloha zrušena, nelze ji obnovit.
- Zrušení pomocí Qiskit
- Zrušení na IBM Quantum Platform
Pomocí metody job.cancel() můžeš zrušit úlohu programově.
- Z tabulky pracovních zátěží: Klikni na nabídku přetečení na konci řádku pracovní zátěže, kterou chceš zrušit, a vyber Cancel.
- Ze stránky s podrobnostmi úlohy: Klikni na pracovní zátěž a otevři její stránku s podrobnostmi, použij rozbalovací nabídku Actions v horní části a vyber Cancel.
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")
Další kroky
- Prostuduj referenci API
QiskitRuntimeServicepro další metody správy úloh. - Prozkoumej režimy provádění, abys porozuměl typům pracovní zátěže pro dávky a Session.