Sampler 빠른 시작
Sampler의 핵심 작업은 하나 이상의 양자 Circuit 실행에서 출력 레지스터를 샘플링하는 것입니다. 동적 Circuit과 매개변수화된 Circuit을 입력으로 허용합니다(매개변수화된 Circuit이 제출되는 경우 매개변수 값도 제공해야 합니다). Sampler는 또한 오류 억제를 위한 내장 동적 디커플링 및 트월링을 지원합니다.
이 문서에서는 Sampler를 설정하고, 구성 옵션을 살펴보고, 프로그램에서 호출하는 단계를 설명해요.
Qiskit SamplerV2 및 EstimatorV2 인터페이스의 새로운 구현이 qiskit-ibm-runtime v0.50.0에서 도입되었어요. 이러한 클라이언트 측 프리미티브는 전처리와 후처리 대부분을 클라이언트 측에서 수행하고, 실행은 Executor 프리미티브에 위임해요. 클라이언트 측에서 실행하면 더 높은 투명성, 더 빠른 디버깅 피드백, 더 세밀한 제어를 얻을 수 있어요.
이들은 동일한 API를 구현하므로, 이러한 클라이언트 측 프리미티브는 대부분 기존 서버 측 프리미티브를 그대로 대체할 수 있으며, 유일한 변경 사항은 import 문뿐이에요. 자세한 내용은 서버 측에서 클라이언트 측 Sampler 및 Estimator로 마이그레이션을 참조하세요.
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.
qiskit[all]~=2.5.2
qiskit-ibm-runtime~=0.47.0
Sampler 프리미티브 사용 단계
1. 계정 초기화
먼저 계정을 초기화해야 해요. 그런 다음 사용할 QPU를 선택할 수 있어요.
계정이 아직 설정되지 않은 경우 IBM Cloud 계정 설정 문서의 단계를 따르세요.
새로 지원되는 분수 Gate를 사용하려면 QiskitRuntimeService 인스턴스에서 백엔드를 요청할 때 use_fractional_gates=True를 설정하세요. 예를 들면 다음과 같아요.
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)
이는 실험적 기능으로 향후 변경될 수 있습니다.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_ibm_runtime": "qiskit-ibm-runtime"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
2. Circuit 생성
Sampler 프리미티브에 대한 입력으로 최소 하나의 Circuit이 필요합니다.
import numpy as np
from qiskit.circuit.library import efficient_su2
circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)
Circuit과 Observable은 QPU에서 지원되는 명령만 사용하도록 변환되어야 합니다(명령 집합 아키텍처(ISA) Circuit이라고 함). 이를 위해 트랜스파일러를 사용하세요.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")
>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])
3. IBM Quantum Sampler 초기화
Sampler를 초기화할 때 mode 매개변수를 사용하여 실행할 모드를 지정하세요. 가능한 값은 각각 배치, 세션, Job 실행 모드에 대해 batch, session, 또는 backend 객체입니다. 자세한 내용은 IBM Quantum Compute Service 실행 모드 소개를 참조하세요. 오픈 플랜 사용자는 Session Job을 제출할 수 없습니다.
# 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
sampler = Sampler(mode=backend)
4. Sampler 호출 및 결과 가져오기
다음으로, run() 메서드를 호출하여 출력을 생성합니다. Circuit과 선택적 매개변수 값 집합은 Primitive Unified Bloc (PUB) 튜플로 입력됩니다.
job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")
>>> Job ID: dab7lb6rrl7c7386gjgg
>>> Job Status: QUEUED
result = job.result()
# Get results for the first (and only) PUB
pub_result = result[0]
print(
f"First ten results for the 'meas' output register: "
f"{pub_result.data.meas.get_bitstrings()[:10]}"
)
First ten results for the 'meas' output register: ['1110001000100100100111011000001001000101010000001100010010110011001100110111100000000110001000011001101000110100101110101010011', '1110101100010101010001010111111011000110011010100101001100110101010010101010101110001010100100000000011110101101011000100000100', '1100110011101000110000000100110111101010110001100010111100001101100001010100111001101010101110000101010001001101010101001000100', '1011001001011000000101010111111010011101001111010100001011110011000101110101011001100110011011110011101010000111001111110110011', '1110111011011111101011110101110101010110011001100110101111100100011101100011011100101100101001001111110101111010101110111111011', '0101001110001110010001010100010111011001000000011110000000000001110000010010101101011001000100000001011011101111010010110111110', '1101101001000100010000110001000101010010101011000011000011001010000111100110010101010110100110011010101100001011100110001111011', '1000110011111111100010101010101111001001100001110111101001100111010101010111110110011000110011010010010000100000100010010010101', '0101010100110011110011010000000100011001111100101100101100101111101110100001101101111010100011011000010011111010001100110000010', '0010000111011100000000110000001110001100010011000100101110111111100011001100011001101010011111111100000000011100101101111010100']
다음 단계
- 로컬 테스트 방법을 알아보고 양자 컴퓨터에서 실행하기 전에 테스트하세요.
- 자세한 예제를 검토하세요.
- IBM Quantum Learning의 비용 함수 강의를 통해 프리미티브를 연습하세요.
- Transpile 섹션에서 로컬 트랜스파일 방법을 알아보세요.
- 트랜스파일러 설정 비교 가이드를 시도해 보세요.
- 프리미티브 옵션 사용 방법을 알아보세요.
- Sampler 옵션의 API를 확인하세요.