RAGFlow 跑起来之后常见两种卡:一是文档解析排队排到怀疑人生,二是检索问答首字慢到用户以为死机。很多人第一反应是「换张卡」,但 GPU 没配对地方,加了也白加。这篇不重复部署步骤,只讲怎么判断瓶颈在哪、GPU 该挂给哪几个组件、配完怎么验证有没有真提速。
RAGFlow 跑起来之后,最常见的两种卡顿是:文档一多,解析队列排到怀疑人生;检索问答首字慢到用户以为页面挂了。多数人的第一反应是「换张卡」,但 GPU 没配到真正吃力的环节上,加了也白加。这篇不讲怎么装 RAGFlow,只回答一件事:你现在的瓶颈到底在哪、GPU 该挂给谁、配完怎么确认真的快了。
先把心态放平:GPU 加速不是一键开关,而是一次「先定位、再分配、后验收」的调整。下面按判断瓶颈、排优先级、配开关与降级、验收四条线走一遍,每一步都给出可执行动作,照着做基本不会白折腾。
先别买卡:判断你卡在解析还是检索
解析和检索是两个独立链路,慢的原因通常也不在同一个组件上。判断方法很简单:看文档入库任务的堆积速度,和问答首字延迟,哪个先离谱,哪个就是当前瓶颈。别同时动两条链路,否则出了问题你分不清是谁改坏的。
| 观察信号 | 更可能卡在哪 | 先动的方向 |
|---|---|---|
| 入库任务长期排队、文件数不下降 | 解析链路 | 给视觉类解析模型配 GPU |
| 入库正常但问答首字很慢 | 检索链路 | 给向量化与重排配 GPU |
| CPU 长期接近跑满、显存却空着 | 加速点放错位置 | 先迁模型到 GPU 再谈调参 |
| 显存贴顶、任务偶发失败 | 显存不够或并发太大 | 先限并发,再考虑换卡 |
- 解析慢多半卡在 OCR 与版面识别环节,这部分吃 GPU 的方式和纯文本模型不一样,配错了等于没配
- 检索慢多半卡在向量化与重排环节,两者链路不同,一个加速不代表另一个也快
- 用监控看两个硬指标:CPU 是否长期顶格、显存是否长期贴顶;CPU 先满而显存空着,说明攻击方向错了
- 不适用的情况要提前认清:文档量只有几十份、并发问答个位数时,GPU 调度和数据搬运的开销很可能把收益吃掉,这种规模先别折腾
哪几个环节值得挂 GPU,优先级怎么排
不是所有组件都值得占显存。按投入产出排,优先级大致是:文档解析里的视觉类模型排第一,它直接决定入库快不快,批量导入场景提升最明显;文本向量化排第二,它决定检索延迟的下限,但如果你的知识库本身很小,收益有限;重排模型要看有没有开启重排,没开就不用管它。
- 第一步:只动解析先给视觉类解析模型配上 GPU,保持检索链路不变,跑一周看堆积是否缓解
- 第二步:看数据再决定如果入库明显顺畅、检索仍然慢,再考虑给向量化配 GPU;如果两条都不慢,就到此为止
- 第三步:最后看重排只有明确开启了重排、且问答量较大时,才值得给重排模型单独分配资源
- 第四步:别一次全上一次性全开会让问题归因变得极难,回退时也不知道该退哪一个
一个 5 人左右的小团队常见情况是:知识库规模不大、主要靠批量导入文档,那么把资源集中在解析这一侧就够了,检索侧维持现状反而更稳。反过来,如果文档早就入库完毕、日常只是高频问答,那重心就应该放到向量化和重排上。
配置时要盯的几个开关与降级做法
配置阶段最大的坑不是参数写错,而是容器根本看不见显卡。先按正常流程启动一次,再从容器内部确认设备可见性,这一步没过,后面所有配置都是空转。显存分配也要留余量:解析类任务的峰值波动大,贴着上限配,批量导入时容易整批失败。
- 设备可见性
- 容器内能否枚举到显卡,是最容易漏掉的前置检查
- 显存余量
- 解析任务峰值高,留出一部分显存比压满更稳
- CPU 回退
- 显存打满或报设备相关错误时,能一键切回纯 CPU,别让知识库停摆
- 并发上限
- 给解析任务设同时在跑的上限,比让它无限排队更容易稳定出结果
降级路径建议提前写好,而不是等出事再找。触发条件可以定成:显存使用持续贴顶、或任务集中报设备相关错误、或整批任务失败率异常升高,满足任一条就自动切回 CPU 模式先保住可用性,再慢慢排查。
配完怎么验收:三条可量化的检查
验收的核心是「同条件对比」。准备一批固定文档,在纯 CPU 和 GPU 下各跑一次,比对总耗时和失败条数;只跑单次没法说明问题,因为文档本身的大小差异会干扰结论。问答链路则要把向量化、召回、重排各段的耗时拆开看,确认提速确实发生在预期的那一段。
- 同一批文件在两种配置下各跑一次,记录总耗时与失败条数,别只跑一次就下结论
- 把问答链路耗时拆成向量化、召回、重排三段,看提升落在哪一段
- 把无 GPU 的基线和 GPU 后的数字各留一份,后面换卡或调参时有参照
- 延迟基线可以先对照站内的测速工具量一遍,避免自己凭感觉判断快慢
- 验收不通过的典型信号是总耗时没降反升,通常是数据在 CPU 与显存之间来回搬运的开销盖过了计算收益
| 验收项 | 看什么 | 不通过时的动作 |
|---|---|---|
| 入库耗时 | 同一批文档前后对比 | 检查解析模型是否真的跑在 GPU 上 |
| 失败条数 | 批量导入时的报错数量 | 先降并发、留显存余量 |
| 问答首字 | 拆分后的各段耗时 | 确认提速段是否与预期一致 |
| 稳定性 | 长时间运行有无掉卡 | 补上自动回退到 CPU 的路径 |
如果确实需要换卡或调参,先回到站内的价格与配置对照页面核对当时的数字,再决定升级到哪一档,别凭印象下单。很多情况下,把并发上限和显存余量调对,比换更强的卡更解决问题。
下一步想先量一遍当前延迟基线、再决定要不要上 GPU,可以去测速工具跑一轮;要看不同配置档位的差异,到价格追踪页对照当时的数字。→常见问题
加了 GPU 为什么感觉没变快?
先分清瓶颈在哪。多数情况是解析快了解析之后又堵在别的环节,比如向量化写库或者队列调度。还有一种是把小模型放上显卡后,数据传输开销超过了计算收益。建议按解析耗时和问答首字延迟两条线分别量一次,确认提速确实发生在你配的那一段,再去动显卡。
显存不够能不能只加速一部分?
可以,而且这是更稳的做法。优先把解析环节的视觉类模型放上显卡,向量化和重排继续走 CPU,等确认有效果、也确认显存峰值再逐步迁移。反过来一次全上,一旦批量导入把显存打满,往往是整批任务失败,排查成本比省下的时间高得多。
小团队有没有必要专门为它配显卡?
看两个数:文档入库的日增量和问答的并发量。如果一天就加几份文档、平时两三个人用,纯 CPU 的体验通常还能忍,优先做任务队列和并发上限这类不花钱的优化。反过来如果批量导入经常排几十分钟、问答并发上到十几路,那显卡的边际收益才明显。