第 118 题:GPU上的批量检索,TensorRT-LLM的优化技巧?
题目
GPU上的批量检索,TensorRT-LLM的优化技巧?
完整讲解
一、GPU 上的批量检索
推荐与检索场景常需单请求多候选或多请求并行。在 GPU 上做向量检索时,将多条 query 或同一 query 的多路候选组成 batch,利用 GPU 并行算距离(矩阵乘、L2/内积 kernel),可提高吞吐、摊薄显存与调度开销。批量检索的核心是:批量化距离计算 + 批量化 Top-K/堆,以及减少 CPU-GPU 传输与 kernel 启动次数。
二、TensorRT-LLM 的关联与可借鉴点
TensorRT-LLM 主要面向大语言模型推理,其优化思路可迁移到检索侧(尤其 RAG、向量检索与 LLM 同 pipeline 时):(1)算子融合:将多层/多步计算合并为少量 kernel,减少显存读写与 launch 开销;(2)连续内存与批处理:batch 内请求连续排布、统一 shape,便于矩阵运算与内存对齐;(3)动态 batch:请求队列积累到一定 batch 或超时后统一推理,提高 GPU 利用率;(4)KV cache / 状态复用:对检索而言可类比「向量/索引块常驻显存、只传 query batch」;(5)精度与量化:FP16/BF16 或 INT8 降低带宽与算量,检索同样可用半精度距离。
三、检索侧的批量优化技巧
- 距离计算:$\boldsymbol{Q} \boldsymbol{V}^\top$ 一次算 batch query 与底库/候选向量内积;L2 距离展开为 $|\boldsymbol{q}-\boldsymbol{v}|^2 = |\boldsymbol{q}|^2 + |\boldsymbol{v}|^2 - 2\boldsymbol{q}^\top\boldsymbol{v}$,预存 $|\boldsymbol{v}|^2$,batch 上算 $\boldsymbol{Q}\boldsymbol{V}^\top$ 与范数即可。
- Top-K:batch 内每行独立 Top-K,用 GPU 的 radix sort 或 heap kernel、或调用库(如 faiss GPU、cupy)的 batch 接口。
- 索引在 GPU:IVF/PQ 码本或图结构放显存,减少 CPU-GPU 传输;大批量时考虑分块或流式避免 OOM。
- 与 LLM 同卡:若检索与 LLM 在同一 pipeline(如 RAG),可共享 batch 调度、统一用 TensorRT-LLM 风格的最大 batch 与 padding,减少端到端延迟。
四、注意点
- TensorRT-LLM 本身不实现向量检索;「TensorRT-LLM 的优化技巧」指其思想(融合、批处理、动态 batch、量化)在检索实现中的借鉴。
- 实际 GPU 检索多依赖 Faiss-GPU、RAFT、Cagra 等;批量接口与 TensorRT 风格 batching 可结合使用。
面试要点
- 能说明 GPU 批量检索:batch query/候选、矩阵化距离、batch Top-K,提高吞吐。
- 能列举 TensorRT-LLM 可借鉴点:算子融合、连续 batch、动态 batch、量化、显存布局,并迁移到检索。
- 能说清距离展开、预存范数、索引驻显存、与 LLM 同 pipeline 的 batch 统一等工程点。
记忆要点
- GPU 批量检索:batch 距离(矩阵乘)、batch Top-K;索引可驻显存、减少传输。
- TensorRT-LLM 思路:融合、连续/动态 batch、量化、显存复用;可迁移到检索 pipeline。
- 距离用 $|\boldsymbol{q}|^2+|\boldsymbol{v}|^2-2\boldsymbol{q}^\top\boldsymbol{v}$;实际多用 Faiss-GPU 等、结合 batch 接口。