Přeskočit na hlavní obsah

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í.

Instance úlohy poskytuje několik metod pro sledování:

MetodaPopis
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

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.

Použij metodu service.usage() k získání informací o využití pro tvou aktuálně aktivní instanci.

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.

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.

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.

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.

Získání vlastností backendu​

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ů T1T_1/T2T_2 a chybovosti pro konkrétní qubit (0).

Zastaralé balíčky poskytovatelů

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é.

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.

Pomocí metody job.cancel() můžeš zrušit úlohu programově.

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​

Doporučení