주 콘텐츠로 건너뛰기

작업 모니터링 또는 취소

이 가이드에서는 작업 상태를 모니터링하고, 사용량 정보를 확인하고, 작업을 취소하는 방법을 설명합니다. 이 정보는 IBM Quantum® Platform을 통해서, 그리고 Qiskit을 사용하여 프로그래밍 방식으로 모두 접근할 수 있습니다.

패키지 버전

이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것이 좋습니다.

qiskit-ibm-runtime~=0.46.1

작업 모니터링​

제출한 작업의 상태를 확인하고, 결과를 검색하고, 작업 및 실행과 관련된 세부 정보를 보려면 다음 메서드를 사용하세요.

job 인스턴스는 모니터링을 위한 여러 메서드를 제공합니다.

메서드설명
job.status()현재 작업 상태를 확인합니다
job.job_id()고유한 작업 식별자를 가져옵니다
job.result()작업 결과를 가져옵니다(완료될 때까지 차단되는 호출)
job.wait_for_final_state()작업이 최종 상태에 도달할 때까지 차단합니다

작업이 "In progress" 상태로 유지되는 이유​

몇 초밖에 걸리지 않을 것이라 예상한 작업(작업 모드 또는 배치 모드 사용)이 훨씬 더 오랫동안 In progress 상태(Qiskit에서는 RUNNING이라고 함)로 유지되는 경우가 있을 수 있습니다. 이는 정상적인 현상이며, 작업이 그 전체 시간을 사용량으로 소비하고 있다는 의미는 아닙니다. 이는 작업이 QPU에 스케줄링되는 방식 때문에 발생합니다.

  • 모든 작업은 QPU에서 실행되기 전에 고전적 전처리가 필요합니다. 이 고전적 처리가 시작되는 즉시 작업은 In progress(RUNNING)로 전환됩니다. QPU에서 실행이 시작될 때가 아닙니다.

  • 이 고전적 처리의 대부분은 병렬로 실행되므로 여러 작업이 동시에 In progress 상태일 수 있습니다.

  • 그러나 한 번에 하나의 작업만 QPU에서 실행될 수 있습니다. 여러 작업이 고전적 처리를 마치고 실행 준비가 되면, QPU 차례를 기다려야 합니다. 이를 *QPU 경합(contention)*이라고 합니다. 경합이 심할 때는 작업이 실제로 필요한 QPU 시간이 몇 초에 불과하더라도 In progress 상태가 눈에 띄게 더 오래 지속될 수 있습니다.

  • 교정(calibration)과 같은 시스템 유지보수 작업이 QPU에서 실행 중일 때도 경합이 발생할 수 있습니다. 유지보수 작업이 완료되고 QPU를 사용할 수 있게 될 때까지 작업은 In progress 상태로 유지됩니다.

이 때문에 작업이 In progress 상태로 소비하는 실제 경과 시간(wall-clock time)은 사용량과 동일하지 않습니다. 예상 사용량과 최대 실행 시간은 모두 QPU가 작업을 실행하도록 잠겨 있는 시간만을 기준으로 하므로, 위에서 설명한 다중 스레드 고전적 처리는 제외됩니다. In progress 시간이 길다고 해서 보고되는 사용량이나 비용이 증가하지는 않습니다.

세션 모드는 다릅니다​

앞서 설명한 동작은 작업 모드와 배치 모드에 적용됩니다. 세션 모드에서는 세션의 활성 기간 동안 사용자가 백엔드에 독점적으로 접근하며, 교정 작업을 포함하여 다른 작업은 실행될 수 없습니다. 따라서 QPU 경합은 오직 자신의 세션 작업들 사이에서만 발생합니다. 또한 세션 기간 동안 QPU 용량이 예약되어 있으므로, 세션 사용량은 작업이 실제로 실행 중인지 여부와 관계없이 세션이 활성 상태로 유지되는 경과 시간으로 측정됩니다. 자세한 내용은 워크로드 사용량을 참조하세요.

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

남은 사용량 보기​

플랜의 사용량 할당량이 얼마나 남았는지 확인하세요.

service.usage() 메서드를 사용하여 현재 활성 인스턴스의 사용량 정보를 가져오세요.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

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

작업 지표 보기​

배치 및 세션 워크로드 지표를 포함하여 작업 제출에 대한 개요를 확인하세요.

service.jobs() 메서드를 필터와 함께 사용하여 제출한 작업의 개수, 상태, 생성 시점 등 정보를 검색하세요. 다음 예제는 지난 7일 동안 제출된 모든 작업을 검색하고 해당 작업들의 총 사용량을 계산합니다.

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

나중에 작업 결과 검색​

작업 ID를 저장해 두면 세션을 닫은 후에도 나중에 결과를 검색할 수 있습니다.

작업을 제출할 때 작업 ID를 저장했다면, service.job(<job_id>)을 사용하여 나중에 검색할 수 있습니다. 작업 ID가 없거나, 한 번에 여러 작업을 검색하려는 경우(은퇴한 QPU의 작업 포함), 선택적 필터와 함께 service.jobs()를 사용하세요.

사용 가능한 필터는 QiskitRuntimeService.jobs API 문서를 참조하세요.

이 예제는 특정 백엔드에서 실행된 최근 결과를 검색하는 방법을 보여줍니다.

백엔드 속성 검색하기​

job.properties()를 사용하여 작업 실행 시점의 오류율을 포함한 백엔드 속성을 검색할 수 있습니다.

이 예제는 작업 실행 시점에 적용되었던 백엔드 속성을 검색하는 방법을 보여줍니다. 여기에는 특정 큐비트(0)의 T1T_1/T2T_2 시간과 오류율이 포함됩니다.

지원 중단된 provider 패키지

service.jobs()는 지원 중단된 qiskit-ibm-provider 패키지에서 실행된 작업도 반환합니다. 더 오래된(마찬가지로 지원 중단된) qiskit-ibmq-provider 패키지로 제출된 작업은 더 이상 사용할 수 없습니다.

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

다음 단계​

권장 사항