指南首页/研究方向
EN
研究方向

效率与系统:让模型真的跑得动

同一个模型,为什么换一个 batch size 就快了,显存明明没满却跑不动,吞吐提高了但用户等得更久?模型落到程序和硬件上,这些问题就会出现。

效率与系统研究怎样在有限硬件、时间和成本里完成训练或推理。一个模型的公式没有变,运行速度也可能差很多:数据搬运、算子实现、显存分配、请求调度和多卡通信,都会决定 GPU 能不能持续干活,以及用户要等多久。

这条线与模型方法紧密相连。更长的上下文会增加缓存,更多并发请求会改变内存压力,降低精度可能影响任务质量。读系统论文时,把优化对象和测试负载一起看:它省的是哪块内存、减少了什么等待,换一种任务时收益又会怎样变化。

主要任务
  • 让原本显存装不下的模型或训练状态能够分布到多张卡上。
  • 减少计算中的内存搬运与重复工作,提高已有硬件的利用率。
  • 在模型质量、响应速度、并发量和服务成本之间找到可测量的取舍。

先测清瓶颈,再选优化;显存更省、吞吐更高和单个用户等得更少,分别是不同的结果。

模型怎样节省计算与存储
  1. 01权重量化
  2. 02KV 缓存
  3. 03连续批处理
  4. 04流水并行

发展路线与代表工作

  1. 2020

    ZeRO:分担训练时重复保存的状态

    从多卡数据并行中的冗余入手,分片存储优化器状态、梯度和参数。

  2. 2022

    FlashAttention:改变计算的搬运方式

    保持精确注意力的数学目标,用分块计算减少 GPU 不同内存层级间的读写。

  3. 2023

    SmoothQuant:让低精度计算更可用

    处理难量化的激活异常值,为权重与激活的 INT8 推理创造条件。

  4. 2023

    PagedAttention:管理动态增长的 KV cache

    将缓存按块组织,减少服务中的碎片和重复,容纳更多并发请求。

关键概念

吞吐与延迟
吞吐是在一段时间内完成多少工作;延迟是一个请求等待多久。增大 batch 可能改善前者,却让排队更久。
Prefill / Decode
Prefill 处理输入上下文;decode 逐步生成输出。两阶段的计算与访存特点不同,不能只报一个笼统速度。
KV cache
保存已处理 token 在各层注意力中的 key 和 value,避免生成时重复计算;它随上下文和并发请求占用显存。
量化
用较低精度表示权重或激活,减少存储与某些计算成本。能否加速还取决于硬件和实际算子的支持。

计算、访存与执行开销

从 Horace He:Making Deep Learning go Brrrr认识计算、内存和执行开销。然后选自己的一个小程序,记录输入、硬件、运行方式与耗时,再看具体瓶颈。

想补系统全貌,用 Machine Learning Systems 按问题查;量化、压缩与高效计算可以接 MIT 6.5940(2024)。

延迟、吞吐、显存与质量

交互服务可能在意首字延迟和尾延迟,离线批处理可能在意吞吐,部署还会受显存与成本约束。优化前把这些条件写下来,同时保留任务质量的评价。

可以先测不同输入长度或 batch size 下的表现,再查 PyTorch Performance Tuning Guide中的相关建议。一次改动之后,用相同负载重测。

分布式训练与推理

How To Scale Your Model可以继续认识分布式计算与硬件约束。等你有一个具体瓶颈,再沿通信、并行、内存与算力往下读。

这里也很适合检验自己怎样使用 AI:它可以帮你写测试脚本,但你要能讲清测试测的是什么、优化影响了谁。接和 AI 一起做事。

系统案例、课程与研究团队

可以对照Purshow 的系统笔记、效率与系统资料和MIT HAN Lab 等团队,看看模型设计与部署约束怎样联系。

代表论文

四篇对应训练状态、算子访存、数值精度和在线缓存。先辨认各自的瓶颈,再读性能图中的负载条件。

2020 · SC 2020

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

ZeRO: Memory Optimizations Toward Training Trillion Parameter Models · Rajbhandari et al. (2020), Fig. 1
论文原图 · Rajbhandari et al. (2020), Fig. 1 · 论文原文

它在解决什么

多卡训练中,每张卡都保存相同状态,会浪费多少显存?

核心想法

按阶段分片优化器状态、梯度和参数,需要时再通信取回,让多张卡分担存储。

为什么选这篇

它能帮助你读懂训练显存的组成,而不只盯着模型参数量。

第一遍读哪里

先看三阶段各自分片的对象,再比较内存和通信分析。

读完还要问

减少冗余存储会改变通信模式;网络带宽与卡数会影响收益。

2022 · NeurIPS 2022

FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness

FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness · Dao et al. · Fig. 1
论文原图 · Dao et al. · Fig. 1 · 论文原文

它在解决什么

注意力很慢时,瓶颈是否在搬数据,而不只在乘法次数?

核心想法

把计算分块放进更快的片上内存,避免把完整注意力矩阵反复写入显存。

为什么选这篇

它说明相同数学计算可以有很不一样的执行效率。

第一遍读哪里

先看 GPU 内存层级和分块示意,再读 IO 分析与运行时间。

读完还要问

精确版本没有消除稠密注意力的二次计算量;加速幅度取决于形状、硬件和实现。

2023 · ICML 2023

SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models

SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models · Xiao et al. (2023), Fig. 2
论文原图 · Xiao et al. (2023), Fig. 2 · 论文原文

它在解决什么

激活中少量特别大的数,为什么会让 INT8 量化困难?

核心想法

在权重与激活之间重新分配尺度,先做等价变换,再量化为低精度数值。

为什么选这篇

它把异常值、数值误差与硬件执行连在一个具体例子中。

第一遍读哪里

先看激活异常值和尺度迁移的示意,再看精度与速度的对比。

读完还要问

等价的是量化前的尺度变换,量化后仍有误差;需要代表性的校准数据及合适的 INT8 算子。

2023 · SOSP 2023

Efficient Memory Management for Large Language Model Serving with PagedAttention

Efficient Memory Management for Large Language Model Serving with PagedAttention · Kwon et al. (2023), Fig. 6
论文原图 · Kwon et al. (2023), Fig. 6 · 论文原文

它在解决什么

不同长度的请求不断进入和结束,怎样少浪费 KV cache 显存?

核心想法

把缓存切成块,用映射表组织不连续的物理存储,并支持必要的缓存共享。

为什么选这篇

它把操作系统中的分页思路带到模型服务,解释了并发能力从哪里来。

第一遍读哪里

先看缓存碎片问题和块映射,再看固定延迟条件下的吞吐比较。

读完还要问

它优化缓存管理;更多并发的收益仍要结合延迟目标和请求长度衡量。

入门练习

卡在某一步?把过程带到 AMA 一起聊 ↗