实时解码、算法GPU解码器及CUDA-Q QEC中的AI推理增强
实时解码对容错量子计算机至关重要。通过使解码器能够与量子处理器同时以低延迟运行,可以在相干时间内对设备应用校正。这可以防止错误累积,从而避免降低接收结果的价值。可以在线(使用真实量子设备)或离线(使用模拟量子处理器)完成此操作。
为了解决这些问题并促进更好解决方案的研究,CUDA-Q QEC 0.5.0版本包含了一系列改进。这些改进包括:支持在线实时解码、新的GPU加速算法解码器、高性能AI解码器推理基础设施、滑动窗口解码器支持以及更Python化的接口。
使用CUDA-Q QEC实现实时解码
用户可以通过四阶段工作流程执行实时解码:检测子错误模型生成、解码器配置、解码器加载与初始化、实时解码。
首先,对设备在运行期间的错误行为进行表征。使用辅助函数,可以根据量子码、噪声模型和电路参数生成检测子错误模型。该函数会生成一个完整的DEM,将错误机制映射到症状模式。
# 步骤1:生成检测子错误模型
print("Step 1: Generating DEM...")
cudaq.set_target("stim")
noise = cudaq.NoiseModel()
noise.add_all_qubit_channel("x", cudaq.Depolarization2(0.01), 1)
dem = qec.z_dem_from_memory_circuit(code, qec.operation.prep0, 3, noise)
下一步是选择解码器并进行配置。使用DEM配置解码器,然后将此配置保存到YAML文件中。该文件确保解码器能够正确解释症状测量结果。
# 创建解码器配置
config = qec.decoder_config()
config.id = 0
config.type = "nv-qldpc-decoder"
config.block_size = dem.detector_error_matrix.shape[1]
# ... 更多配置参数
在电路执行之前,加载YAML文件。CUDA-Q QEC解释这些信息,在解码器中设置适当的实现,并将其注册到CUDA-Q运行时。
# 保存解码器配置
with open("config.yaml", 'w') as f:
f.write(config.to_yaml_str(200))
现在可以开始执行量子电路。在CUDA-Q内核内部,解码API与解码器交互。当测量逻辑量子比特的稳定子时,症状被加入相应解码器的队列进行处理。当需要校正时,解码器会建议对逻辑量子比特应用的操作。
# 加载配置并运行电路
qec.configure_decoders_from_file("config.yaml")
run_result = cudaq.run(qec_circuit, shots_count=10)
GPU加速的RelayBP解码器
RelayBP通过在图的每个节点引入记忆强度概念来修改置信传播方法,控制每个节点记住或遗忘过往信息的程度。这能够抑制或打破通常使BP陷入陷阱并阻止其收敛的有害对称性。
用户可以轻松实例化RelayBP解码器:
import numpy as np
import cudaq_qec as qec
# 用于演示的简单3x7奇偶校验矩阵
H_list = [[1, 0, 0, 1, 0, 1, 1], [0, 1, 0, 1, 1, 0, 1],
[0, 0, 1, 0, 1, 1, 1]]
H = np.array(H_list, dtype=np.uint8)
# 配置中继参数
srelay_config = {
'pre_iter': 5, # 在中继腿之前运行5次gamma0迭代
'num_sets': 3, # 使用3个中继腿
'stopping_criterion': 'FirstConv' # 首次收敛后停止
}
# 创建使用Relay-BP的解码器
decoder_relay = qec.get_decoder("nv-qldpc-decoder",
H,
use_sparsity=True,
bp_method=3,
composition=1,
max_iterations=50,
gamma0=0.3,
gamma_dist=[0.1, 0.5],
srelay_config=srelay_config,
bp_seed=42)
print(" Created decoder with Relay-BP (gamma_dist, FirstConv stopping)")
# 解码一个症状
syndrome = np.array([1, 0, 1], dtype=np.uint8)
decoded_result = decoder_relay.decode(syndrome)
AI解码器推理
用户可以通过生成训练数据、训练模型并将模型导出为ONNX格式来开发AI解码器。完成后,使用基于NVIDIA TensorRT的CUDA-Q QEC AI解码器推理引擎来运行低延迟的AI解码器。
CUDA-Q QEC近期引入了支持离线解码的集成AI解码器推理基础设施。现在可以轻松地使用CUDA-Q QEC和模拟量子计算机运行任何保存为ONNX文件的AI解码器。
import cudaq_qec as qec
import numpy as np
# 注意:AI解码器不使用奇偶校验矩阵。
# 此处提供占位矩阵以满足API要求。
H = np.array([[1, 0, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 1, 0, 1],
[0, 0, 1, 0, 1, 1, 1]], dtype=np.uint8)
# 从ONNX模型创建TensorRT解码器
decoder = qec.get_decoder("trt_decoder", H,
onnx_load_path="ai_decoder.onnx")
# 解码一个症状
syndrome = np.array([1.0, 0.0, 1.0], dtype=np.float32)
result = decoder.decode(syndrome)
print(f"Predicted error: {result}")
滑动窗口解码
滑动窗口解码器使解码器能够处理跨多个症状提取轮次的电路级噪声。这些解码器在收到完整测量序列之前处理症状,这有助于降低总体延迟,但代价是可能会增加逻辑错误率。随着0.5.0版本中滑动窗口解码器的引入,用户现在可以使用任何其他CUDA-Q解码器作为“内部”解码器进行实验,并且可以通过简单的参数更改来改变窗口大小。
import cudaq
import cudaq_qec as qec
import numpy as np
cudaq.set_target('stim')
num_rounds = 5
code = qec.get_code('surface_code', distance=num_rounds)
noise = cudaq.NoiseModel()
noise.add_all_qubit_channel("x", cudaq.Depolarization2(0.001), 1)
statePrep = qec.operation.prep0
dem = qec.z_dem_from_memory_circuit(code, statePrep, num_rounds, noise)
inner_decoder_params = {'use_osd': True, 'max_iterations': 50, 'use_sparsity': True}
opts = {
'error_rate_vec': np.array(dem.error_rates),
'window_size': 1,
'num_syndromes_per_round': dem.detector_error_matrix.shape[0] // num_rounds,
'inner_decoder_name': 'nv-qldpc-decoder',
'inner_decoder_params': inner_decoder_params,
}
swdec = qec.get_decoder('sliding_window', dem.detector_error_matrix, **opts)
开始使用CUDA-Q QEC
CUDA-Q QEC 0.5.0为量子错误校正研究人员和QPU操作员带来了广泛的工具,以加速容错量子计算机的操作化研究。可以通过pip install cudaq-qec安装并查阅CUDA-Q QEC文档。FINISHED