추정기 빠른 시작
Estimator 기본 함수는 양자 회로에 의해 준비된 상태에 대해 하나 이상의 관측 가능 변수의 기대값을 계산합니다. 매개변수 값이 기본 요소의 입력으로 함께 제공되는 한, 회로에 매개변수를 적용할 수 있습니다.
이 프리미티브에는 동적 디커플링, 파울리 트위링, 게이트 폴딩 ZNE, PEA, PEC 등 여러 가지 내장된 오류 완화 및 억제 기법이 포함되어 있습니다. 또한 비용과 정확도 간의 균형을 손쉽게 조정할 수 있는 resilience_level 옵션을 지원합니다.
이 주제의 단계에서는 Estimator를 설정하는 방법, 구성에 사용할 수 있는 옵션을 살펴보는 방법, 그리고 프로그램에서 Estimator를 호출하는 방법을 설명합니다.
이 페이지의 코드는 다음 요구 사항을 바탕으로 개발되었습니다. 이 버전 이상을 사용하시기를 권장합니다.
qiskit[all]~=2.5.2 qiskit-ibm-runtime~=0.47.0
에스티메이터 프리미티브 사용 방법
1. 계정 초기화
먼저 계정을 초기화해야 합니다. 그런 다음 기대값을 계산하는 데 사용할 QPU를 선택할 수 있습니다.
아직 계정이 없다면 ‘ IBM Cloud 계정 설정’의 단계에 따라 진행해 주세요.
새로 지원되는 분할 게이트 를 사용하려면, QiskitRuntimeService 인스턴스에서 백엔드를 요청할 때 를 use_fractional_gates=True 설정하십시오. 예를 들어,
service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)이 기능은 실험적인 기능이며, 향후 변경될 수 있습니다.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
print(backend.name)Output:
ibm_fez
2. 회로와 관측 가능한 변수를 생성합니다
Estimator 기본 요소에 입력으로 최소한 하나의 회로와 하나의 관측값이 필요합니다.
from qiskit.circuit.library import qaoa_ansatz
from qiskit.quantum_info import SparsePauliOp
entanglement = [tuple(edge) for edge in backend.coupling_map.get_edges()]
observable = SparsePauliOp.from_sparse_list(
[("ZZ", [i, j], 0.5) for i, j in entanglement],
num_qubits=backend.num_qubits,
)
circuit = qaoa_ansatz(observable, reps=2)
# The circuit is parametrized, so we will define the parameter values for execution
param_values = [0.1, 0.2, 0.3, 0.4]회로와 관측량은 QPU에서 지원하는 명령어만 사용하도록 변환되어야 합니다(이를 명령어 집합 아키텍처(ISA) 회로라고 합니다). 이를 위해 트랜스파일러를 사용하세요.
from qiskit.transpiler import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")Output:
>>> Circuit ops (ISA): OrderedDict([('rz', 4472), ('sx', 1884), ('cz', 1120)])
3. IBM Quantum 추정기를 초기화합니다
Estimator를 초기화할 때, 매개변수를 mode 사용하여 실행 모드를 지정하십시오. 가능한 값은 각각 배치, 세션, 작업 실행 모드에 대해 batch, session, 또는 객체입니다 backend . 자세한 내용은 ‘ IBM Quantum Compute 서비스 실행 모드 개요’를 참조하십시오. Open Plan 사용자는 세션 작업을 제출할 수 없으므로 유의하시기 바랍니다.
from qiskit_ibm_runtime import EstimatorV2 as Estimator
estimator = Estimator(mode=backend)4. Estimator를 호출하고 결과를 확인합니다
다음으로, run() 메서드를 호출하여 입력 회로와 관측 변수에 대한 기대값을 계산합니다. 회로, 관측 가능 매개변수 및 선택적 매개변수 값 집합은 기본 통합 블록 ( PUB ) 튜플 형태로 입력됩니다.
job = estimator.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")Output:
>>> Job ID: dab7lfurrl7c7386gjn0
>>> Job Status: QUEUED
result = job.result()
print(f">>> {result}")
print(f" > Expectation value: {result[0].data.evs}")
print(f" > Metadata: {result[0].metadata}")Output:
>>> PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': False, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})
> Expectation value: 28.60306448415693
> Metadata: {'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
다음 단계
- 양자 컴퓨터에서 실행하기 전에 로컬 환경에서 테스트하는 방법을 알아보세요.
- 자세한 예시를 살펴보세요.
- IBM Quantum Learning 의 ‘Cost’ 함수 강의를 따라가며 기본형(primitives)을 연습해 보세요.
- ‘트랜스파일’ 섹션에서 로컬 환경에서 트랜스파일하는 방법을 알아보세요.
- ‘트랜스파일러 설정 비교’ 가이드를 확인해 보세요.
- 기본 옵션 사용법을 알아보세요.
- Estimator 옵션에 대한 API를 확인하세요.