Scaling Up Large Language Models Serving Systems for Semantic Job Search (MLSys 2026)

一句话总结:LinkedIn 语义职位搜索用 decoder-only cross-encoder SLM 对 (query, job) 打 pyes 分,需 3.15M items/s 级吞吐;结构化剪枝(600M→375M)+ RL 职位描述摘要(>10× 上下文压缩)+ SGLang prefill-only serving 优化(批 tokenization、in-batch prefix cache、去 decode),离线 per-GPU 吞吐 4.6×、端到端系统约 10×,NDCG@10 降 <2%

问题与动机

语义搜索用 LLM 做 relevance judge 质量好,但工业部署受延迟与吞吐约束。LinkedIn Semantic Job Search:EBR 召回 → cross-encoder SLM 精排(无额外 rerank)→ 拍卖层;7B teacher 蒸馏 0.6B SLM,prompt 含 metadata + 长 desci(中位 ~900 token,max >2100,占 prompt 94%)。

目标:3.15M items/sec 全局 scoring 能力;标准 chatbot serving(prefill+decode、sampling)与极高 RPS prefill-only 负载不匹配。

关键观察 / 隐含假设

  • 观察 1:OSSCAR 剪 50% MLP 神经元 + 去掉末 8 层 transformer,600M→375M,NDCG@10 损失 <1%(加轻量 SFT ~16 H100·h 可恢复)。

    • 依赖假设:末层对 ranking 最不敏感;in-domain 40M token calibration 数据足够。
    • 可能失效场景:新特征域或 multilingual 职位;激进剪枝 >45% 可能触及质量悬崖。
  • 观察 2:纯 prompt 摘要不够;需 RL 对齐 SLM——reward = 长度惩罚 + 摘要 vs 原文 SLM 输出 KL;GSPO + P2 penalty(w=0.4)实现 93% 描述长度压缩、p50 描述占 prompt 从 94%→54%,NDCG 降 <2%

    • 依赖假设:冻结 SLM 作 reward model;离线 1.7B actor 可流式更新摘要。
    • 可能失效场景:非英语职位摘要倾向英语;>95% 压缩 precipitous 质量跌。
  • 观察 3:prefill-only + 共享 query prefix 使 in-batch prefix caching(LogSumExp 合并两次 attention)与批 tokenization 成为主导优化;去 decode/sampling 单请求 33ms→20ms。

    • 依赖假设:每 query 批内多 item 共享前缀;仅需末 token yes/no logits。
    • 可能失效场景:item 级特征差异大、前缀不可共享的 facet。
  • 假设 1:系统层(Couchbase 分数缓存 TTL 15min >50% 命中、PID 动态 depth、traffic shaping)与模型压缩同等重要。

    • 证据强度——peak depth 250→131(48% GPU/查询),shaping 单 H100 1600→2000 items/s。

核心方法

模型压缩:OSSCAR 结构化剪枝 MLP;逐层去掉 transformer block(末层最安全);组合后 375M

上下文压缩:1.7B actor + verl/GSPO;reward 式 (4) 平衡长度与 SLM KL;生产用 summarized desci 离线/近线(Spark/Flyte + Flink)预计算。

SGLang serving 优化

  • scoring path:跳过 decode/sampling,仅末 token 概率。
  • batch tokenization;GPU 向量化 gather 减 CPU↔GPU 小 copy。
  • gc.freeze() 消除 100–300ms GC 尖刺;p99@100 RPS 6220ms→454ms92.7%)。
  • in-batch prefix cache:suffix 对 prefix KV 做 dense paged attention + 对自身的 causal attention,LSE 合并。

流式/产品层:item score cache、Dynamic Ranking Depth(PID)、traffic shaping 削峰填谷。

设计取舍

  • 直接部署 SLM vs 蒸馏到 MLP/BERT(Pinterest 等):坚持自然语言 cross-encoder 可解释性,用压缩+系统优化换在线可行。
  • FP8 W8A8:质量 OK 但吞吐仅 +10%,小模型非 MLP-bound,放弃量化复杂度。
  • 无 uncompressed 在线 A/B:v1 无法大规模上线,对比基线主要是 EBR 而非 uncompressed SLM。
  • 单阶段 SLM 精排:无第二 rerank——业务上未见收益。

实验与结果

离线引擎(H100,SGLang 0.4.6,Poisson 请求至 p95 500ms):

  • 600M 全文 → 375M 全文:+27% 吞吐。
  • 375M + 摘要:相对 600M 全文 4.6× 吞吐,质量 <2% NDCG 损失。
  • 摘要使均 prompt 900→220 tokens()。

Serving 微优化:批 tokenization、去 decode、内存同步优化、in-batch prefix(bs=50 约 +33%)。

生产:SLM v2 vs EBR 在线 A/B(Table 9);压缩栈支撑全量语义精排上线;摘要+剪枝+系统优化合计约 10× 系统吞吐(abstract)。

Critical Analysis

论证链条

观察(语义搜索需 LLM cross-encoder 质量,但 LinkedIn 需 3.15M items/s 全局 scoring;标准 chatbot serving 的 prefill+decode 与极高 RPS prefill-only 负载不匹配;职位描述占 prompt 94%)→ 设计(OSSCAR 剪枝 600M→375M + RL ranking-aligned 摘要 + SGLang prefill-only 优化 + 产品层 cache/depth/shaping)→ 结果(离线 per-GPU 4.6×、端到端约 10×、NDCG@10 降 <2%)链条闭合良好。论文把瓶颈从「模型太大」改写为「token 太多 + serving path 不对 + 系统层 GC/tokenization」,与工业 ranking 约束高度对齐。

薄弱环节是 10× 为系统级乘积(剪枝 × 摘要 × runtime × Couchbase cache × PID depth × traffic shaping),单点技术贡献难拆;且 cross-encoder 仍 O(items) 线性扩展——缓存(TTL 15min >50% 命中)与 depth 控制(peak 250→131)是达到吞吐目标的必要遮羞布,论文诚实承认但意味着结论高度绑定 LinkedIn 流量形态。与学术 prompt compression 的差异论证充分:item 描述海量异构,需 ranking-aligned 而非通用语义保持,RL reward(长度惩罚 + 摘要 vs 原文 SLM 输出 KL)直接服务 pyes 分而非 perplexity。

假设压力测试

  • Workload 形态:每 query 批内多 item 共享 query prefix,使 in-batch prefix caching 与批 tokenization 成为主导优化;item 级特征差异大、前缀不可共享的 facet 收益趋零。
  • 摘要质量边界:RL 摘要依赖冻结 proprietary SLM 作 reward model;>95% 压缩可能触及质量悬崖,非英语职位有倾向英语的 risk;离线 Spark/Flyte + Flink 预计算摘要假设描述变更频率可摊销。
  • 剪枝可迁移性:末 8 层去掉 + 50% MLP 剪枝在 in-domain 40M token calibration 上 NDCG 损失 <1%;新特征域、multilingual 职位或 >45% 激进剪枝可能触及质量悬崖。
  • 在线对照缺失:v1 uncompressed SLM 无法大规模上线,对比基线主要是 EBR 而非 uncompressed cross-encoder——「相对全文 600M 的 4.6×」主要在离线 bench,在线 A/B 仅 SLM v2 vs EBR(Table 9)。
  • 量化路线:FP8 W8A8 质量 OK 但吞吐仅 +10%,小模型非 MLP-bound——说明进一步硬件优化空间有限,结论绑定当前 375M 规模。

实验可信度

  • 强项:罕见的 ranking-specific 全栈案例,剪枝、RL 摘要、prefill-only runtime 与产品层协同,数字贴近 3.15M items/s 真实约束;强调 tokenization、gc.freeze() 消除 100–300ms GC 尖刺等「非性感」瓶颈,对高 RPS SLM 部署有参考价值;p99@100 RPS 6220ms→454ms92.7%)等微优化 ablation 可信。
  • Baseline 选取:EBR 作为在线对照符合「无法上线 uncompressed」约束,但难以隔离「语义精排本身」相对 EBR 的净收益中模型压缩 vs 系统优化的占比。
  • Metric 缺口:主报 NDCG@10 与吞吐,缺乏公开数据集复现;10× 系统级数字来自 abstract 乘积,外推需逐项验证。tail latency 在多租户、削峰填谷失效、摘要 stale(TTL/离线 pipeline 延迟)等生产边角未展开。RL 摘要 pipeline 依赖 LinkedIn 专有栈,外部复现门槛高。

局限与 Future Work

  • 更 token-efficient 摘要语言、multilingual actor 对齐。
  • FP8/投机推理在更大 SLM 上重评。
  • 与 embedding-first cascade 的 cost-quality 边界。
  • 开源 ranker 与摘要 pipeline 有限,外推依赖 LinkedIn 栈。

相关

  • ServingSGLangvLLM、prefill-only、prefix caching
  • 压缩:OSSCAR、GSPO、SmoothQuant
  • 应用:semantic search、cross-encoder ranking、EBR
  • 对比:Pinterest LLM judge 蒸馏路线