주 콘텐츠로 건너뛰기

워크로드 사용량

사용량은 Qiskit Runtime 서비스의 소비를 나타내며, QPU가 워크로드를 실행하기 위해 잠겨 있는 시간에 의해 결정됩니다.

  • 세션 사용량은 세션이 활성 상태를 유지하는 동안의 경과 시간으로 측정됩니다. 워크로드가 실제로 실행 중인지와 관계없이 세션 기간 동안 QPU 용량이 예약되기 때문입니다. 세션 상태 전환에 대한 자세한 내용은 세션 길이를 참조하세요.
  • 배치 사용량은 배치 내 모든 작업을 실행하기 위해 QPU가 잠겨 있는 누적 시간으로 측정됩니다.
  • 단일 작업 사용량은 해당 작업을 실행하기 위해 QPU가 잠겨 있는 시간으로 측정됩니다.

실패하거나 취소된 작업도 특정 상황에서는 사용량에 포함될 수 있으니 자세한 내용은 실패 및 취소된 작업 섹션을 참조하세요.

종량제 플랜 사용자의 경우, 비용 한도 설정에 대한 자세한 내용은 비용 관리를 참조하세요.

실패 및 취소된 작업의 사용량

작업이 실패하거나 취소된 경우, 보고되는 사용량은 다음과 같습니다:

  • 작업 또는 배치 모드: 시스템 오류로 인해 실패하거나 취소된 경우, 보고되는 사용량은 0입니다. 사용자 오류로 인해 실패한 작업이나 사용자가 작업을 취소한 경우, 보고되는 사용량은 해당 시점까지 발생한 소비량이며, 여기에는 작업 실행을 위해 QPU를 준비하는 데 발생한 오버헤드도 포함됩니다.

  • 세션 모드: 보고되는 사용량은 실패하거나 취소된 작업 수와 관계없이 세션이 활성 상태인 동안의 실제 경과 시간입니다.

워크로드의 실제 사용량 조회

워크로드가 완료된 후, 실제 사용량을 확인하는 방법은 여러 가지가 있습니다:

  • qiskit-ibm-runtime 0.30 이상에서 batch.usage() 또는 session.usage()를 실행합니다. 이전 버전의 qiskit-ibm-runtime(>= 0.23 및 < 0.30)을 사용하는 경우, session.details()["usage_time"]batch.details()["usage_time"]에서 사용량을 확인할 수 있습니다.
  • GET /sessions/{id}를 사용하여 특정 배치 또는 세션의 사용량을 확인합니다.
  • GET /jobs/{id}를 사용하여 단일 작업의 사용량을 확인합니다.

인스턴스 사용량 보기

인스턴스 페이지에서, 또는 적절한 권한이 있는 경우 분석 페이지에서 인스턴스의 사용량을 확인할 수 있습니다. 두 페이지는 사용량 계산 방식이 다르기 때문에 표시되는 사용량 수치가 다를 수 있습니다.

인스턴스 페이지는 현재 날짜의 현재 시간까지 최근 28일(롤링) 동안의 실시간 사용량을 표시합니다. 분석 페이지의 사용량은 매 시간 다시 계산되며 최근 28 전체 일을 포함합니다. 즉, 28일 전 00:00부터 오늘 정각까지의 사용량을 표시합니다.

작업 제출 전 사용량 추정

오류 억제 및 완화를 위한 추가 작업으로 인해 정확한 로컬 추정은 복잡하지만, 다음 기본 공식을 사용하여 예상 사용량의 근사치를 구할 수 있습니다:

<per sub-job overhead> + (rep_delay + <circuit length>) * <num executions>

  • <per sub-job overhead>는 서브 작업당 약 2초의 오버헤드입니다. 여기에는 페이로드를 제어 전자장치에 로드하는 등의 작업이 포함됩니다. 기본 요소(primitive) 작업이 실행 엔진이 한 번에 처리하기에 너무 큰 경우, 여러 서브 작업으로 나뉠 수 있습니다.
  • rep_delay사용자가 커스터마이즈 가능한 옵션이며, 기본값은 backend.default_rep_delay로 주어지고, 대부분의 IBM Quantum Backend에서는 250마이크로초입니다. rep_delay를 낮추면 총 QPU 실행 시간이 단축되지만, 상태 준비 오류율이 증가한다는 점에 유의하세요. 자세한 내용은 동적 반복률 실행 가이드를 참조하세요.
  • <circuit length>는 총 명령 길이입니다. 각 명령은 QPU에서 실행하는 데 걸리는 시간이 다르므로 총 길이는 Circuit마다 다릅니다. 예를 들어, 측정은 x Gate보다 56배 더 오래 걸릴 수 있습니다. backend.target[<instruction>][<qubit>].duration을 사용하여 각 명령의 정확한 지속 시간을 확인할 수 있습니다. 일반적인 Circuit 길이는 50-100마이크로초 사이일 가능성이 높습니다. 기본 요소(primitive)와 함께 오류 억제 또는 완화 기술을 사용하는 경우, Circuit에 추가 명령이 삽입되어 총 Circuit 길이가 늘어날 수 있습니다.
    참고

    실험적 scheduler_timing 옵션은 총 Circuit 시간을 반환하지만, 이는 청구에 사용되는 시간이 아닙니다.

  • <num executions>는 PUB 요소가 브로드캐스트된 후 생성된 Circuit을 기준으로, 총 Circuit 수에 샷 수를 곱한 값입니다.
    • 기본 요소(primitive)와 함께 오류 완화 기술을 사용하는 경우, 완화 프로세스의 일환으로 추가 Circuit이 실행될 수 있어 총 실행 횟수가 증가할 수 있습니다. 또한 PEA 및 PEC와 같은 고급 오류 완화 기술은 노이즈 학습을 위한 Circuit 실행이 필요하기 때문에 훨씬 높은 오버헤드가 발생합니다.
    • Estimator는 qubit 단위로 교환 가능한 관측값을 그룹화하여 실행 횟수를 줄입니다.

고급 오류 완화 기술이나 커스텀 rep_delay를 사용하지 않는 경우, 빠른 공식으로 2+0.00035*<num executions>를 사용할 수 있습니다.

Qiskit으로 로컬에서 사용량 추정

이 코드 예제는 Qiskit을 사용하여 Circuit 시간을 계산하는 방법을 보여줍니다:


# Schedule the circuit to get more accurate timing
pm = generate_preset_pass_manager(
target=backend.target,
optimization_level=0,
scheduling_method="alap"
)

scheduled_circuits = pm.run(isa_circuits)

init_duration = backend.target["reset"][(0,)].duration
rep_delay = sampler.options.execution.rep_delay or backend.default_rep_delay

circuit_duration = 0

for circuit in scheduled_circuits:
# Estimate circuit length
circuit_duration += circuit.estimate_duration(backend.target)

# Add INIT time
if sampler.options.execution.init_qubits:
circuit_duration += init_duration

# Add rep_delay
circuit_duration += rep_delay

total_time = 2 + (circuit_duration*shots)
print(f"Total estimated usage is {math.ceil(total_time)} seconds")

다음 단계

권장 사항