尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

LLM推理优化新趋势:从单卡算力到多机系统协同

LLM推理优化新趋势:从单卡算力到多机系统协同 LLM 推理优化的论文越读越多你会发现一个非常明显的变化前两年的工作大多在“怎么把算力压榨干净”比如量化、算子融合、各种并行策略但最近一年头部会议的论文开始把目光转向“系统层面的协同”包括请求调度、通信压缩、多机协同、甚至网络拓扑。这个信号很重要。我最近在读这个系列的论文记录时看到第 25 篇的标题只有简单的“Turbo”落款是 SIGCOMM第一反应是SIGCOMM 什么时候开始收 LLM 推理优化论文了再仔细看一眼这个判断完全没问题——因为 LLM 推理的性能瓶颈已经从“单卡算力不够”转移到了“跨卡、跨机、跨服务的系统开销太大”。如果你还在只用单机、单卡或者不考虑通信的视角去理解推理优化那你读这类论文会非常吃力工程里也容易踩坑。这篇文章就围绕这个主题展开先讲清楚为什么 LLM 推理优化值得投入时间再拆解推理阶段的核心瓶颈然后解释 SIGCOMM 这种网络顶会为什么会收录此类论文最后给出一个把论文思想落地到工程实践的完整路径包括框架选择、关键参数配置、性能验证方法和常见问题排查。无论你是在做在线推理服务、Agent 应用还是单纯想读懂这类论文这篇文章都能帮你建立一条更清晰的阅读和实践主线。1. LLM 推理优化为什么值得花时间读先说一个现实很多人把 LLM 推理优化理解为“加速”觉得模型生成快一点、慢一点无所谓。但在真实业务里推理性能直接决定成本和用户体验只是你未必马上能感受到。举几个具体场景在线对话服务用户发出请求后第一句话过多久出现直接决定产品体验。如果 TTFT首 Token 时间超过 3 秒用户就会觉得“卡”流失率明显上升。Agent 应用Agent 通常会连续调用多次模型单次生成不可怕可怕的是每次调用都慢一点整个任务链路就会变得难以接受。批量离线任务一批文档摘要、一批代码扫描吞吐量上不去意味着 GPU 要跑更久云账单跟着涨。所以 LLM 推理优化不是一个纯学术问题。它解决的问题是在同样的硬件资源下怎么让模型响应更快、吞吐更高、成本更低、稳定性更好。评价推理性能时不要只看“生成速度快不快”至少要关注这几个指标指标全称含义对业务的影响TTFTTime To First Token从发出请求到收到第一个 Token 的时间影响用户第一印象TPOTTime Per Output Token生成每个 Token 的平均时间影响响应整体流畅度Throughput吞吐量单位时间处理的请求数或 Token 数影响服务成本和并发能力Concurrency并发数同时处理的请求数量影响服务规模和资源利用率Memory Usage显存使用KV Cache、权重、激活值的显存开销影响能否支撑长序列和大并发在论文里作者一般会给出这些指标的实验结果在工程里我们自己也要用这些指标来评估优化是否有效。读论文之前建议先建立这个意识论文里实验跑得好不好和你生产环境跑得好不好往往是两回事。论文更关注极端情况下的上限工程更关注稳定条件下的均值和长尾。2. LLM 推理的核心瓶颈从计算密集到访存密集要读懂推理优化论文先要理解推理过程到底卡在哪里。2.1 Prefill 与 Decode 的区别LLM 推理通常分成两个阶段Prefill预填充阶段处理输入 Prompt 的全部 Token并行计算属于计算密集型。这个阶段的主要开销是矩阵运算GPU 计算单元使用率很高。Decode解码阶段逐 Token 生成输出每步只生成一个 Token但需要把之前所有 Token 的 KV Cache 都参与计算属于访存密集型。这个阶段的主要瓶颈不再是算力而是显存带宽。很多人误以为 Decode 阶段模型在“思考”其实它更像“边翻字典边写”绝大多数时间花在读写显存上。2.2 KV Cache 为什么如此关键KV Cache 是推理过程中缓存历史 Token 的 Key 和 Value 的显存结构。它越大模型需要重算的东西就越少但显存压力也越大。可以用一个简单公式估算 KV Cache 的开销# kv_cache_memory_estimate.py def estimate_kv_cache_bytes( batch_size: int, seq_len: int, num_layers: int, num_kv_heads: int, head_dim: int, dtype_bytes: int 2, # FP16/BF16 默认 2 字节 ): tokens batch_size * seq_len per_token_bytes 2 * num_layers * num_kv_heads * head_dim * dtype_bytes total_bytes tokens * per_token_bytes return total_bytes / (1024 ** 3) # 转为 GB # 示例一个 7B 级别模型假设 32 层、8 个 KV Head、head_dim 128 kv_gb estimate_kv_cache_bytes( batch_size8, seq_len4096, num_layers32, num_kv_heads8, head_dim128, ) print(fKV Cache 预估占用: {kv_gb:.2f} GB)这里只是估算思路不同模型结构差异很大但方向是一致的序列越长、并发越高KV Cache 占用的显存越恐怖。因此很多推理优化论文把 KV Cache 管理和压缩作为核心方向。2.3 为什么分布式推理的通信开销越来越大单卡部署虽然简单但模型增大或并发提高后单卡很难满足需求。这时候需要引入并行策略张量并行把权重按维度切分到多张卡每层计算需要 AllReduce 汇总结果通信量大。流水线并行按层切分卡与卡之间传递中间激活值通信量相对较小但存在流水线气泡。专家并行MoE 模型中的 Expert 分布在多卡上Token 需要路由到对应 Expert通信频率更高。在单机多卡场景卡间通信通过 NVLink 还能接受一旦跨机部署网络带宽和延迟就会成为新瓶颈。SIGCOMM 这种网络顶会开始收录 LLM 推理优化论文本质原因就在这里推理性能已经从“单机计算问题”变成了“多机系统协同问题”。3. SIGCOMM 为什么会收“Turbo”这类论文SIGCOMM 是网络系统方向的顶级会议传统上关注网络协议、数据中心架构、分布式系统、拥塞控制等话题。它和 LLM 推理本来没有直接关系但近几年的变化是这类会议开始大量接收“面向大模型系统的网络与调度优化”论文。这背后的技术逻辑并不难理解大模型推理服务不再是单机程序而是由多台 GPU 服务器组成的分布式系统。请求要经过负载均衡、调度器、推理引擎、KV Cache 管理器等多个组件。张量并行和专家并行带来的跨机通信直接受网络拓扑、带宽分配、拥塞控制影响。多用户共享集群时调度策略会直接影响整体吞吐和 SLO服务等级目标。所以“Turbo”出现在 SIGCOMM不一定意味着它一定是一篇纯网络论文更可能的是它把 LLM 推理过程中的某一类瓶颈放进分布式系统的框架里做了优化。这里要做一个诚实说明由于目前能确认的信息主要是论文标题和会议信息具体的加速机制、实验设置、模型规模都需要以论文完整版为准。在没有看到全文之前不要轻信任何二手平台的摘要总结。读标题和会议归属只能帮我们建立方向感它大概率涉及系统层面的协同优化而不是单一的算子优化。“Turbo”这个名字本身也有信息量。Turbo 在工程里通常暗示“涡轮增压”意味着不改变基础结构的前提下通过更激进的调度、更高效的资源利用、更精细的流水线控制来提升整体速度。它不太像某个单独算子的优化方案更像是整个推理链路的加速方案。另外要提醒一句“Turbo”这个词在 AI 领域重名很多比如图片生成的 Turbo 系列、一些游戏加速工具的 Turbo 模式。搜索论文相关材料时建议直接加上 LLM、SIGCOMM、推理优化等限定词避免混入无关内容。4. 拿到一篇推理优化论文先对这四个方向做归类如果你也和我一样在系统读推理优化论文我强烈建议不要一篇一篇孤立地看而是先建立分类框架。拿到一篇新论文先回答这四个问题。4.1 它优化的是什么资源推理系统里有四类核心瓶颈资源类型典型问题常见手段计算资源GPU 算力利用不足算子融合、Cuda Graph、更优的矩阵乘法库显存资源KV Cache 爆炸、权重放不下量化、KV Cache 压缩、PagedAttention调度资源请求等待、批处理不充分连续批处理、抢占调度、优先级调度网络资源跨卡通信慢、拓扑不均衡通信压缩、拓扑感知调度、流水线重排“Turbo”如果出现在 SIGCOMM大概率落在网络资源和调度资源这两类但也可能同时涉及显存和计算需要看论文摘要确定。4.2 它作用在哪个阶段如果是 Prefill 阶段优化重点在计算效率和并行度。如果是 Decode 阶段优化重点在显存带宽、KV Cache 访问、投机解码。如果是跨阶段优化重点在 Prefill 和 Decode 的资源隔离、调度错峰。很多系统级论文会同时优化两个阶段比如把 Prefill 和 Decode 拆成不同的调度池避免互相争抢资源。4.3 它是单机方案还是分布式方案这个判断直接决定论文的工程参考价值。如果对方在单机上做到了理论极致对多机部署的参考价值有限如果对方解决的是跨机通信问题那对你的多机推理服务更有参考意义。注意看实验部分的硬件拓扑是 8 卡单机还是几十台机器组成的集群这通常决定了结论的适用范围。4.4 它与硬件耦合度多高有的优化方案依赖特定 GPU 架构比如新版本 Tensor Core、特定的算子库有的方案则与硬件无关纯调度层优化。如果你手头硬件不是最新的与硬件强相关的方案往往很难直接复现但不妨碍理解思路。为了方便持续跟踪我在自己的论文记录系列里会使用固定模板这里可以直接参考# 【论文记录】论文标题 - 会议/年份SIGCOMM 2026 - 核心问题一句话说明论文要解决的问题 - 优化资源计算 / 显存 / 调度 / 网络 - 优化阶段Prefill / Decode / 跨阶段 - 单机 or 分布式单机 / 多机 - 硬件耦合度低 / 中 / 高 - 主要方法用自己的话概括核心机制 - 实验环境模型、GPU、数据集、指标 - 关键结论论文取得的提升幅度以原论文数据为准 - 对工程启示能不能迁移到当前项目 - 待验证问题复现时需要重点验证的内容这样记录的好处是读到第 20 篇、第 30 篇之后还能快速检索而不是翻聊天记录和零散笔记。5. 把论文思想落地到工程先用开源框架做验证读论文的最终目的不是“读过”而是把有用的思路迁移到工程里。我的建议是不要一上来就自己写推理引擎先用社区成熟的框架验证想法再看要不要深度定制。当前主流开源推理框架包括 vLLM、TensorRT-LLM、SGLang、TGI 等。其中 vLLM 社区活跃度高、对论文新方法吸收快非常适合做方案验证。5.1 安装与基础启动# 建议使用 Python 3.10具体版本以官方文档为准 pip install vllm启动一个 OpenAI 兼容的推理服务vllm serve Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen7b \ --max-model-len 8192 \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9参数解释--served-model-name设置对外暴露的模型名称。--max-model-len限制最大序列长度防止 KV Cache 溢出。--tensor-parallel-size张量并行卡数单卡就填 1。--gpu-memory-utilization允许占用的显存比例一般填 0.85 到 0.95。从论文里看到一个调度优化想法后第一步不是改源码而是先在现有框架里调整对应参数观察效果是否与论文结论一致。5.2 KV Cache 量化验证KV Cache 是论文中常见优化对象。减小 KV Cache 占用的直接手段是量化。下面是一个量化配置示例# kv_cache_quant_config.py from vllm import LLM, SamplingParams llm LLM( modelQwen/Qwen2.5-7B-Instruct, kv_cache_dtypefp8_e5m2, # KV Cache 量化类型具体名称以框架版本为准 max_model_len8192, gpu_memory_utilization0.9, ) sampling_params SamplingParams( temperature0.0, max_tokens512, ) outputs llm.generate([解释一下什么是 KV Cache 量化。], sampling_params) for output in outputs: print(output.outputs[0].text)注意量化不是免费的KV Cache 量化之后显存占用下降但可能带来精度损失。验证时一定要对比量化前后的生成质量不能只看显存。5.3 投机解码配置示例投机解码Speculative Decoding是近两年论文里的高频方向。核心思路是用小模型先草拟多个 Token再用大模型一次验证从而减少大模型的 Decode 步数。它在某些场景下能显著提升吞吐。vllm serve Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen7b \ --speculative-model Qwen/Qwen2.5-1.5B-Instruct \ --num-speculative-tokens 5 \ --max-model-len 8192关键点--speculative-model指定草稿模型一般选择同系列的小模型。--num-speculative-tokens每次草拟的 Token 数不是越大越好过大会拖慢验证效率。如果推理服务的吞吐没有提升需要检查草稿模型的接受率和生成分布。这类配置就是在复现论文思想的实践论文里可能换了个更复杂的实现但工程层面先用框架参数验证方向是否存在收益是成本最低的方式。6. 性能验证不要靠感觉要量化很多人在本地启动服务后手动发几个请求感觉“速度还行”就结束了。这个习惯在工程里非常危险。推理优化必须以量化数据为准而且至少要看 P50 和 P95 两个分位。6.1 用 Python 脚本测单请求时延一个简单但有效的测速脚本# benchmark_latency.py import time from openai import OpenAI client OpenAI( base_urlhttp://localhost:8000/v1, api_keyEMPTY, ) prompt 请用三句话解释什么是分布式系统中的通信瓶颈。 # 预热请求 client.chat.completions.create( modelqwen7b, messages[{role: user, content: prompt}], max_tokens64, ) latencies [] for _ in range(20): start time.perf_counter() response client.chat.completions.create( modelqwen7b, messages[{role: user, content: prompt}], max_tokens128, temperature0.0, ) elapsed time.perf_counter() - start latencies.append(elapsed) latencies.sort() p50 latencies[len(latencies) // 2] p95 latencies[int(len(latencies) * 0.95) - 1] print(fP50 时延: {p50:.2f}s) print(fP95 时延: {p95:.2f}s)这里的base_url是 vLLM 默认的服务地址model要和启动服务时的--served-model-name一致。要测得准一定要做预热请求否则第一次请求会包含模型加载、CUDA Kernel 初始化等额外开销。6.2 用压测工具测并发吞吐单请求时延只反映串行场景。要评估系统的真实能力需要并发压测。vLLM 自带压测脚本可以直接调用python -m vllm.benchmarks.benchmark_serving \ --backend vllm \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen7b \ --endpoint /v1/completions \ --request-rate 10 \ --num-prompts 200 \ --max-tokens 128参数含义--request-rate每秒发送的请求数设为 10 表示每秒钟发 10 个请求。--num-prompts总请求数200 个请求足够得到稳定统计。--max-tokens每个请求生成的最大 Token 数。压测结束后脚本会输出吞吐requests/s 或 tokens/s、TTFT 和 TPOT 的分位数据。这些数据才是判断优化是否有效的依据。6.3 记录优化前后的基线没有基线就没有优化。我建议每次实验前先记录一组基线数据配置并发数TTFT P50TPOT P50吞吐 tokens/s显存占用 GB原始配置101.2s45ms230014.5开启 KV Cache 量化101.1s41ms255012.8开启投机解码101.0s38ms310014.2记录完数据之后再对照论文结论。如果论文说提升 30%你的实验只提升了 5%往往不是论文有问题而是你的场景、模型、数据集和论文不一致。这时候应该去分析差异点而不是盲目调参。7. 常见问题与排查方法在推理优化的实践过程中下面这些问题相当常见整理成排查表遇到时直接对照。问题现象可能原因排查方式解决方案启动时显存溢出GPU 显存不足以容纳模型权重和 KV Cache查看启动日志中的显存分配观察 nvidia-smi降低gpu-memory-utilization使用量化权重或减少max-model-len首次请求很慢模型尚未预热CUDA Kernel 初始化发送一次低 max_tokens 的请求作为预热在服务启动后主动做一次预热请求并发升高后 TPOT 明显变差KV Cache 带宽成为瓶颈或调度策略不当压测时观察 TPOT 分位数据开启连续批处理限制max-num-seqs或启用投机解码KV Cache 量化后生成质量下降量化精度损失对比相同 Prompt 在量化前后的输出换更高精度的量化类型或只对特定层做量化投机解码后吞吐反而降低草稿模型接受率低验证开销高查看接受率日志调整num-speculative-tokens换用与主模型分布更接近的草稿模型或关闭该功能多机推理时通信耗时占比高网络带宽不足或拓扑感知不足使用 NCCL 测试工具检查通信效率调整并行策略将通信量大的节点放到同一机架服务返回结果不一致量化或投机解码引入随机性或采样参数不一致对比固定 seed 和 temperature0 的输出生产环境关闭采样或固定 seed 并做一致性测试遇到问题时建议按这个顺序排查先看日志再看资源监控再复现最小请求最后考虑配置调整。不要一上来就怀疑框架或模型的正确性。8. 工程落地建议什么时候该追新什么时候该稳住读了很多推理优化论文之后会进入一个误区觉得每篇论文都值得马上上生产。这里给几条工程建议也是我在实践里总结出的筛选标准。第一先确认业务瓶颈。如果服务本身并发不高显存也没打满那 KV Cache 压缩对你的收益就很有限。优化应该优先解决真实瓶颈而不是追热门方法。第二任何优化都要做回归测试。推理优化不只是性能问题还是质量问题和稳定性问题。量化可能让输出质量下降投机解码可能让长尾请求变慢调度改动可能影响某些用户。上线前必须先做好质量评测和回归。第三尽量用社区成熟方案不要重复造轮子。论文里的方法往往处于研究状态代码不一定完备。vLLM 等框架会逐步吸收有工程价值的方法优先关注框架发布日志里的变化比自己改源码成本低得多。第四注意与 Agent、RAG 等应用的配合。当你做 Agent 应用时LLM 推理只是整条链路中的一个环节。如果模型调用频繁但外部工具、检索、环境准备更慢那优化推理层对端到端效果的影响有限。先做全链路的耗时分析再决定优化哪一层。第五安全与合规不能省。推理服务通常涉及模型权重、用户数据和内部 API注意鉴权、限流、日志脱敏和最小权限原则。上线前确认配置从哪来、模型从哪来不要直接从网上复制一个来源不明的模型文件到生产环境。9. 你可以马上开始的行动如果你也想真正走进 LLM 推理优化这个方向我的建议是不要只停留在收藏论文或阅读摘要而是按这个顺序做三件事第一在你手头已有的模型服务上记录一组最朴素的基线数据包括 TTFT、TPOT、吞吐、显存占用。不需要复杂工具上面给出的脚本和命令就够用。第二从论文里挑一个和当前瓶颈对应的方向在开源框架里找到对应的参数或配置比如 KV Cache 量化、投机解码、连续批处理、张量并行逐个做对比实验。第三把每篇论文读完后用论文记录模板写一页笔记重点写清楚“这篇论文对工程有什么启示”和“需要验证的问题”。这个习惯比收藏几十篇论文有用得多。LLM 推理优化不是一个有终点的技术领域随着模型结构、硬件架构和应用场景的变化新的瓶颈会不断出现。从单卡优化到多机协同从计算优化到系统优化这条演进路线才刚刚开始。希望这篇文章能帮你把后续要读的论文看得更清楚也让你在实践中少踩一些不必要的坑。
返回列表