You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Qiskit IBM Runtime会话中使用QuantumKernelTrainer遇RecursionError

问题分析与排查

核心问题定位

你遇到的RecursionError大概率是Qiskit Machine Learning底层代码的 deepcopy 逻辑缺陷,而非你的实现错误——当TrainableFidelityQuantumKernel关联了含噪声模型的Sampler时,QuantumKernelTrainer内部调用copy.deepcopy()会陷入循环引用的递归拷贝。

最小复现代码验证

from qiskit_ibm_runtime import Sampler, Options
from qiskit.providers.fake_provider import FakeVigo
from qiskit_machine_learning.kernels import TrainableFidelityQuantumKernel
from qiskit_machine_learning.kernels.trainable_kernel_trainer import QuantumKernelTrainer
from qiskit.circuit.library import ZZFeatureMap
import numpy as np

# 构建带噪声模型的Sampler选项
fake_backend = FakeVigo()
noise_model = fake_backend.noise_model
sampler_options = Options(noise_model=noise_model)
sampler = Sampler(options=sampler_options)

# 构建可训练量子核
feature_map = ZZFeatureMap(feature_dimension=2)
trainable_kernel = TrainableFidelityQuantumKernel(feature_map=feature_map, sampler=sampler)

# 准备训练数据
X_train = np.random.rand(5, 2)
y_train = np.array([0, 1, 0, 1, 0])

# 初始化训练器并触发错误
trainer = QuantumKernelTrainer(trainable_kernel)
trainer.fit(X_train, y_train)

错误栈关键片段

RecursionError: maximum recursion depth exceeded while calling a Python object
...
File "/usr/lib/python3.8/copy.py", line 153, in deepcopy
    y = copier(x, memo)
File "/usr/lib/python3.8/copy.py", line 215, in _deepcopy_list
    append(deepcopy(a, memo))
File "/usr/lib/python3.8/copy.py", line 153, in deepcopy
    y = copier(x, memo)
...
File "/path/to/qiskit_machine_learning/kernels/trainable_kernel_trainer.py", line XX, in _fit
    kernel_copy = deepcopy(self._quantum_kernel)

临时解决方案

  • 避免直接在Sampler中传入噪声模型:改用Sampler绑定真实噪声后端,而非手动配置noise_model参数
    # 替换原Sampler初始化代码
    from qiskit_ibm_runtime import QiskitRuntimeService
    service = QiskitRuntimeService()
    noisy_backend = service.backend("ibmq_quito")  # 或其他含噪声后端
    sampler = Sampler(backend=noisy_backend)
    
  • 手动规避deepcopy:如果必须手动指定噪声模型,可在训练前临时移除sampler的noise_model,训练完成后再恢复(需注意线程安全)

结论

该问题属于Qiskit Machine Learning的潜在bug——当TrainableFidelityQuantumKernel的Sampler实例包含循环引用的噪声模型对象时,QuantumKernelTrainer的deepcopy操作会触发无限递归。建议提交issue到Qiskit Machine Learning仓库跟进修复。

内容的提问来源于stack exchange,提问作者Rober

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:57:37