ติดตามหรือยกเลิก job
คู่มือนี้อธิบายวิธีตรวจสอบสถานะ job ดูข้อมูลการใช้งาน และยกเลิก job คุณสามารถเข้าถึงข้อมูลนี้ได้ทั้งผ่าน IBM Quantum® Platform และแบบโปรแกรมมิ่งด้วย Qiskit
Package versions
โค้ดในหน้านี้พัฒนาโดยใช้ requirements ต่อไปนี้ เราแนะนำให้ใช้เวอร์ชันเหล่านี้หรือใหม่กว่า
qiskit-ibm-runtime~=0.46.1
ติดตาม job
ใช้เมธอดเหล่านี้เพื่อตรวจสอบสถานะของ job ที่คุณส่งไปแล้ว ดึงผลลัพธ์ และดูรายละเอียดที่เกี่ยวข้องกับ job และการทำงานของมัน
- Monitor a job with Qiskit
- Monitor a job on IBM Quantum Platform
job instance มีเมธอดหลายตัวสำหรับการติดตาม:
| Method | Description |
|---|---|
job.status() | ตรวจสอบสถานะปัจจุบันของ job |
job.job_id() | รับตัวระบุ job ที่ไม่ซ้ำกัน |
job.result() | ดึงผลลัพธ์ของ job (blocking call จนกว่าจะเสร็จสิ้น) |
job.wait_for_final_state() | บล็อกจนกว่า job จะถึงสถานะสุดท้าย |
ไปที่ Workloads page และตรวจสอบคอลัมน์ Status สถานะ job ของคุณจะปรากฏเป็นหนึ่งในสิ่งต่อไปนี้:
- Pending: job กำลังรอที่จะรันบน QPU
- In progress: job กำลังทำงานอยู่
- Completed: job เสร็จสิ้นสำเร็จ
- Failed: job พบข้อผิดพลาด
- Canceled: ผู้ใช้ยกเลิก job
คลิกที่ชื่อ job หรือแถวเพื่อเปิดมุมมองรายละเอียด ซึ่งคุณจะเห็นข้อมูลเช่นผลลัพธ์และข้อความ error ต่างๆ
ทำไม job ถึงค้างอยู่ที่ "In progress"
คุณอาจสังเกตว่า job (ไม่ว่าจะเป็น job mode หรือ batch mode) ที่คุณคาดว่าจะใช้เวลาแค่ไม่กี่วินาที กลับค้างอยู่ที่สถานะ In progress (เรียกว่า RUNNING ใน Qiskit) นานกว่านั้นมาก นี่เป็นเรื่องปกติ และไม่ได้หมายความว่า job กำลังใช้เวลาทั้งหมดนั้นเป็นการใช้งาน (usage) เหตุการณ์นี้เกิดขึ้นเนื่องจากวิธีที่ job ถูกจัดตารางเวลาลงบน QPU:
-
job ทุกตัวต้องผ่านการประมวลผลแบบ classical pre-processing ก่อนที่จะสามารถรันบน QPU ได้ job จะย้ายไปยังสถานะ In progress (
RUNNING) ทันทีที่การประมวลผล classical นี้เริ่มต้น — ไม่ใช่เมื่อมันเริ่มทำงานบน QPU -
การประมวลผล classical ส่วนใหญ่นี้ทำงานแบบขนาน ดังนั้น job หลายตัวจึงสามารถอยู่ในสถานะ In progress พร้อมกันได้
-
อย่างไรก็ตาม มีเพียง job เดียวเท่านั้นที่สามารถรันบน QPU ได้ในแต่ละครั้ง เมื่อ job หลายตัวประมวลผล classical เสร็จสิ้นและพร้อมที่จะทำงาน พวกมันต้องรอคิวสำหรับ QPU สิ่งนี้เรียกว่า QPU contention เมื่อ contention สูง job อาจค้างอยู่ที่ In progress นานกว่าเวลา QPU เพียงไม่กี่วินาทีที่มันต้องการจริงๆ อย่างเห็นได้ชัด
-
Contention ยังสามารถเกิดขึ้นได้เมื่อมีงานบำรุงรักษาระบบ เช่น calibration กำลังรันอยู่บน QPU job ของคุณจะยังคงอยู่ที่ In progress จนกว่างานบำรุงรักษาจะเสร็จสิ้นและ QPU พร้อมใช้งาน
ด้วยเหตุนี้ เวลาที่ผ่านไปจริง (wall-clock time) ที่ job ใช้ในสถานะ In progress จึงไม่เหมือนกับ usage ของมัน ทั้ง estimated usage และ maximum execution time คำนวณจากเวลาที่ QPU ถูกล็อกเพื่อรัน job ของคุณเท่านั้น จึงไม่รวมการประมวลผล classical แบบ multi-threaded ที่อธิบายไว้ข้างต้น เวลา In progress ที่นานไม่ได้เพิ่ม usage หรือค่าใช้จ่ายที่รายงานของคุณ
Session mode แตกต่างออกไป
พฤติกรรมข้างต้นนี้ใช้กับ job mode และ batch mode ใน session mode ระหว่างช่วงเวลาที่ session ทำงานอยู่ ผู้ใช้จะมีสิทธิ์เข้าถึง backend แต่เพียงผู้เดียว และไม่มี job อื่นใดที่สามารถรันได้ รวมถึง calibration job ด้วย ดังนั้น QPU contention ใดๆ จะเกิดขึ้นเฉพาะระหว่าง job ของ session ของคุณเองเท่านั้น นอกจากนี้ เนื่องจากความจุ QPU ถูกจองไว้ตลอดระยะเวลาของ session การใช้งาน session จะถูกวัดเป็นเวลาที่ผ่านไปในขณะที่ session ยังคงทำงานอยู่ ไม่ว่า job จะกำลังรันอยู่จริงหรือไม่ก็ตาม ดู Workload usage สำหรับข้อมูลเพิ่มเติม
# 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)
ดูการใช้งานที่เหลือ
ติดตามว่าโควตา usage ของแผนของคุณเหลืออยู่เท่าไร
- Check usage with Qiskit
- View usage on IBM Quantum Platform
ใช้เมธอด service.usage() เพื่อรับข้อมูล usage สำหรับ instance ที่กำลังใช้งานอยู่ในปัจจุบันของคุณ
ไปที่ Instances page และเลือกแท็บที่เกี่ยวข้องกับแผนที่คุณต้องการตรวจสอบ จะแสดงเวลาทั้งหมดที่ใช้ไปและเวลาทั้งหมดที่เหลือในแผนของคุณ
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# Get usage information for the current active instance
usage = service.usage()
print(usage)
ดู job metrics
ดูภาพรวมของการส่ง job ของคุณ รวมถึง metrics ของ workload แบบ batch และ session
- Get job metrics with Qiskit
- View job metrics on IBM Quantum Platform
ใช้เมธอด service.jobs() พร้อม filters เพื่อดึงข้อมูลเกี่ยวกับ job ที่คุณส่งไปแล้ว เช่น มีการส่งไปกี่ job สถานะของแต่ละ job เป็นอย่างไร และถูกสร้างขึ้นเมื่อไร ตัวอย่างต่อไปนี้ดึง job ทั้งหมดที่ส่งภายในเจ็ดวันที่ผ่านมาและคำนวณ usage ทั้งหมดจาก job เหล่านั้น
ไปที่ Analytics page เพื่อดูและดาวน์โหลดข้อมูล เช่น:
- Usage ทั้งหมด
- Usage แยกตาม instance, quantum computer, และผู้ใช้
- จำนวน workload ของ job, batch, และ session
หมายเหตุ: คุณสามารถเข้าถึงหน้า Analytics ได้เฉพาะสำหรับบัญชีที่คุณเป็นเจ้าของหรือจัดการเท่านั้น
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")
ดึงผลลัพธ์ job ในภายหลัง
คุณสามารถบันทึก job ID และดึงผลลัพธ์ในภายหลังได้ แม้หลังจากปิด session ของคุณแล้ว
- Retrieve results with Qiskit
- Retrieve results on IBM Quantum Platform
หากคุณบันทึก job ID ไว้เมื่อคุณส่ง job ให้ใช้ service.job(<job_id>) เพื่อดึงมันในภายหลัง หากคุณไม่มี job ID หรือหากคุณต้องการดึง job หลายตัวพร้อมกัน (รวมถึง job จาก QPU ที่เลิกใช้งานแล้ว) ให้ใช้ service.jobs() แทน โดยมี filters ให้เลือกใช้
ดูเอกสาร API QiskitRuntimeService.jobs สำหรับ filters ที่มีให้ใช้
ตัวอย่างนี้แสดงการดึงผลลัพธ์ล่าสุดที่รันบน backend เฉพาะเจาะจง
- ไปที่ Workloads page
- ใช้ตัวเลือกค้นหาหรือ filter เพื่อค้นหา job ของคุณตามชื่อ วันที่ หรือสถานะ
- คลิกที่ job เพื่อดูผลลัพธ์และรายละเอียด
ดึงคุณสมบัติของ backend
- Retrieve backend properties with Qiskit
- Retrieve backend properties on IBM Quantum Platform
คุณสามารถใช้ job.properties() เพื่อดึงคุณสมบัติของ backend รวมถึงอัตราความผิดพลาด ณ เวลาที่ job ทำงาน
ตัวอย่างนี้แสดงวิธีดึงคุณสมบัติของ backend ที่เป็นค่าปัจจุบัน ณ เวลาที่ job ถูกรัน รวมถึงเวลา / และอัตราความผิดพลาดสำหรับ qubit เฉพาะเจาะจง (0)
service.jobs() ยังส่งคืน job ที่รันจาก package qiskit-ibm-provider ที่เลิกใช้งานแล้วด้วย job ที่ส่งโดย package qiskit-ibmq-provider เก่ากว่า (ซึ่งเลิกใช้งานแล้วเช่นกัน) ไม่สามารถใช้งานได้อีกต่อไป
คุณสามารถดูข้อมูล calibration สำหรับ backend ณ เวลาที่ job ทำงาน รวมถึง ณ เวลาที่สร้าง job
- ไปที่ Workloads page
- คลิก workload เพื่อเปิดหน้า Details
- ภายใต้ Quantum computer คลิก View calibration history
- ใช้เมนู dropdown เพื่อเปลี่ยนจากการดูข้อมูล "At job execution start" เป็น "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")
ยกเลิก job
ยกเลิก job ที่กำลังอยู่ในคิวหรือกำลังทำงาน เมื่อ job ถูกยกเลิกแล้ว จะไม่สามารถกลับมาทำงานต่อได้
- Cancel with Qiskit
- Cancel on IBM Quantum Platform
ใช้เมธอด job.cancel() เพื่อยกเลิก job แบบโปรแกรมมิ่ง
- จากตาราง workloads: คลิก overflow menu ที่ท้ายแถวของ workload ที่คุณต้องการยกเลิก และเลือก Cancel
- จากหน้า job details: คลิกที่ workload เพื่อเปิดหน้ารายละเอียด ใช้ dropdown Actions ที่ด้านบน และเลือก 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")
ขั้นตอนถัดไป
- ทบทวน เอกสารอ้างอิง API
QiskitRuntimeServiceสำหรับเมธอดการจัดการ job เพิ่มเติม - สำรวจ execution modes เพื่อทำความเข้าใจประเภทของ workload แบบ batch และ session