시운전 작업
시뮬레이션 작업은 QPU 사용 시간을 전혀 소비하지 않고 IBM Quantum® Compute Service를 통해 워크로드를 실행합니다. 실제 실행을 진행하기 전에 모의 실행을 통해 다음 작업을 수행하십시오:
- **해당 작업이 실제 QPU에서 발생시킬 리소스 사용량을 확인합니다.
- 작업의 유효성을 검증합니다. Quantum Compute는 실제 작업과 동일한 방식으로 작업의 매개변수를 확인합니다.
- 실제 실행에 앞서 작업을 디버깅하려면, 요청 시 회로 타이밍 일정을 받아보세요.
시뮬레이션 작업과 달리, 로컬 테스트(가상 백엔드 및 Qiskit Aer )는 사용자의 컴퓨터에서 실행되므로 사용량 통계, 서비스 측 검증 또는 서비스 처리 시간 정보를 제공할 수 없습니다. 두 가지 접근 방식을 비교하려면 ‘모의 장치와 가짜 백엔드 비교’를 참조하십시오.
qiskit-ibm-runtime시뮬레이션 작업에는 v0.51.0 이상이 필요합니다.- 시뮬레이션 작업은 모든 지역에서 이용 가능하며, Flex, Premium 및 On-Prem 요금제에서만 제공됩니다. 오픈 요금제나 종량제 요금제에서는 이용하실 수 없습니다.
작업 방식
시뮬레이션 작업을 실행하려면 프라이머리트의 run() 메서드에 dry_run=True 다음을 전달하십시오:
backend = service.backend("ibm_phoenix")
isa_circuit = pm.run(circuit) # transpiled for ibm_phoenix
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result() # wait for completion
print(job.usage())dry_run 이것은 run() 메서드의 인자이며(기본값은 False), 런타임 옵션이 아닙니다. 모든 기본형에 적용됩니다.
모의 실행 작업은 다음과 같은 특징을 가지고 있습니다:
- 이 서비스는 사용자의 컴퓨터가 아닌 클라우드상의 IBM Quantum Compute Service에서 실행됩니다.
- 단순한 스냅샷이 아닌 실제 QPU의 보정 데이터를 사용합니다.
- 이 결과들은 실제 QPU에서 기대되는 스키마와 결과 형식을 따르지만, 무작위로 생성된 모의 데이터가 포함되어 있습니다. 이는 실제 측정 결과나 시뮬레이션 결과가 아니므로, 물리적 정확성을 확인하는 데 사용해서는 안 됩니다.
- 처리는 서버에서 이루어지므로 작업이 즉시 완료되지 않을 수도 있습니다.
회로 크기, 샷 수 및 기타 제한 사항은 해당 프로그램의 다른 작업과 동일합니다.
dry_run=True 백엔드가 이미 모의 장치인 경우에도 작동합니다.
사용법을 읽어보세요
완료된 시뮬레이션 작업의 사용량은 실제 QPU에서 해당 작업이 발생시킬 사용량과 동일합니다. 단, 시뮬레이션 작업이 끝난 후 실제 QPU에서 작업이 실행되기 전까지 보정 데이터가 크게 변경되는 드문 경우는 예외입니다.
job.usage()사용 시간을 초 단위로 반환합니다.job.metrics()["usage"]사용 상태와 함께 동일한 데이터를 반환합니다.
시뮬레이션 사용에는 요금이 부과되지 않으며, 요금제 할당량을 소모하지 않고, 어떠한 제한에도 포함되지 않습니다.
시운전 작업에서는 job.usage_estimation 이 기능을 사용하지 마십시오. job.usage()을(를) 사용하십시오.
job.usage() 사용량 계산이 최종적으로 완료될 0 때까지 반환되므로, 해당 결과를 읽기 전에 작업이 끝날 때까지 기다리십시오.
회로 타이밍 일정
회로 타이밍 일정을 요청하려면 실제 작업과 동일한 옵션을 사용하십시오. 자세한 내용은 ‘회로 타이밍 시각화’를 참조하십시오.
제한사항
- 작업 모드 및 일괄 처리 모드에서만 사용 가능합니다. 시뮬레이션 작업은 작업 모드와 일괄 처리 모드 에서만 실행할 수 있습니다.
- Flex, Premium 및 On-Prem 요금제에만 해당됩니다. 오픈(Open) 또는 종량제(Pay-As-You-Go) 요금제에서는 시뮬레이션 작업(Dry-run jobs)을 이용할 수 없습니다.
모의 장치
모의 장치는 드라이런 작업의 기반이 되는 구현 방식입니다. 시뮬레이션 작업에서는 기본적으로 모의 장치가 숨겨져 있지만, 다음과 같은 경우에는 이를 확인할 수 있습니다:
- 모의 장치에만 액세스하도록 구성된 인스턴스. 예: 를 사용하여 에서
service.backend("ibm_phoenix")테스트 작업을 제출했지만ibm_phoenix, 해당 인스턴스가 에 액세스할 수 없는 경우ibm_phoenix, 오류가 발생합니다QiskitBackendNotFoundError. 대신,service.backend("mock_phoenix").을 사용하여 모의 장치를 직접 선택하십시오. - 컴퓨팅 리소스. 모의 장치는 기본적으로 ‘컴퓨팅 리소스’ 페이지에서 숨겨져 있습니다. 이 페이지의 표에는 해당 항목을 포함하도록 필터링할 수 있는 옵션이 있지만, 모의 기기를 사용할 수 있는 것은 Flex, Premium 및 On-Prem 요금제뿐입니다.
- 작업 부하 표. 모의 기기에서 생성된 작업은 기본적으로 ‘워크로드’ 페이지에서 숨겨져 있습니다. 이 표에는 데이터를 표시하기 위한 필터 옵션(깔때기 아이콘)이 있습니다.
- Python API.
service.backends()그리고.로 호출하지 않는 한 모의 장치는service.jobs()제외하십시오include_mocks=True.IBMBackend.is_mock백엔드가 모의 장치인지 여부를 나타냅니다.service.least_busy()모의 장치를 반환하지 않습니다.
가상 기기와 가짜 백엔드의 비교
이름은 비슷하지만, 모의 장치와 가짜 백엔드는 서로 다른 개념입니다. 가상 백엔드는 Python 환경 내의 로컬 객체입니다. 모의 장치는 IBM Quantum Compute Service의 클라우드 리소스입니다.
칼럼 1 | 모의 장치 (예: mock_phoenix) | 가상 백엔드 (예: FakeManilaV2) |
|---|---|---|
| 의미 | IBM Quantum Compute Service의 장치 | 에 있는 Python 클래스 qiskit_ibm_runtime.fake_provider |
| 운행 구간 | 클라우드, 서비스 내에서 | 로컬, 즉 사용자의 컴퓨터에서 |
| 구입 방법 | service.backend("mock_phoenix"), 또는 다음을 사용하여 자동으로 run(..., dry_run=True) | from qiskit_ibm_runtime.fake_provider import ... |
| 계정 및 인스턴스 | 특정 요금제만 해당 (Flex, Premium 또는 On-Prem ) | 모든 인스턴스 및 요금제 |
| 보정 | 실시간으로, 언제든지 실제 기기와 일치합니다 | 설치된 패키지와 함께 제공되는 수정된 스냅샷 |
| 결과 | 예상되는 스키마를 따르는 무작위 데이터. 시뮬레이션이 아닙니다 | 스냅샷의 노이즈 모델을 사용하는 노이즈 시뮬레이션 |
| 물리적으로 의미 있는 결과 | 아니오. 정답 여부를 확인하는 데는 절대 사용하지 마십시오 | 대략, 소음 모델의 범위 내에서 |
| 사용 사례 보고 | 예 | 없음 |
| 계획 할당량 또는 한도에 차감되거나 반영됨 | 아니오 | 아니오 |
| 작업 유효성 검증 | 해당 서비스에서 처리해 드리며, 실제 업무와 동일합니다 | 고객이 확인한 내용으로 한정됨 |
| 일정 | 요청 시 사용 가능 | 사용할 수 없음 |
| 실행 모드 | 단일 작업 및 일괄 처리 모드에서만 사용 가능합니다. 세션이 차단되었습니다 | 세션 구문이 허용되지만 무시됨 (로컬 모드에는 실제 세션이나 배치 작업이 없음) |
| 완료 | 비동기 방식, 서버 측에서 | 로컬에서 실행되며 완료되면 종료됩니다 |
| 플랫폼 인터페이스 및 API 목록에 표시됨 | 기본적으로 숨김 (컴퓨팅 리소스, 워크로드 표, backends(), jobs()). 표시하려면 수동으로 선택해야 함 | 절대 아닙니다. 해당 서비스로 전송되는 데이터가 없기 때문입니다 |
선택 방법
- 작업이 얼마나 많은 리소스를 소모할지, 또는 해당 서비스가 해당 작업을 수락할지 여부를 확인하려면 드라이런 작업을 실행하십시오.
- 출력 결과가 어떻게 나올지 확인하거나 오프라인에서 작업하려면, 가짜 백엔드나 Aer를 사용하세요.
- 두 가지를 모두 수행하려면, 가짜 백엔드를 사용하여 회로와 결과를 반복적으로 테스트한 다음, 실제 QPU를 사용하기 전 마지막 확인 단계로 시뮬레이션을 실행하십시오.
흔히 헷갈리는 점들
- 모의 장치는 시뮬레이터가 아닙니다. 그 결과는 무작위이므로, 에서 벨 회로를 표본 추출하더라도 벨 분포가 나오지 않습니다
mock_phoenix. 현실감 있는 노이즈가 섞인 출력을 원한다면, 가짜 백엔드를 사용하세요. - 가상 백엔드는 실제 장치가 아닙니다. 이 보정 값은 특정 시점의 데이터이므로 최신 정보가 아닐 수 있습니다. 모의 장치가 실제 보정 상태를 추적하므로, 트랜스파일된 회로와 타이밍이 현재 QPU가 인식하는 내용과 일치합니다.
- 둘 다 실제 하드웨어에서는 실행되지 않습니다. 둘 다 QPU 시간을 소모하지는 않지만, 시뮬레이션 작업만 해당 서비스를 거칩니다.
usage_estimation이는 모의 운영 시 산출된 추정치가 아닙니다. 시뮬레이션 작업의 경우, 실제 QPU에서 해당 작업에 청구될 사용 시간을 초 단위로job.usage()반환합니다.
유스 케이스
학생 및 강좌
관리자는 인스턴스를 생성하거나 편집할 때 QPU 사용자 지정 토글을 사용하여 해당 인스턴스를 모의 장치로만 제한합니다. 그런 다음 학생들은 실제 QPU 시간이나 RU를 소모하지 않고도 자신의 페이로드를 종단 간으로 검증합니다. 인스턴스는 모의 장치에만 접근할 수 있으므로, 학생들은 백엔드의 모의 이름을 기준으로 백엔드를 선택합니다:
backend = service.backend("mock_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)프로젝트 계획
프로젝트를 시작하려는 팀은 계획이나 자원 배분을 결정하기 전에, 프로젝트에 필요한 RU를 파악하기 위해 대표적인 작업들에 대해 모의 실행을 수행합니다:
backend = service.backend("ibm_phoenix")
sampler = Sampler(mode=backend)
job = sampler.run([isa_circuit], dry_run=True)
job.result()
print(job.usage()) 실제 QPU에서 실행하기 전 최종 점검
매개변수를 검증하고 를 사용하여 실행 일정을 확인한 다음 dry_run=True, 인수를 제거하고 실제 QPU에서 실행하십시오. 코드의 다른 부분은 변경되지 않습니다:
sampler = Sampler(mode=backend)
# Pre-flight check
job = sampler.run([isa_circuit], dry_run=True)
job.result()
# Real run - same code, without dry_run
job = sampler.run([isa_circuit])다음 단계
- '로컬 테스트 모드'를 사용하여 자신의 컴퓨터에서 프로그램을 테스트해 보세요.
- 워크로드 사용량이 어떻게 측정되는지 알아보세요.
- 회로 타이밍 일정을 시각화하십시오.
- 리소스 단위와 이용 가능한 요금제를 파악하세요.