Skip to main content
IBM Quantum Platform

로컬 테스트 모드

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

    qiskit[all]~=2.5.2
    qiskit-ibm-runtime~=0.47.0
    qiskit-aer~=0.17
    

로컬 테스트 모드( qiskit-ibm-runtime v0.22.0 이상에서 사용 가능)를 사용하여 프로그램을 미세 조정하고 실제 양자 하드웨어로 전송하기 전에 프로그램을 테스트하세요. 로컬 테스트 모드를 사용하여 프로그램을 검증한 후에는 백엔드 이름만 변경하면 QPU에서 실행할 수 있습니다.

Note

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에서만 사용할 수 있으며 cuQuantum cuTensorNet API를 사용하여 가속됩니다.

참고
  • 로컬 테스트 모드에서는 ‘ IBM Quantum Compute ’의 모든 옵션을 지정할 수 있습니다. 클라이언트 측 및 Sampler Estimator ( 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 백엔드를 인스턴스화합니다. 원하는 경우 노이즈 모델을 구축할 수 있습니다.

Caution

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 시간을 할당하기 전에 모의 백엔드 환경에서 다양한 오류 완화 방법을 시험해 볼 수 있습니다.

Note

기존의 서버 측 기본 기능을 사용할 때는, 완화 처리가 서버에서만 수행되었기 때문에 로컬 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에서 실행하기 전 마지막 점검 단계로 드라이런 작업을 실행하는 것입니다. 전체적인 비교를 보려면 ‘모의 장치와 가짜 백엔드의 비교’를 참조하십시오.


다음 단계

권장사항
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.