Langkau ke kandungan utama

Pantau atau batalkan kerja

Panduan ini menerangkan cara memantau status kerja, melihat maklumat penggunaan, dan membatalkan kerja. Anda boleh mengakses maklumat ini melalui IBM Quantum® Platform dan secara programatik menggunakan Qiskit.

Versi pakej

Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan menggunakan versi ini atau yang lebih baharu.

qiskit-ibm-runtime~=0.46.1

Pantau kerja

Gunakan kaedah ini untuk menyemak status kerja yang anda hantar, mendapatkan semula keputusan, dan melihat butiran berkaitan kerja tersebut dan pelaksanaannya.

Instans kerja menyediakan beberapa kaedah untuk pemantauan:

KaedahPenerangan
job.status()Semak status tugas semasa
job.job_id()Dapatkan pengecam tugas yang unik
job.result()Dapatkan hasil tugas (panggilan menyekat sehingga selesai)
job.wait_for_final_state()Sekat sehingga tugas mencapai keadaan akhir

Mengapa kerja kekal "In progress"

Anda mungkin perasan bahawa kerja (menggunakan sama ada mod kerja atau mod kumpulan) yang anda jangkakan hanya mengambil masa beberapa saat kekal pada status In progress (dipanggil RUNNING dalam Qiskit) untuk tempoh yang lebih lama. Ini adalah normal, dan ia tidak bermakna kerja tersebut menggunakan keseluruhan masa itu sebagai penggunaan. Ini berlaku disebabkan cara kerja dijadualkan pada QPU:

  • Setiap kerja memerlukan pra-pemprosesan klasik sebelum ia boleh berjalan pada QPU. Kerja beralih ke In progress (RUNNING) sebaik sahaja pemprosesan klasik ini bermula — bukan apabila ia mula dilaksanakan pada QPU.

  • Kebanyakan pemprosesan klasik ini berjalan secara selari, jadi beberapa kerja boleh berada dalam status In progress pada masa yang sama.

  • Walau bagaimanapun, hanya satu kerja pada satu masa boleh berjalan pada QPU. Apabila beberapa kerja menyelesaikan pemprosesan klasik mereka dan bersedia untuk dilaksanakan, mereka perlu menunggu giliran untuk QPU. Ini dikenali sebagai pertikaian QPU. Apabila pertikaian tinggi, kerja boleh kekal pada In progress dengan ketara lebih lama daripada beberapa saat masa QPU yang sebenarnya diperlukan.

  • Pertikaian juga boleh berlaku apabila tugas penyelenggaraan sistem, seperti kalibrasi, sedang dijalankan pada QPU. Kerja anda kekal pada In progress sehingga tugas penyelenggaraan itu selesai dan QPU tersedia.

Disebabkan ini, masa jam-dinding yang berlalu yang dihabiskan oleh kerja pada In progress tidak sama dengan penggunaannya. Kedua-dua anggaran penggunaan dan masa pelaksanaan maksimum hanya berdasarkan masa QPU dikunci untuk melaksanakan kerja anda, dan oleh itu tidak termasuk pemprosesan klasik berbenang-berbilang yang diterangkan di atas. Masa In progress yang lama tidak meningkatkan penggunaan atau kos yang dilaporkan.

Mod Session adalah berbeza

Tingkah laku sebelumnya berlaku untuk mod kerja dan mod kumpulan. Dalam mod Session, semasa tetingkap aktif Session, pengguna mempunyai akses eksklusif kepada Backend dan tiada kerja lain boleh berjalan, termasuk kerja kalibrasi. Oleh itu, sebarang pertikaian QPU hanya berlaku antara kerja Session anda sendiri. Selain itu, kerana kapasiti QPU dikhaskan untuk tempoh Session, penggunaan Session diukur sebagai masa berlalu semasa Session kekal aktif, tanpa mengira sama ada kerja sedang dijalankan secara aktif. Lihat Penggunaan beban kerja untuk maklumat lanjut.

# 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)

Lihat baki penggunaan

Jejaki berapa banyak kuota penggunaan pelan anda yang tinggal.

Gunakan kaedah service.usage() untuk mendapatkan maklumat penggunaan bagi instans aktif anda semasa.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

# Get usage information for the current active instance
usage = service.usage()
print(usage)

Lihat metrik kerja

Dapatkan gambaran keseluruhan penghantaran kerja anda, termasuk metrik beban kerja kumpulan dan Session.

Gunakan kaedah service.jobs() dengan penapis untuk mendapatkan semula maklumat tentang kerja yang anda hantar, seperti berapa banyak yang telah dihantar, apakah status mereka, dan bila ia dicipta. Contoh berikut mendapatkan semula semua kerja yang dihantar dalam tujuh hari lepas dan mengira jumlah penggunaan daripada kerja tersebut.

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")

Dapatkan semula keputusan kerja pada masa kemudian

Anda boleh menyimpan ID kerja dan mendapatkan semula keputusan kemudian, walaupun selepas menutup Session anda.

Jika anda menyimpan ID kerja semasa anda menghantar kerja, gunakan service.job(<job_id>) untuk mendapatkannya semula kemudian. Jika anda tidak mempunyai ID kerja, atau jika anda ingin mendapatkan semula beberapa kerja sekali gus (termasuk kerja daripada QPU yang telah dinyahaktifkan), gunakan service.jobs() sebaliknya, dengan penapis pilihan.

Lihat dokumentasi API QiskitRuntimeService.jobs untuk penapis yang tersedia.

Contoh ini menunjukkan cara mendapatkan semula keputusan terkini yang dijalankan pada Backend tertentu.

Dapatkan semula ciri Backend

Anda boleh menggunakan job.properties() untuk mendapatkan semula ciri Backend, termasuk kadar ralat, pada masa pelaksanaan kerja.

Contoh ini menunjukkan cara mendapatkan semula ciri Backend yang berlaku pada masa kerja dilaksanakan, termasuk masa T1T_1/T2T_2 dan kadar ralat untuk Qubit tertentu (0).

Pakej penyedia yang dinyahaktifkan

service.jobs() juga mengembalikan kerja yang dijalankan daripada pakej qiskit-ibm-provider yang telah dinyahaktifkan. Kerja yang dihantar oleh pakej qiskit-ibmq-provider yang lebih lama (juga telah dinyahaktifkan) tidak lagi tersedia.

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")

Batalkan kerja

Batalkan kerja yang sedang dalam giliran atau berjalan. Setelah kerja dibatalkan, ia tidak boleh disambung semula.

Gunakan kaedah job.cancel() untuk membatalkan kerja secara programatik.

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")

Langkah seterusnya

Cadangan