빠른 시작
title: 빠른 시작 description: Shaded lightcones Qiskit 애드온(qiskit-addon-slc) 빠른 시작 가이드
이 가이드는 qiskit-addon-slc 패키지의 최소한의 작동 예시를 보여줍니다. 확률적 오류 상쇄(PEC)의 샘플링 비용을 줄이기 위해 shaded lightcone을 계산합니다.
PEC는 역 노이즈 채널의 준확률 분해에서 샘플링하여 게이트 노이즈를 완화합니다. 샘플링 비용은 완화해야 하는 오류 항이 늘어날 때마다 증가하지만, 모든 오류가 관측량에 똑같이 영향을 미치는 것은 아닙니다. 관측량의 인과적 라이트콘 밖에 있는 오류는 측정된 기댓값에 영향을 줄 수 없고, 라이트콘 안에서도 일부 오류가 다른 오류보다 더 해롭습니다. shaded lightcone은 각 Pauli 오류 항이 관측량에 미치는 영향을 경계로 한정하여 이를 정량화합니다. 영향이 가장 작은 오류 항을 잘라내면 PEC가 완화해야 하는 노이즈 모델이 줄어들어, 작고 한정된 편향을 대가로 샘플링 비용이 감소합니다.
현실적인 워크플로를 구성하고 양자 하드웨어에서 실행하는 방법은 IBM Quantum Platform의 Shaded lightcones를 이용한 확률적 오류 상쇄 튜토리얼을 확인하세요.
1. SLC 입력 준비하기
먼저 10큐비트 Trotter화된 횡자기장 Ising 회로를 만들고, 가운데 큐비트에 대한 단일 큐비트 관측량을 선택합니다.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"numpy": "numpy", "qiskit": "qiskit", "qiskit_addon_slc": "qiskit-addon-slc", "samplomatic": "samplomatic"}
_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")
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import Pauli
def trotter_ising_circuit(num_qubits, num_steps, rx_angle, rzz_angle):
"""Trotterized transverse-field Ising evolution on a 1D chain."""
circuit = QuantumCircuit(num_qubits)
for _ in range(num_steps):
circuit.rx(rx_angle, range(num_qubits))
circuit.barrier()
for start in (0, 1): # even then odd bonds
for i in range(start, num_qubits - 1, 2):
circuit.rzz(rzz_angle, i, i + 1)
circuit.barrier()
return circuit
num_qubits = 10
circuit = trotter_ising_circuit(
num_qubits, num_steps=4, rx_angle=np.pi / 16, rzz_angle=-np.pi / 3
)
# Measure <Z> on the middle qubit
observable = Pauli("I" * num_qubits).compose("Z", [num_qubits // 2])
print(f"Observable: {observable}")
circuit.draw("mpl", fold=-1, scale=0.7)
Observable: IIIIZIIIII

SLC는 회로에서 노이즈가 있는 두 큐비트 게이트 층에 대해 동작합니다. 여기서는 samplomatic을 사용해 게이트를 주석이 달린 박스로 묶고 각 두 큐비트 층에 노이즈 주입 주석을 붙입니다. SLC는 노이즈가 있는 모든 박스가 고유한 modifier_ref를 가질 것을 요구하며, 이는 inject_noise_strategy="individual_modification"이 제공합니다. samplomatic의 기본 전략을 사용하면 경계가 잘못 계산되거나 계산이 끝나지 않습니다. 그런 다음 generate_noise_model_paulis가 노이즈가 있는 모든 고유 층의 Pauli 오류 항을 열거합니다.
from qiskit_addon_slc.utils import generate_noise_model_paulis
from samplomatic.transpiler import generate_boxing_pass_manager
from samplomatic.utils import find_unique_box_instructions
# Group gates into boxes and annotate each two-qubit layer with a noise-injection point
boxing_pass = generate_boxing_pass_manager(
inject_noise_targets="all",
inject_noise_strategy="individual_modification", # required: one modifier_ref per box
inject_noise_site="after",
twirling_strategy="active",
remove_barriers="never",
)
boxed_circuit = boxing_pass.run(circuit)
# Enumerate the 1- and 2-weight Pauli error terms of each unique noisy layer
noise_model_paulis = generate_noise_model_paulis(
find_unique_box_instructions(boxed_circuit)
)
num_terms = sum(len(paulis) for paulis in noise_model_paulis.values())
print(f"Noisy layers: {len(noise_model_paulis)}")
print(f"Pauli error terms across all layers: {num_terms}")
Noisy layers: 2
Pauli error terms across all layers: 198
2. shaded lightcone 계산하기
shaded lightcone은 노이즈 모델의 각 Pauli 오류 항이 관측량 기댓값에 미치는 영향의 크기에 따라 스케일을 할당하여 구성됩니다. 이 스케일은 각 오류 항의 순방향 및 역방향 오류 경계(아래에서 설명)와 오류율에서 도출됩니다.
-
compute_forward_bounds는 각 오류 항을 회로의 끝까지 순방향으로 발전시켜, 그곳에서 측정되는 관측량에 미치는 영향의 경계를 구합니다. -
compute_backward_bounds는 각 오류 항을 회로의 시작까지 역방향으로 발전시켜, 초기 상태에 미치는 영향의 경계를 구합니다.
merge_bounds는 이 둘을 오류 항마다 하나의 경계로 결합합니다. 각 경계는 해당 항의 오류율로 스케일됩니다. 이 오류율은 보통 노이즈 학습 실험(예: NoiseLearnerV3)에서 얻으며, 이 가이드에서는 간단히 하기 위해 임의의 오류율을 사용합니다.
from qiskit.quantum_info import PauliLindbladMap, QubitSparsePauliList
from qiskit_addon_slc.bounds import (
compute_backward_bounds,
compute_forward_bounds,
merge_bounds,
)
forward_bounds = compute_forward_bounds(
boxed_circuit, noise_model_paulis, observable
)
backward_bounds = compute_backward_bounds(boxed_circuit, noise_model_paulis)
# Stand-in for rates that would be measured by a noise-learning experiment on hardware
rng = np.random.default_rng(42)
noise_rates = {
layer_id: PauliLindbladMap.from_components(
rng.random(len(paulis)) * 5e-3,
QubitSparsePauliList.from_sparse_list(
paulis.to_sparse_list(), paulis.num_qubits
),
)
for layer_id, paulis in noise_model_paulis.items()
}
merged_bounds = merge_bounds(
boxed_circuit, forward_bounds, backward_bounds, noise_rates
)
Optimal spacetime partitioning not implemented!Just partitioning list of noisy boxes.
아래 shaded lightcone 시각화에서는 각 박스가 해당 위치의 오류가 관측량에 얼마나 강하게 영향을 줄 수 있는지에 따라 음영이 칠해집니다. 밝은 박스는 가장 큰 경계를 가지며, 배경으로 사라지는 박스는 계산에 거의 영향을 주지 않는 오류 항을 포함합니다. 이러한 오류는 노이즈 모델에서 제외할 자연스러운 후보입니다. 아래 시각화의 값은 해당 위치의 모든 Pauli 오류의 경계를 합한 값이며, 그래서 일부 값은 단일 Pauli 오류의 경계인 2.0보다 커집니다.
from qiskit_addon_slc.visualization import draw_shaded_lightcone
draw_shaded_lightcone(
boxed_circuit, merged_bounds, noise_model_paulis, fold=-1, scale=0.5
)

3. 샘플링 비용 줄이기
compute_local_scales는 shaded lightcone을 구체적인 PEC 구성으로 바꿉니다. 관측량에 대한 한정된 영향에 따라 오류 항의 우선순위를 정하고, 요청한 bias_tolerance에 도달할 때까지 영향이 가장 작은 항을 잘라냅니다. 이 함수는 각 오류 항의 스케일을 반환합니다. 완화 중 무시할 항은 0.0, 완화해야 하는 항은 -1.0입니다. 또한 그 결과의 샘플링 비용 오버헤드()와, 잘라내기로 인해 발생하는 잔여 편향의 경계도 함께 반환합니다.
bias_tolerance=0.0으로 설정하면 관측량의 인과적 라이트콘 안에 있는 모든 오류 항을 완화하며 기준 샘플링 비용을 얻습니다. 작은 편향을 허용하면 SLC가 영향이 작은 항을 제외하여 그 비용을 더 줄일 수 있습니다.
from qiskit_addon_slc.bounds import compute_local_scales
_, full_cost, full_bias = compute_local_scales(
boxed_circuit, merged_bounds, noise_rates, bias_tolerance=0.0
)
local_scales, reduced_cost, reduced_bias = compute_local_scales(
boxed_circuit, merged_bounds, noise_rates, bias_tolerance=0.05
)
print(
f"Full PEC (bias_tolerance=0.0) : sampling cost {full_cost:6.3f}, residual bias {full_bias:5.3f}"
)
print(
f"Shaded (bias_tolerance=0.05): sampling cost {reduced_cost:6.3f}, residual bias {reduced_bias:5.3f}"
)
print(
f"\nSampling-cost reduction: {(1 - reduced_cost / full_cost):.0%} for <= 0.05 bias"
)
Full PEC (bias_tolerance=0.0) : sampling cost 21.206, residual bias 0.000
Shaded (bias_tolerance=0.05): sampling cost 5.403, residual bias 0.049
Sampling-cost reduction: 75% for <= 0.05 bias