오류 완화 및 억제 기법
새로운 실행 모델의 베타 버전이 이제 제공됩니다. 지향적 실행 모델은 오류 완화 워크플로를 사용자 정의할 때 더 많은 유연성을 제공합니다. 자세한 내용은 지향적 실행 모델 가이드를 참조하세요.
패키지 버전
이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 이 버전 이상을 사용하는 것을 권장합니다.
qiskit-ibm-runtime~=0.43.1
오류 완화 및 오류 억제 기법은 더 큰 규모의 워크로드로 확장할 때 결과 품질을 향상시키기 위해 사용됩니다. 이 페이지에서는 Qiskit Runtime을 통해 제공되는 오류 억제 및 오류 완화 기법에 대한 개략적인 설명을 제공합니다.
다음 셀은 Estimator 프리미티브를 가져오고, 이후 코드 셀에서 Estimator를 초기화하는 데 사용할 Backend를 생성합니다.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit-ibm-runtime
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy()
동적 디커플링
양자 Circuit은 IBM® 하드웨어에서 정밀한 시간 간격으로 스케줄링되어 실행되는 마이크로파 펄스 시퀀스로 실행됩니다. 안타깝게도 Qubit 간의 원치 않는 상호 작용으로 인해 유휴 Qubit에 일관성 오류가 발생할 수 있습니다. 동적 디커플링은 유휴 Qubit에 펄스 시퀀스를 삽입하여 이러한 오류의 효과를 근사적으로 상쇄하는 방식으로 작동합니다. 삽입된 각 펄스 시퀀스는 항등 연산에 해당하지만, 펄스의 물리적 존재는 오류를 억제하는 효과가 있습니다. 가능한 펄스 시퀀스 선택지는 매우 다양하며, 각각의 특정 경우에 어떤 시퀀스가 더 적합한지는 활발한 연구 분야로 남아 있습니다.
동적 디커플링은 주로 일부 Qubit이 아무 연산 없이 유휴 상태로 있는 간격을 포함하는 Circuit에 유용합니다. Circuit의 연산이 매우 밀집되어 있어 대부분의 시간 동안 모든 Qubit이 사용 중인 경우, 동적 디커플링 펄스를 추가해도 성능이 향상되지 않을 수 있습니다. 실제로 펄스 자체의 불 완전함으로 인해 성능이 오히려 저하될 수도 있습니다.
아래 다이어그램은 XX 펄스 시퀀스를 사용한 동적 디커플링을 나타냅니다. 왼쪽의 추상 Circuit은 오른쪽 상단의 마이크로파 펄스 스케줄에 매핑됩니다. 오른쪽 하단은 동일한 스케줄이지만 첫 번째 Qubit의 유휴 기간 동안 두 개의 X 펄스 시퀀스가 삽입된 모습입니다.

동적 디커플링은 동적 디커플링 옵션에서 enable을 True로 설정하여 활성화할 수 있습니다. sequence_type 옵션을 사용하여 여러 다른 펄스 시퀀스 중에서 선택할 수 있습니다. 기본 시퀀스 유형은 "XX"입니다.
다음 코드 셀은 Estimator에 대해 동적 디커플링을 활성화하고 동적 디커플링 시퀀스를 선택하는 방법을 보여줍니다.
estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"
파울리 트월링
무작위화 컴파일링이라고도 알려진 트월링은 임의의 노이즈 채널을 더 구체적인 구조를 가진 노이즈 채널로 변환하는 데 널리 사용되는 기법입니다.
파울리 트월링은 파울리 연산을 사용하는 특별한 종류의 트월링입니다. 이는 임의의 양자 채널을 파울리 채널로 변환하는 효과가 있습니다. 단독으로 수행할 경우, 일관성 노이즈는 연산 수에 따라 이차적으로 누적되는 반면 파울리 노이즈는 선형적으로 누적되기 때문에 일관성 노이즈를 완화할 수 있습니다. 파울리 트월링은 임의의 노이즈보다 파울리 노이즈와 더 잘 작동하는 다른 오류 완화 기법과 함께 자주 사용됩니다.
파울리 트월링은 Gate의 이상적인 효과가 동일하게 유지되도록 선택된 Gate 집합을 무작위로 선택된 단일 Qubit 파울리 Gate로 감싸는 방식으로 구현됩니다. 그 결과 단일 Circuit이 동일한 이상적 효과를 갖는 무작위 Circuit 앙상블로 대체됩니다. Circuit을 샘플링할 때 단일 인스턴스가 아닌 여러 무작위 인스턴스에서 샘플이 추출됩니다.

현재 양자 하드웨어의 오류 대부분이 2-Qubit Gate에서 발생하므로, 이 기법은 종종 (기본) 2-Qubit Gate에만 독점적으로 적용됩니다. 다음 다이어그램은 CNOT 및 ECR Gate에 대한 일부 파울리 트월을 나타냅니다. 각 행 내의 모든 Circuit은 동일한 이상적 효과를 가집니다.

파울리 트월링은 트월링 옵션에서 enable_gates를 True로 설정하여 활성화할 수 있습니다. 기타 주목할 만한 옵션은 다음과 같습니다:
num_randomizations: 트월링된 Circuit 앙상블에서 추출할 Circuit 인스턴스 수입니다.shots_per_randomization: 각 Circuit 인스턴스에서 샘플링할 샷 수입니다.
다음 코드 셀은 파울리 트월링을 활성화하고 Estimator에 대해 이러한 옵션을 설정하는 방법을 보여줍니다. 이러한 옵션 중 어느 것도 명시적으로 설정할 필요는 없습니다.
estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100
트월링 판독 오 류 소멸(TREX)
트월링 판독 오류 소멸(TREX)은 파울리 관측값 기댓값 추정에서 측정 오류의 영향을 완화합니다. 이는 트월링된 측정의 개념을 기반으로 하며, 측정 Gate를 (1) 파울리 X Gate, (2) 측정, (3) 고전 비트 플립의 시퀀스로 무작위로 대체하여 구현됩니다. 표준 Gate 트월링과 마찬가지로, 이 시퀀스는 노이즈가 없는 경우 일반 측정과 동일하며, 다음 다이어그램에 묘사되어 있습니다:

판독 오류가 있는 경우, 측정 트월링은 판독 오류 전달 행렬을 대각화하는 효과가 있어 역행렬을 쉽게 구할 수 있습니다. 판독 오류 전달 행렬을 추정하려면 추가 보정 Circuit을 실행해야 하므로 약간의 오버헤드가 발생합니다.
TREX는 Estimator에 대한 Qiskit Runtime 복원력 옵션에서 measure_mitigation을 True로 설정하여 활성화할 수 있습니다. 측정 노이즈 학습 옵션은 여기에 설명되어 있습니다. Gate 트월링과 마찬가지로, Circuit 무작위화 수와 무작위화당 샷 수를 설정할 수 있습니다.
다음 코드 셀은 TREX를 활성화하고 Estimator에 대해 이러한 옵션을 설정하는 방법을 보여줍니다. 이러한 옵션 중 어느 것도 명시적으로 설정할 필요는 없습니다.
estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100
제로 노이즈 외삽(ZNE)
제로 노이즈 외삽(ZNE)은 관측값의 기댓값을 추정할 때 오류를 완화하는 기법입니다. 결과를 향상시키는 경우가 많지만, 편향되지 않은 결과를 보장하지는 않습니다.
ZNE는 두 단계로 구성됩니다:
- 노이즈 증폭: 원래 양자 Circuit이 다른 노이즈 수준에서 여러 번 실행됩니다.
- 외삽: 이상적인 결과는 노이즈가 있는 기댓값 결과를 제로 노이즈 한계로 외삽하여 추정됩니다.
노이즈 증폭 및 외삽 단계 모두 여러 가지 다른 방법으로 구현할 수 있습니다. Qiskit Runtime은 "디지털 Gate 폴딩"으로 노이즈 증폭을 구현합니다. 이는 2-Qubit Gate가 Gate와 그 역행렬의 동일한 시퀀스로 대체됨을 의미합니다. 예를 들어, 유니터리 를 로 대체하면 노이즈 증폭 계수가 3이 됩니다. 외삽의 경우, 선형 적합 또는 지수 적합을 포함한 여러 함수 형식 중에서 선택할 수 있습니다. 아래 이미지는 왼쪽에 디지털 Gate 폴딩을, 오른쪽에 외삽 절차를 묘사합니다.

ZNE는 Estimator에 대한 Qiskit Runtime 복원력 옵션에서 zne_mitigation을 True로 설정하여 활성화할 수 있습니다.
ZNE에 대한 Qiskit Runtime 옵션은 여기에 설명되어 있습니다. 다음 옵션이 주목할 만합니다:
noise_factors: 노이즈 증폭에 사용할 노이즈 계수입니다.extrapolator: 외삽에 사용할 함수 형식입니다.
다음 코드 셀은 ZNE를 활성화하고 Estimator에 대해 이러한 옵션을 설정하는 방법을 보여줍니다. 이러한 옵션 중 어느 것도 명시적으로 설정할 필요는 없습니다.
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"
확률적 오류 증폭(PEA)
ZNE의 주요 과제 중 하나는 대상 Circuit에 영향을 미치는 노이즈를 정확하게 증폭하는 것입니다. Gate 폴딩은 이 증폭을 수행하는 쉬운 방법을 제공하지만, 부정확할 수 있으며 잘못된 결과를 초래할 수 있습니다. 자세한 내용은 "노이즈가 있는 양자 Circuit에 대한 확장 가능한 오류 완화는 경쟁력 있는 기댓값을 생성합니다" 논문, 특히 보충 정보 4페이지를 참조하세요. 확률적 오류 증폭은 노이즈 학습을 통해 오류 증폭에 더 정확한 접근 방식을 제공합니다.
PEA는 예비 실험을 수행하여 노이즈를 재구성한 다음 이 정보를 사용하여 정확한 증폭을 수행하는 더 정교한 기법입니다. Circuit이 실행되기 전에 Circuit의 각 얽힘 Gate 레이어의 트월링된 노이즈 모델을 학습하는 것으로 시작합니다(관련 학습 옵션은 LayerNoiseLearningOptions 참조). 학습 단계 이후 Circuit은 각 노이즈 계수에서 실행되며, 각 Circuit의 모든 얽힘 레이어는 해당 학습된 노이즈 모델에 비례하는 단일 Qubit 노이즈를 확률적으로 주입함으로써 증폭됩니다. 자세한 내용은 "결함 허용 이전 양자 컴퓨팅 유용성의 증거" 논문을 참조하세요.
PEA는 세 단계로 구성됩니다:
- 학습: Circuit의 각 얽힘 Gate 레이어의 트월링된 노이즈 모델이 학습됩니다.
- 노이즈 증폭: 원래 양자 Circuit이 다른 노이즈 계수에서 여러 번 실행됩니다.
- 외삽: 이상적인 결과는 노이즈가 있는 기댓값 결과를 제로 노이즈 한계로 외삽하여 추정됩니다.
유틸리티 규모 실험의 경우, PEA가 종종 최선의 선택입니다.
PEA는 ZNE 노이즈 증폭 기법이므로, resilience.zne_mitigation = True를 설정하여 ZNE도 활성화해야 합니다. 다른 resilience.zne 옵션을 사용하여 외삽기, 증폭 수준 등을 추가로 설정할 수 있습니다. PEA는 프리미티브를 사용할 때 자동으로 생성되는 노이즈 모델이 필요합니다.
다음 스니펫은 PEA를 사용하여 Estimator 작업의 결과를 완화하는 예시를 제공합니다:
estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"
확률적 오류 상쇄(PEC)
확률적 오류 상쇄(PEC)는 관측값의 기댓값을 추정할 때 오류를 완화하는 기법입니다. ZNE와 달리 편향되지 않은 기댓값 추정값을 반환합니다. 그러나 일반적으로 더 큰 오버헤드가 발생합니다.
PEC에서 이상적인 대상 Circuit의 효과는 실제로 구현 가능한 노이즈가 있는 Circuit의 선형 조합으로 표현됩니다:
이상적인 Circuit의 출력은 선형 조합으로 정의된 무작위 앙상블에서 추출된 다양한 노이즈 Circuit 인스턴스를 실행함으로써 재현할 수 있습니다. 계수 가 확률 분포를 형성하는 경우, 앙상블의 확률로 직접 사용할 수 있습니다. 실제로 일부 계수는 음수이므로 대신 준확률 분포를 형성합니다. 여전히 무작위 앙상블을 정의하는 데 사용할 수 있지만, 준확률 분포의 음성도와 관련된 샘플링 오버헤드가 있으며, 이는 다음 수량으로 특성화됩니다:
샘플링 오버헤드는 이상적인 Circuit에서 필요한 샷 수와 비교하여 주어진 정밀도로 기댓값을 추정하는 데 필요한 샷 수의 곱셈 계수입니다. 에 따라 이차적으로 확장되며, 는 Circuit의 깊이에 따라 지수적으로 확장됩니다.
PEC는 Estimator에 대한 Qiskit Runtime 복원력 옵션에서 pec_mitigation을 True로 설정하여 활성화할 수 있습니다.
PEC에 대한 Qiskit Runtime 옵션은 여기에 설명되어 있습니다. max_overhead 옵션을 사용하여 샘플링 오버헤드에 제한을 설정할 수 있습니다. 샘플링 오버헤드를 제한하면 결과의 정밀도가 요청된 정밀도를 초과할 수 있습니다. max_overhead의 기본값은 100입니다.
다음 코드 셀은 PEC를 활성화하고 Estimator에 대해 max_overhead 옵션을 설정하는 방법을 보여줍니다.
estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100