Perplexity团队披露 pplx-embed 背后的GPU服务架构,包括自定义CUDA kernel、量化策略和分布式推理工程实践。
AI 搜索产品的检索质量受两个因素制约:embedding 模型的效果,以及在整个索引上运行的成本。本周,Perplexity 工程团队发布了 Fast Embeddings on GPUs,深入解析了第二部分——pplx-embed 的服务基础设施,以及支撑 Perplexity Search、Computer 和 API Platform 的排序模型。
Perplexity 团队表示,在成熟的 Hopper 和 Blackwell 硬件上,GPU 侧的 embedding 推理在各引擎之间已基本收敛。真正的收益在于模型周围的运行时和框架层:CUDA graph 管理、异步结果追踪抽象,以及 Rust 请求路径。
Perplexity 将 embedding 服务划分为两类工作负载。批量 embedding 发生在构建或重建向量数据库时,此时吞吐量最大化可降低成本。在线 embedding 发生在查询时,此时短查询必须被快速 embedding。评分则介于两者之间:向量搜索之后,对大批量文档进行排序,兼顾两者。
关键决策在于:Perplexity 没有单独构建一个 embedding 引擎。由于 embedding 模型是小型 Transformer,批量 embedding 类似计算密集型的 prefill,而在线 embedding——通常只有少量 token——类似内存密集型的 decode。因此研究团队复用了 LLM 栈中的 prefill 和 decode 内核。
三个服务协作处理一个请求:
Ivy 是 Rust HTTP 网关。它负责 CPU 侧的工作——JSON 解析、分词、输入模板化、批量切分——并将请求转换为自定义 gRPC 协议。它还将大批量请求切分为块,在多个副本间进行负载均衡,从而修正生产环境中 payload 大小差异导致的负载不均衡。
Tulip 是推理服务器接口:一个基于 Rust、tokio 和 tonic 构建的 gRPC 服务器,在分派到引擎前处理调度和批处理。
ROSE(Runtime-Optimized Serving Engine)实现模型推理。它主要使用 Python,提供内核、层和模型定义,管理 CUDA graph,并对外暴露 step() 函数供 Tulip 调用。
Tulip 按先来先服务的方式选择序列,选择时请求在队列中累积。这一简单性有实测数据支撑:在 Perplexity 服务的序列长度下,对于小型 embedding 模型,稠密层的线性成本主导了注意力的二次成本。因此延迟大致与 token 数量成正比,而非序列数量。一旦批处理使 GPU 饱和——对于十亿参数以下的模型约在 512 token 时——加入更多序列并不能提升效率。
在小批量下,CPU 侧的内核启动开销可能超过 GPU 执行时间。Perplexity 为所有 embedding 模型构建整模型 CUDA graph,将每次启动捕获为单一驱动调用。由于 embedding 模型较小,GPU 工作超过启动成本的反转点出现在数千 token 和数十个序列的批量规模。部分注意力实现依赖动态主机侧输入,会阻断整模型 graph 捕获;Perplexity 向 FlashInfer 上游提交了修改以支持捕获。
Graph 必须按配置分别捕获,因此 token 数量被填充到 64 或 256 倍数的桶中。这仍然产生数千个 graph,每个模型需要数分钟的捕获时间。解决方案是延迟捕获:每个配置先执行一次 eager 预热运行,在第二次命中时才触发捕获和回放。这会在启动时付出 p99 延迟代价,但将数分钟的 eager 工作分散到数小时。
第二块是 LazyTensor,它追踪一个页锁定的主机缓冲区,外加一次 cudaMemcpyAsync 和一个 CUDA 事件。step() 不再阻塞设备,而是返回一个 LazyTensor,让 Rust 异步任务在第 N 批等待的同时,CPU 端排队第 N+1 批。
ROSE 支持多种针对 ragged 输入的注意力后端:FlashInfer 2、FlashInfer 3 和 FlashAttention 4。Perplexity 团队报告 FlashAttention 4 通常更快,但 FlashInfer 3 在基于 Qwen 的模型上处理极长序列时表现更优,因此后端选择因场景而异。值得注意的是,在服务 embedding 模型时,ROSE 不会实例化 KV cache,而是分派到 ragged 注意力变体以避免填充。
Perplexity 基于真实权重和 eval 推导的输入,在 BF16 精度下对照 vLLM v0.22.0 进行基准测试,预热运行验证余弦相似度差异在 0.1% 以内。四套测试图表分别是:低延迟 embedding(batch 1;128/512/4096 token)、低延迟评分(batch 5/25/50,512 token)、高吞吐 embedding(batch 100,四个并发进程)和高并发 embedding(1 到 16 个并发请求,包含 Ivy 分词和网络开销)。
查看完整技术细节。也请关注我们的 Twitter,别忘了加入 150k+ ML SubReddit 并订阅我们的 Newsletter。等一下!你用 telegram 吗?现在也可以加入我们了。
想与我们合作推广你的 GitHub Repo、Hugging Face Page、产品发布或网络研讨会吗?请联系我们
Asif Razzaq 是 Marktechpost Media Inc. 的 CEO。作为一位有远见的企业家和工程师,Asif 致力于将人工智能的潜力用于社会公益。他最近的举措是推出了人工智能媒体平台 Marktechpost,该平台以深入报道机器学习和深度学习新闻著称,内容既具技术深度又通俗易懂。该平台每月浏览量超过 200 万次,显示出其在受众中的受欢迎程度。