快速结论:在 Ascend NPU、AMD ROCm、Intel XPU 等非 CUDA 加速卡上部署 Open WebUI 并启用 ColBERT reranker 时,reranker 会静默回退到 CPU 运行,表现为重排序环节明显变慢,但不会报错。应优先排查 backend/open_webui/retrieval/models/colbert.py 中的设备选择逻辑是否只判断了 torch.cuda.is_available()。
适用环境:Open WebUI;使用 ColBERT reranker 的 RAG 检索流程;运行在非 CUDA 加速器上(Issue 中列出 Ascend NPU、AMD ROCm、Intel XPU)。Issue 未提供具体的操作系统、Python、PyTorch 或驱动版本。
最快修复方案:暂无确认的一步修复方案。Issue 作者提出的方案是:将设备选择逻辑改为使用 torch.accelerator.current_accelerator(),由框架返回当前实际加速器(如 cuda、npu、xpu),无加速器时回退到 cpu;作者表示会自行提交 PR,但 Issue 讨论中未确认该 PR 已合并。
注意事项:该改动依赖 PyTorch 提供 torch.accelerator API,需确认所用 PyTorch 版本是否支持;Issue 中未给出验证步骤、合并状态或版本号,因此在官方修复落地前,该方案属于可优先尝试的推测性修复,建议在测试环境验证后再上生产。
问题场景
用户在配备非 NVIDIA 加速卡(Ascend NPU、AMD ROCm、Intel XPU)的机器上自托管 Open WebUI,并在 RAG 流程中启用 ColBERT reranker。检索结果的重排序环节运行速度远低于预期,加速卡利用率接近于零,但没有抛出任何异常。作者指出这是性能回退(regression),而不是运行报错。
报错原文
ColBERT reranker silently runs on CPU on non-CUDA accelerators (Ascend/ROCm/XPU)
self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
原因分析
已确认的直接原因:backend/open_webui/retrieval/models/colbert.py 里用一行三目表达式决定计算设备,只检测 CUDA。在 Ascend NPU、AMD ROCm、Intel XPU 等环境下,torch.cuda.is_available() 返回 False,于是设备被设为 cpu,即使系统里存在可用加速器,ColBERT reranker 也会静默在 CPU 上运行。
可能原因(Issue 摘要中关联的其他报告):同仓库的 #8784、#6529、#8365 也分别报告了 rerank 未使用 GPU、rerank 模型跑在 CPU 上导致极慢,以及 ROCm 场景下 reranking 走 CPU 的问题,症状与该设备选择逻辑一致。
环境排查
- 确认 Open WebUI 版本,并定位到
backend/open_webui/retrieval/models/colbert.py,检查其中的设备选择代码。 - 确认加速器类型:Ascend NPU、AMD ROCm 还是 Intel XPU,以及对应的驱动与运行时是否已正确安装。
- 确认 PyTorch 安装版本及其对应的加速后端构建,并检查是否支持
torch.acceleratorAPI。 - 确认同一套栈中其他组件(如嵌入模型)是否已经跑在加速器上,以判断是个例还是全局设备选择问题。
- Issue 未给出具体版本号,以上项目需按实际部署环境自行核对。
解决步骤
- 打开
backend/open_webui/retrieval/models/colbert.py,找到当前设备选择语句:self.device = 'cuda' if torch.cuda.is_available() else 'cpu'。 - 按 Issue 作者的建议,可优先尝试改为使用
torch.accelerator.current_accelerator()来获取框架当前实际使用的加速器(返回cuda、npu、xpu等),当没有可用加速器时回退到cpu。 - 确认所用 PyTorch 版本是否提供
torch.accelerator;若不提供,则该方案不可用。 - 由于 Issue 作者仅表示会提交实现该改动的 PR,讨论中并未确认合并状态,建议先自行在本地或测试环境打补丁验证,或关注上游 PR 与后续版本更新。
- 如果暂时不改代码,可将排查重点放在确认 reranker 是否确实落在 CPU 上(见验证方法),并据此评估是否需要等待官方修复。
验证方法
在修改前后分别观察 ColBERT reranker 实际使用的计算设备:可通过日志或调试输出确认设备是否仍为 cpu,或在重排序阶段监控加速卡的利用率与显存占用。若加速器开始被占用、重排序耗时明显下降,说明设备选择已生效。Issue 讨论中未给出官方验证步骤,以上为通用确认方式。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


