로컬 테스트 모드
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0 qiskit-aer~=0.17
로컬 테스트 모드( qiskit-ibm-runtime v0.22.0 이상에서 사용 가능)를 사용하여 프로그램을 미세 조정하고 실제 양자 하드웨어로 전송하기 전에 프로그램을 테스트하세요. 로컬 테스트 모드를 사용하여 프로그램을 검증한 후에는 백엔드 이름만 변경하면 QPU에서 실행할 수 있습니다.
Executor 프리미티브에 대한 로컬 모드 지원은 v0.50.0qiskit-ibm-runtime 에서 도입되었습니다.
로컬 테스트 모드를 사용하려면, IBM Quantum® 의 프라이미티브나 세션을 인스턴스화할 때 가짜 백엔드 중 하나를 qiskit_ibm_runtime.fake_provider 지정하거나 Qiskit Aer 백엔드를 지정하십시오.
-
가짜 백엔드 :
qiskit_ibm_runtime.fake_provider의 가짜 백엔드는 QPU 스냅샷을 사용하여 IBM® QPU의 동작을 모방합니다. QPU 스냅샷에는 커플링 맵, 기저 게이트, 큐비트 속성 등 QPU에 대한 중요한 정보가 포함되어 있어 트랜스파일러를 테스트하고 QPU의 노이즈 시뮬레이션을 수행하는 데 유용합니다. 스냅샷의 노이즈 모델은 시뮬레이션 중에 자동으로 적용됩니다. -
Aer 시뮬레이터 : 키스킷 에어의 시뮬레이터는 더 큰 회로와 맞춤형 노이즈 모델을 처리할 수 있는 고성능 시뮬레이션을 제공합니다. 로컬 테스트 모드에서
AerSimulator을 사용하면 시뮬레이션 방법 옵션 목록을 사용할 수 있습니다. 많은 수의 큐비트가 있는 클리포드 회로를 효율적으로 시뮬레이션하는 방법을 보여주는 클리포드 시뮬레이션 모드 예시를 참조하세요.자세한 내용은
AerSimulator문서를 참조하세요.-
"automatic": 기본 시뮬레이션 방법. 회로 및 노이즈 모델에 따라 시뮬레이션 방법을 자동으로 선택합니다. -
"statevector": 모든 측정값이 회로의 끝에 있는 이상적인 회로에서 측정 결과를 샘플링할 수 있는 고밀도 상태 벡터 시뮬레이션입니다. 노이즈 시뮬레이션의 경우, 각 샷은 노이즈 모델에서 무작위로 샘플링된 노이즈 회로를 샘플링합니다. -
"density_matrix": 모든 측정값이 회로의 끝에 있는 잡음이 많은 회로에서 측정 결과를 샘플링할 수 있는 밀도 매트릭스 시뮬레이션입니다. -
"stabilizer": 잡음 모델의 모든 오차가 클리포드 오차이기도 한 경우 잡음이 있는 클리포드 회로를 시뮬레이션할 수 있는 효율적인 클리포드 안정기 상태 시뮬레이터입니다. -
"extended_stabilizer": 상태를 순위 안정화 상태로 분해하여 클리포드 + T 회로의 대략적인 시뮬레이터입니다. 항의 수는 클리포드(T)가 아닌 게이트의 수에 따라 증가합니다. -
"matrix_product_state": 상태의 행렬 곱 상태(MPS) 표현을 사용하는 텐서 네트워크 상태 벡터 시뮬레이터입니다. 이 작업은 시뮬레이터 옵션에 따라 MPS 본드 치수를 자르거나 자르지 않고 수행할 수 있습니다. 기본 동작은 잘림 없음입니다. -
"unitary": 이상적인 회로의 고밀도 유니타리 매트릭스 시뮬레이션. 이는 초기 양자 상태의 진화가 아닌 회로 자체의 단일 행렬을 시뮬레이션합니다. 이 방법은 게이트 시뮬레이션만 가능하며 측정, 리셋 또는 노이즈는 지원하지 않습니다. -
"superop": 이상적인 또는 잡음이 있는 회로의 고밀도 슈퍼 연산자 매트릭스 시뮬레이션입니다. 이는 초기 양자 상태의 진화가 아닌 회로 자체의 슈퍼 연산자 행렬을 시뮬레이션합니다. 이 방법은 이상적이고 잡음이 많은 게이트와 리셋을 시뮬레이션할 수 있지만 측정은 지원하지 않습니다. -
"tensor_network": 상태 벡터와 밀도 행렬을 모두 지원하는 텐서 네트워크 기반 시뮬레이션입니다. 현재 이 기능은 GPU에서만 사용할 수 있으며 cuQuantumcuTensorNetAPI를 사용하여 가속됩니다.
-
-
로컬 테스트 모드에서는 ‘ IBM Quantum Compute ’의 모든 옵션을 지정할 수 있습니다. 클라이언트 측 및
SamplerEstimator( v0.50.0qiskit-ibm-runtime에서 소개됨)을 사용하면 오류 억제 및 완화 옵션이 로컬에서 구현되므로, QPU 시간을 할당하기 전에 다양한 오류 완화 방법을 로컬에서 테스트해 볼 수 있습니다. 예시는 ‘로컬 환경에서 테스트 오류 완화’를 참조하십시오.이전에는 로컬 시뮬레이터가 레거시(서버 측) 프리미티브를 제외한
shots모든 옵션을 무시했는데, 이는 해당 처리가 서버에서만 이루어졌기 때문입니다. -
가짜 백엔드나 에어 시뮬레이터를 사용하기 전에
pip install qiskit-aer를 실행하여 키스킷 에어를 설치하는 것이 좋습니다. 가짜 백엔드는 가능한 경우 Aer 시뮬레이터를 은밀하게 사용하여 성능을 활용합니다.
가짜 백엔드 예시
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using FakeManilaV2
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
# You can use a fixed seed to get fixed results.
options = {"simulator": {"seed_simulator": 42}}
sampler = Sampler(mode=fake_manila, options=options)
result = sampler.run([isa_qc]).result()AerSimulator 예시
노이즈가 없는 세션의 예입니다:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import Session
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Run the Sampler job locally using AerSimulator.
# Session syntax is supported but ignored because local mode doesn't support sessions.
aer_sim = AerSimulator()
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
with Session(backend=aer_sim) as session:
sampler = Sampler(mode=session)
result = sampler.run([isa_qc]).result()노이즈로 시뮬레이션하려면 QPU(양자 하드웨어)를 지정하고 이를 Aer에 제출하세요. Aer는 해당 QPU의 캘리브레이션 데이터를 기반으로 노이즈 모델을 빌드하고 해당 모델을 사용하여 Aer 백엔드를 인스턴스화합니다. 원하는 경우 노이즈 모델을 구축할 수 있습니다.
QPU는 다양한 종류의 노이즈에 영향을 받을 수 있습니다. 여기에 사용된 키스킷 에어 노이즈 모델은 일부만 시뮬레이션하므로 실제 QPU의 노이즈보다 덜 심각할 수 있습니다.
QPU에서 노이즈 모델을 초기화할 때 어떤 오류가 포함되는지에 대한 자세한 내용은 Aer NoiseModel API 레퍼런스를 참조하세요.
노이즈가 있는 예시입니다:
from qiskit_aer import AerSimulator
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
service = QiskitRuntimeService()
# Specify a QPU to use for the noise model
real_backend = service.least_busy(operational=True, simulator=False)
aer = AerSimulator.from_backend(real_backend)
# Run the Sampler job locally using AerSimulator.
pm = generate_preset_pass_manager(backend=aer, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer)
result = sampler.run([isa_qc]).result()클리포드 시뮬레이션
클리포드 회로를 효율적으로 시뮬레이션하여 검증 가능한 결과를 얻을 수 있기 때문에 클리포드 시뮬레이션은 매우 유용한 도구입니다. 자세한 예시는 키스킷 에어 프리미티브를 사용한 안정기 회로의 효율적인 시뮬레이션을 참조하세요.
예:
import numpy as np
from qiskit.circuit.library import efficient_su2
# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Sampler
# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_sampler import Sampler
n_qubits = 500 # <---- note this uses 500 qubits!
circuit = efficient_su2(n_qubits)
circuit.measure_all()
rng = np.random.default_rng(1234)
params = rng.choice(
[0, np.pi / 2, np.pi, 3 * np.pi / 2],
size=circuit.num_parameters,
)
# Tell Aer to use the stabilizer (Clifford) simulation method
aer_sim = AerSimulator(method="stabilizer")
pm = generate_preset_pass_manager(backend=aer_sim, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=aer_sim)
result = sampler.run([isa_qc]).result()로컬 환경에서 테스트 오류 완화
클라이언트 측 Sampler 및 Estimator ( v0.50.0qiskit-ibm-runtime 에서 소개됨)을 사용하면, 오류 억제 및 완화가 서버가 아닌 클라이언트 측에서 이루어집니다. 그 결과, 이제 이러한 옵션들이 로컬 테스트 모드에서 적용되므로, QPU 시간을 할당하기 전에 모의 백엔드 환경에서 다양한 오류 완화 방법을 시험해 볼 수 있습니다.
기존의 서버 측 기본 기능을 사용할 때는, 완화 처리가 서버에서만 수행되었기 때문에 로컬 resilience.measure_mitigation 시뮬레이터에서 와 같은 옵션을 설정해도 아무런 효과가 없었습니다. 클라이언트 측 기본 요소들은 해당 처리를 로컬에서 수행합니다.
국소적 잡음 시뮬레이션 비용은 큐비트 수에 따라 기하급수적으로 증가하며, 대부분의 노트북으로는 약 32큐비트 이상의 시뮬레이션을 수행할 수 없습니다. 오류 억제 및 완화 방법이 이제 로컬에서 실행되므로, 기본 시뮬레이션에 더해 추가적인 메모리 및 실행 시간 오버헤드가 발생합니다. 로컬 테스트를 관리하기 쉽게 하려면 다음 중 하나를 사용하세요:
- 작은 가짜 백엔드(예
FakeManilaV2: 아래에서 사용된 것과 같은). - 소음이 없는 시뮬레이터.
- 대량의 큐비트까지 확장 가능한 클리포드 시뮬레이션.
다음 예제는 측정 오차 완화 기능을 활성화하고 Estimator 가짜 백엔드에서 이를 실행합니다. 이제 해당 measure_mitigation = True 옵션이 로컬 회로에 적용되었습니다.
from qiskit.circuit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler import generate_preset_pass_manager
# Legacy server-side primitive before qiskit-ibm-runtime v0.50.0
# from qiskit_ibm_runtime import Estimator
# Client-side primitive introduced in qiskit-ibm-runtime v0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
# Bell Circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
observable = SparsePauliOp("ZZ")
# Transpile the circuit and observable for the fake backend
fake_manila = FakeManilaV2()
pm = generate_preset_pass_manager(backend=fake_manila, optimization_level=1)
isa_qc = pm.run(qc)
isa_observable = observable.apply_layout(isa_qc.layout)
# Run the Estimator job locally using FakeManilaV2
estimator = Estimator(mode=fake_manila)
# With the client-side Estimator, this option takes effect locally
estimator.options.resilience.measure_mitigation = True
result = estimator.run([(isa_qc, isa_observable)]).result()실제 테스트와 모의 실행 작업의 비교
로컬 테스트 모드는 사용자의 컴퓨터에서 실행됩니다. 이 방법은 프로그램을 개발하고 디버깅하며, 출력이 어떻게 나올지 확인해 보는 데 유용하지만, 실제 QPU에서 얼마를 청구할지 또는 해당 서비스가 작업을 수락할지 여부는 알 수 없습니다.
로컬 테스트와 달리, 시뮬레이션 작업은 QPU 시간을 전혀 사용하지 않고 IBM Quantum Compute Service를 통해 모의 장치에서 워크로드를 실행하므로, 실제 QPU에서 해당 작업이 소모할 리소스 단위(RU) 수를 확인할 수 있습니다. 또한 요청 시 서비스 측 유효성 검사와 회로 타이밍 일정을 제공합니다.
가상 백엔드 (로컬 테스트) | 모의 장치 (시뮬레이션 작업) | |
|---|---|---|
| 운행 구간 | 로컬, 즉 사용자의 컴퓨터에서 | IBM Quantum Compute Service의 클라우드 |
| 계정 및 인스턴스 | 필수 아님 | 필수 (Flex, Premium 또는 On-Prem ) |
| 결과 | 스냅샷 노이즈 모델을 사용한 노이즈 시뮬레이션 | 예상되는 스키마를 따르는 무작위 데이터. 시뮬레이션이 아닙니다 |
| 사용 사례 보고 | 없음 | job.usage() |
| 작업 유효성 검증 | 고객이 확인한 내용으로 한정됨 | Quantum Compute에서 처리했으며, 실제 작업과 동일합니다 |
일반적인 워크플로는 가짜 백엔드를 사용하여 회로와 결과를 반복적으로 검증한 다음, 실제 QPU에서 실행하기 전 마지막 점검 단계로 드라이런 작업을 실행하는 것입니다. 전체적인 비교를 보려면 ‘모의 장치와 가짜 백엔드의 비교’를 참조하십시오.