Estimator 옵션 지정
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
옵션을 사용하여 Estimator 프리미티브를 사용자 정의할 수 있습니다. 프리미티브의 run() 메서드 인터페이스는 모든 구현에서 공통적이지만 옵션은 그렇지 않습니다. qiskit.primitives.BaseEstimatorV2 및 qiskit_aer.BaseEstimatorV2 옵션에 대한 정보는 API 참조를 참조하세요.
Notes :
- Estimator 초기화 중 또는 초기화 후에 사용 가능한 옵션을 확인하고 옵션 값을 업데이트할 수 있습니다.
update()메서드를 사용하여options속성에 변경 사항을 적용하세요.- 옵션 값을 지정하지 않으면
Unset이라는 특수 값이 부여되고 서버 기본값이 사용됩니다. options속성은 Python의dataclass타입입니다. 내장된asdict메서드를 사용하여 딕셔너리로 변환할 수 있습니다.
Estimator 옵션 설정
Estimator 초기화 시, 초기화 후, 또는 (precision에 한해) run() 메서드에서 옵션을 설정할 수 있습니다.
프리미티브 초기화
Estimator 초기화 시 옵션 클래스의 인스턴스 또는 딕셔너리를 전달할 수 있으며, 이 경우 해당 옵션의 복사본이 만들어집니다. 따라서 원본 딕셔너리나 옵션 인스턴스를 변경해도 프리미티브가 소유한 옵션에는 영향을 미치지 않습니다.
옵션 클래스
EstimatorV2 클래스의 인스턴스를 생성할 때 옵션 클래스의 인스턴스를 전달할 수 있습니다. 해당 옵션은 run()을 사용하여 계산을 수행할 때 적용됩니다. 옵션은 options.option.sub-option.sub-sub-option = choice 형식으로 지정하세요. 예를 들어: options.dynamical_decoupling.enable = True
예시:
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
options = EstimatorOptions(
resilience_level=2,
resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)
# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]
estimator = Estimator(mode=backend, options=options)
딕셔너리
Estimator 초기화 시 옵션을 딕셔너리로 지정할 수 있습니다.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Setting options during initialization
estimator = Estimator(
backend,
options={
"resilience_level": 2,
"resilience": {
"zne_mitigation": True,
"zne": {"noise_factors": [1, 3, 5]},
},
},
)
초기화 후 옵션 업데이트
자동 완성 기능을 활용하려면 estimator.options.option.sub-option.sub-sub-option = choice 형식으로 옵션을 지정하거나, update() 메서드를 사용하여 일괄 업데이트할 수 있습니다.
프리미티브 초기화 후에 옵션을 설정하는 경우 EstimatorV2 옵션 클래스(EstimatorOptions)를 인스턴스화할 필요가 없습니다.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
estimator = Estimator(mode=backend)
# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
default_precision=0.02, resilience={"zne_mitigation": True}
)
Run() 메서드
run()에 전달할 수 있는 값은 인터페이스에서 정의된 값들뿐입니다. 즉, Estimator의 경우 precision입니다. 이는 현재 실행에서 default_precision에 설정된 모든 값을 덮어씁니다.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
observable = SparsePauliOp("Z" * 3)
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)
estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
[(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
precision=0.02,
)
<RuntimeJobV2('d7amh42k86tc73a1sa20', 'estimator')>
특수 케이스: precision
EstimatorV2.run 메서드는 두 가지 인수를 받습니다: PUB 목록 (각각 precision에 대한 PUB별 값을 지정할 수 있음)과 precision 키워드 인수입니다. 이 precision 값들은 Estimator 실행 인터페이스의 일부이며 Runtime Estimator의 옵션과 독립적입니다. Estimator 추상화를 준수하기 위해 옵션으로 지정된 모든 값보다 우선합니다.
그러나 PUB 또는 run 키워드 인수에서 precision이 지정되지 않은 경우 (또는 모두 None인 경우), 옵션의 precision 값이 사용되며, 특히 default_precision이 사용됩니다.
이 precision 파라미터들은 목표 precision을 지정하기 위한 것이며, 결과가 지정된 precision에 도달한다는 보장은 없습니다.
Estimator 옵션에는 default_shots와 default_precision이 모두 포함되어 있습니다. 그러나 gate-twirling이 기본적으로 활성화되어 있으므로 num_randomizations와 shots_per_randomization의 곱이 이 두 옵션보다 우선합니다.
구체적으로 Estimator PUB에 대해:
- PUB가 precision을 지정한 경우, 그 값을 사용합니다.
run에서 precision 키워드 인수가 지정된 경우, 그 값을 사용합니다.twirling이 활성화된 경우 (기본적으로 True),twirling옵션에서 지정된num_randomizations와shots_per_randomization의 곱이 사용됩니다.estimator.options.default_shots가 지정된 경우, 그 값을 사용하여 데이터 양을 제어합니다.estimator.options.default_precision이 지정된 경우, 그 값을 사용합니다.
예를 들어, 네 곳 모두에서 precision이 지정된 경우 가장 높은 우선순위를 가진 것 (PUB에서 지정된 precision)이 사용됩니다.
PUB 및 run에서 지정된 precision이 더 높은 우선순위를 갖지만, twirling이 활성화되어 있고 num_randomizations와 shots_per_randomization의 곱이 지정된 precision을 달성하는 데 필요한 shots보다 작으면 작업이 실패합니다. 이 시나리오에서 EstimatorV2는 지정된 num_randomizations 사이에 shots를 할당할 수 없습니다.
Precision은 사용량과 반비례합니다. 즉, precision이 낮을수록 실행에 더 많은 QPU 시간이 걸립니다.
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
observable = SparsePauliOp("Z" * 3)
circuit = random_iqp(3)
circuit.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})
# Run with precision=0.02, overwriting the default.
estimator.run(
[(isa_circuit, isa_observable1)],
precision=0.02,
)
<RuntimeJobV2('d8286b00bvlc73d1vn50', 'estimator')>
모든 오류 완화 및 오류 억제 끄기
예를 들어 자체적인 완화 기법을 연구하고 있는 경우 모든 오류 완화 및 억제를 끌 수 있습니다. 이를 위해 resilience_level = 0을 설정하세요.
예시:
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
# Define the service. This allows you to access an IBM QPU.
service = QiskitRuntimeService()
# Get a backend
backend = service.least_busy(operational=True, simulator=False)
# Define Estimator
estimator = Estimator(backend)
options = estimator.options
# Turn off all error mitigation and suppression
options.resilience_level = 0
사용 가능한 옵션
다음 표는 qiskit-ibm-runtime의 최신 버전에서 사용 가능한 옵션을 문서화합니다. 이전 옵션 버전을 보려면 qiskit-ibm-runtime API 참조를 방문하여 이전 버전을 선택하세요.
default_shots
default_precision
precision을 지정하지 않는 PUB 또는 run() 호출에 사용할 기본 precision.
선택지: 부동 소수점 > 0
기본값: 0.015625 (1 / sqrt(4096))
dynamical_decoupling
dynamical decoupling 오류 완화 설정을 제어합니다.
dynamical_decoupling.enable
선택지: True, False
기본값: False
dynamical_decoupling.extra_slack_distribution
선택지: middle, edges
기본값: middle
dynamical_decoupling.scheduling_method
선택지: asap, alap
기본값: alap
dynamical_decoupling.sequence_type
선택지: XX, XpXm, XY4
기본값: XX
dynamical_decoupling.skip_reset_qubits
선택지: True, False
기본값: False
environment
environment.callback
Job ID와 Job result를 받는 호출 가능 함수.
선택지: None
기본값: None
environment.job_tags
태그 목록.
선택지: None
기본값: None
environment.log_level
선택지: DEBUG, INFO, WARNING, ERROR, CRITICAL
기본값: WARNING
environment.private
선택지: True, False
기본값: False
execution
execution.init_qubits
각 shot에 대해 qubit을 기저 상태로 초기화할지 여부.
선택지: True, False
기본값: True
execution.rep_delay
측정과 이후 양자 circuit 사이의 지연.
선택지: backend.rep_delay_range에서 제공하는 범위의 값
기본값: backend.default_rep_delay로 지정
max_execution_time
resilience
resilience 전략을 미세 조정하기 위한 고급 resilience 옵션.
resilience.layer_noise_learning
레이어 노이즈 학습 옵션.
resilience.layer_noise_learning.layer_pair_depths
선택지: [0, 200] 범위의 2-10개 값의 list[int]
기본값: (0, 1, 2, 4, 16, 32)
resilience.layer_noise_learning.max_layers_to_learn
선택지: None, 정수 >= 1
기본값: 4
resilience.layer_noise_learning.num_randomizations
선택지: 정수 >= 1
기본값: 32
resilience.layer_noise_learning.shots_per_randomization
선택지: 정수 >= 1
기본값: 128
resilience.layer_noise_model
선택지: NoiseLearnerResult, Sequence[LayerError]
기본값: None
resilience.measure_mitigation
선택지: True, False
기본값: True
resilience.measure_noise_learning
측정 노이즈 학습 옵션.
resilience.measure_noise_learning.num_randomizations
선택지: 정수 >= 1
기본값: 32
resilience.measure_noise_learning.shots_per_randomization
선택지: 정수, auto
기본값: auto
resilience.pec_mitigation
선택지: True, False
기본값: False
resilience.pec
확률적 오류 취소 완화 옵션.
resilience.pec.max_overhead
선택지: None, 정수 >= 1
기본값: 100
resilience.pec.noise_gain
선택지: auto, [0, 1] 범위의 부동 소수점
기본값: auto
resilience.zne_mitigation
선택지: True, False
기본값: False
resilience.zne
resilience.zne.amplifier
선택지: gate_folding, gate_folding_front, gate_folding_back, pea
기본값: gate_folding
resilience.zne.extrapolated_noise_factors
선택지: 부동 소수점 목록
기본값: [0, *noise_factors]
resilience.zne.extrapolator
선택지: 다음 중 하나 이상: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback
기본값: (exponential, linear)
resilience.zne.noise_factors
선택지: 부동 소수점 목록; 각 부동 소수점 >= 1
기본값: PEA의 경우 (1, 1.5, 2), 그 외에는 (1, 3, 5)
resilience_level
오류에 대한 resilience 수준. 수준이 높을수록 더 긴 처리 시간을 대가로 더 정확한 결과를 얻습니다. 자세한 내용은 Noise management 주제의 resilience 수준 섹션을 참조하세요.
선택지: 0, 1, 2
기본값: 1
seed_estimator
simulator
백엔드를 시뮬레이션할 때 전달할 옵션
simulator.basis_gates
선택지: 풀어낼 기저 게이트 이름 목록
기본값: Qiskit Aer 시뮬레이터가 지원하는 모든 기저 게이트 세트
simulator.coupling_map
선택지: 방향성 있는 2-qubit 상호작용 목록
기본값: None (연결 제약 없음, 완전 연결을 의미)
simulator.noise_model
선택지: Qiskit Aer NoiseModel, 또는 그 표현
기본값: None
simulator.seed_simulator
선택지: 정수
기본값: None
twirling
Twirling 옵션
twirling.enable_gates
선택지: True, False
기본값: False
twirling.enable_measure
선택지: True, False
기본값: True
twirling.num_randomizations
선택지: auto, 정수 >= 1
기본값: auto
twirling.shots_per_randomization
선택지: auto, 정수 >= 1
기본값: auto
twirling.strategy
선택지: active, active-circuit, active-accum, all
기본값: active-accum
experimental
실험적 옵션 (사용 가능한 경우).
기능 호환성
특정 런타임 기능은 단일 작업에서 함께 사용할 수 없습니다. 선택한 기능과 호환되지 않는 기능 목록을 보려면 적절한 탭을 클릭하세요:
분수 게이트
다음과 호환되지 않습니다:
- 게이트 twirling
- PEA
- PEC
게이트 폴딩 ZNE
커스텀 게이트를 사용할 때 작동하지 않을 수 있습니다. 다음과 호환되지 않습니다:
- PEA
- PEC
게이트 twirling
다음과 호환되지 않습니다:
- 분수 게이트
- 스트레치
기타 참고 사항:
- 측정 twirling은 터미널 측정에만 적용할 수 있습니다.
- 비-Clifford 엔탱글러와 작동하지 않습니다.
PEA
다음과 호환되지 않습니다:
- 분수 게이트
- 게이트 폴딩 ZNE
- PEC
PEC
다음과 호환되지 않습니다:
- 분수 게이트
- 게이트 폴딩 ZNE
- PEA
다음 단계
EstimatorV2메서드에 대한 자세한 내용은 Estimator API 참조를 참조하세요.- 작업을 실행할 실행 모드를 결정합니다.
- Estimator를 사용한 노이즈 관리에 대해 알아봅니다.