작업 모니터링 또는 취소
이 가이드에서는 작업 상태를 확인하는 방법, 사용량 정보를 조회하는 방법, 그리고 작업을 취소하는 방법에 대해 설명합니다. 이 정보는 IBM Quantum® Platform 을 통해서도 확인할 수 있으며, Qiskit을 사용하여 프로그래밍 방식으로 접근할 수도 있습니다.
이 페이지의 코드는 다음 요구 사항을 바탕으로 개발되었습니다. 이 버전이나 그 이후 버전을 사용하시기를 권장합니다.
qiskit-ibm-runtime~=0.46.1
작업 모니터
이 메서드들을 사용하여 제출한 작업의 상태를 확인하고, 결과를 가져오며, 작업 및 그 실행과 관련된 세부 정보를 확인할 수 있습니다.
작업 인스턴스는 모니터링을 위한 여러 가지 메서드를 제공합니다:
방법 | 설명 |
|---|---|
job.status() | 현재 작업 상태 확인 |
job.job_id() | 고유한 작업 식별자 가져오기 |
job.result() | 작업 결과 가져오기 (완료될 때까지 호출을 차단함) |
job.wait_for_final_state() | 작업이 종료 상태에 도달할 때까지 차단 |
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)'워크로드' 페이지 로 이동하여 '상태' 열을 확인하십시오. 귀하의 근무 상태는 다음 중 하나로 표시됩니다:
- 대기 중 : 작업이 QPU에서 실행되기를 기다리고 있습니다
- 진행 중 : 작업이 현재 실행 중입니다
- 완료 : 작업이 성공적으로 완료되었습니다
- 실패 : 작업 중 오류가 발생했습니다
- 취소됨 : 사용자가 작업을 취소했습니다
작업 이름이나 행을 클릭하면 상세 보기가 열리며, 여기에서 결과 및 오류 메시지 등의 정보를 확인할 수 있습니다.
직무 상태가 왜 “진행 중”으로 남아 있는지
예상보다 훨씬 더 오랜 시간 동안 ‘진행 중’ 상태(Qiskit에서는 RUNNING 라고 함)에 머무르는 작업을 발견할 수도 있습니다. 이 작업은 (작업 모드나 배치 모드를 사용하든 상관없이) 단 몇 초밖에 걸리지 않을 것으로 예상했던 것입니다. 이는 정상적인 현상이며, 해당 작업이 그 시간 전체를 사용량으로 소모하고 있다는 의미는 아닙니다. 이는 QPU에 작업이 스케줄링되는 방식 때문에 발생합니다:
- 모든 작업은 QPU에서 실행되기 전에 반드시 표준 전처리 과정을 거쳐야 합니다. 이 일반적인 처리가 시작되는 즉시 작업은 ‘ 진행 중 (In progress)
RUNNING’ 상태로 전환되며, QPU에서 실행이 시작될 때가 아닙니다. - 이러한 일반적인 처리 과정의 대부분은 병렬로 실행되므로, 여러 작업이 동시에 진행 중 일 수 있습니다.
- 그러나 QPU에서는 한 번에 하나의 작업만 실행될 수 있습니다. 여러 작업이 일반적인 처리를 마치고 실행 준비가 되면, QPU를 사용할 차례가 올 때까지 기다려야 합니다. 이를 QPU 경합 이라고 합니다. 경합이 심할 경우, 작업이 실제로 필요한 QPU 시간인 몇 초보다 눈에 띄게 더 오랫동안 ‘진행 중’ 상태로 남아 있을 수 있습니다.
- 또한 QPU에서 보정과 같은 시스템 유지보수 작업이 실행 중일 때도 경합이 발생할 수 있습니다. 유지보수 작업이 완료되고 QPU를 사용할 수 있게 될 때까지 해당 작업은 ‘진행 중’ 상태로 유지됩니다.
이 때문에, 작업이 ‘진행 중’ 상태에 머무는 실제 경과 시간은 해당 작업의 사용 시간과 동일하지 않습니다. 예상 사용 시간과 최대 실행 시간은 모두 해당 작업을 실행하기 위해 QPU가 할당된 시간만을 기준으로 산정되므로, 앞서 설명한 멀티스레드 방식의 기존 처리 과정은 제외됩니다. ‘진행 중’ 상태가 오래 지속된다고 해서 보고된 사용량이나 비용이 증가하지는 않습니다.
세션 모드가 다릅니다
앞서 설명한 동작은 작업 모드와 일괄 처리 모드 모두에 적용됩니다. 세션 모드에서는 세션의 활성 창이 열려 있는 동안 사용자가 백엔드에 대한 독점적인 액세스 권한을 가지며, 보정 작업을 포함한 다른 어떤 작업도 실행될 수 없습니다. 따라서 QPU 경합은 오직 사용자 자신의 세션 내 작업들 사이에서만 발생합니다. 또한, QPU 용량은 세션이 지속되는 동안 예약되므로, 세션 사용량은 작업이 실제로 실행 중인지 여부와 관계없이 세션이 활성화된 상태로 유지되는 동안 경과한 시간으로 측정됩니다. 자세한 내용은 ‘워크로드 사용 현황’을 참조하십시오.
남은 사용량 보기
요금제의 사용 한도 중 얼마나 남아 있는지 확인하세요.
이 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() 이 명령을 사용하십시오.
사용 가능한 필터에 대해서는 API QiskitRuntimeService.jobs 문서를 참조하십시오.
이 예제는 특정 백엔드에서 실행된 최근 결과를 조회하는 방법을 보여줍니다.
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()- '워크로드' 페이지 로 이동하세요.
- 검색 또는 필터 옵션을 사용하여 직무명, 날짜 또는 상태별로 일자리를 찾아보세요.
- 작업 항목을 클릭하면 결과와 세부 정보를 확인할 수 있습니다.
백엔드 속성 가져오기
을 사용하면 작업 실행 시점의 오류율 등 백엔드 속성을 조회할 job.properties() 수 있습니다.
이 예제는 작업이 실행된 시점에 유효했던 백엔드 속성을 가져오는 방법을 보여줍니다. 여기에는 / 의 시간 정보와 특정 큐비트(0)에 대한 오류율이 포함됩니다.
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")service.jobs() 는 더 이상 사용되지 않는 qiskit-ibm-provider 패키지에서 실행되는 작업도 반환합니다. 이전(또한 더 이상 사용되지 않는) qiskit-ibmq-provider 패키지로 제출된 작업은 더 이상 사용할 수 없습니다.
작업 생성 시뿐만 아니라 작업 실행 시에도 백엔드의 보정 데이터를 확인할 수 있습니다.
- ‘워크로드’ 페이지 로 이동
- 워크로드를 클릭하면 해당 워크로드의 ‘세부 정보’ 페이지가 열립니다
- ‘양자 컴퓨터’ 아래에서 ‘보정 내역 보기’를 클릭하세요
- 드롭다운 메뉴를 사용하여 데이터 표시 기준을 “작업 실행 시작 시”에서 “작업 생성 시”로 변경하십시오
작업 취소
대기 중이거나 실행 중인 작업을 취소합니다. 작업이 취소되면 다시 재개할 수 없습니다.
이 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")- 워크로드 테이블에서 : 취소하려는 워크로드의 행 끝에 있는 오버플로 메뉴를 클릭한 다음, ‘취소’를 선택합니다.
- 작업 세부 정보 페이지에서 : 작업 부하를 클릭하여 해당 세부 정보 페이지를 연 다음, 상단의 ‘작업’ 드롭다운 메뉴를 사용하여 ‘취소’를 선택합니다.
다음 단계
- 추가적인 작업 관리 메서드에 대해서는 API
QiskitRuntimeService참조 문서를 확인하십시오. - 실행 모드를 살펴보고 배치 및 세션 워크로드 유형을 이해해 보세요.