주 콘텐츠로 건너뛰기

Estimator 옵션 지정

패키지 버전

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

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1

옵션을 사용하여 Estimator 프리미티브를 사용자 정의할 수 있습니다. 프리미티브의 run() 메서드 인터페이스는 모든 구현에서 공통적이지만 옵션은 그렇지 않습니다. qiskit.primitives.BaseEstimatorV2qiskit_aer.BaseEstimatorV2 옵션에 대한 정보는 API 참조를 참조하세요.

Notes :

Estimator 프리미티브에서 옵션 지정에 관한 참고 사항
  • 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_shotsdefault_precision이 모두 포함되어 있습니다. 그러나 gate-twirling이 기본적으로 활성화되어 있으므로 num_randomizationsshots_per_randomization의 곱이 이 두 옵션보다 우선합니다.

구체적으로 Estimator PUB에 대해:

  1. PUB가 precision을 지정한 경우, 그 값을 사용합니다.
  2. run에서 precision 키워드 인수가 지정된 경우, 그 값을 사용합니다.
  3. twirling이 활성화된 경우 (기본적으로 True), twirling 옵션에서 지정된 num_randomizationsshots_per_randomization의 곱이 사용됩니다.
  4. estimator.options.default_shots가 지정된 경우, 그 값을 사용하여 데이터 양을 제어합니다.
  5. estimator.options.default_precision이 지정된 경우, 그 값을 사용합니다.

예를 들어, 네 곳 모두에서 precision이 지정된 경우 가장 높은 우선순위를 가진 것 (PUB에서 지정된 precision)이 사용됩니다.

참고

PUB 및 run에서 지정된 precision이 더 높은 우선순위를 갖지만, twirling이 활성화되어 있고 num_randomizationsshots_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

circuit 구성당 사용할 총 shot 수.

선택지: 정수 >= 0

기본값: None

default_shots API 문서

default_precision

precision을 지정하지 않는 PUB 또는 run() 호출에 사용할 기본 precision.

선택지: 부동 소수점 > 0

기본값: 0.015625 (1 / sqrt(4096))

default_precision API 문서

dynamical_decoupling

dynamical decoupling 오류 완화 설정을 제어합니다.

dynamical_decoupling API 문서

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 API 문서

environment.callback

Job IDJob result를 받는 호출 가능 함수.

선택지: None

기본값: None

environment.job_tags

태그 목록.

선택지: None

기본값: None

environment.log_level

선택지: DEBUG, INFO, WARNING, ERROR, CRITICAL

기본값: WARNING

environment.private

선택지: True, False

기본값: False

execution

execution API 문서

execution.init_qubits

각 shot에 대해 qubit을 기저 상태로 초기화할지 여부.

선택지: True, False

기본값: True

execution.rep_delay

측정과 이후 양자 circuit 사이의 지연.

선택지: backend.rep_delay_range에서 제공하는 범위의 값

기본값: backend.default_rep_delay로 지정

max_execution_time

작업 실행 시간 제한 (초). 자세한 내용은 최대 실행 시간 가이드를 참조하세요.

선택지: [1, 10800] 범위의 정수 (초)

기본값: 10800 (3시간)

resilience

resilience 전략을 미세 조정하기 위한 고급 resilience 옵션.

resilience API 문서

resilience.layer_noise_learning

레이어 노이즈 학습 옵션.

resilience.layer_noise_learning API 문서

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 API 문서

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 API 문서

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

resilience_level API 문서

seed_estimator

선택지: 정수

기본값: None

seed_estimator

simulator

백엔드를 시뮬레이션할 때 전달할 옵션

simulator API 문서

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 API 문서

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

다음 단계

권장 사항