<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Inference on Jiang Yi(姜祎)'s Homepage</title><link>https://jiangyigithub.github.io/ai.github.io/tags/inference/</link><description>Recent content in Inference on Jiang Yi(姜祎)'s Homepage</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 08 Apr 2026 21:44:44 +0800</lastBuildDate><atom:link href="https://jiangyigithub.github.io/ai.github.io/tags/inference/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM Memory Computation</title><link>https://jiangyigithub.github.io/ai.github.io/p/llm-memory-computation/</link><pubDate>Sat, 17 Jan 2026 10:04:32 +0800</pubDate><guid>https://jiangyigithub.github.io/ai.github.io/p/llm-memory-computation/</guid><description>&lt;h2 id="motivation"&gt;&lt;a href="#motivation" class="header-anchor"&gt;&lt;/a&gt;Motivation
&lt;/h2&gt;&lt;p&gt;我们从一个简单的问题开始&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;假如我有一张 80GB 的显卡，我想训练/推理一个 4B 的模型，我应该设置多大的 batch size 和 sequence length?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在这个 tutorial 中，我们将基于这个问题来进行思考和分析。我们将考虑更一般的问题形式：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Motivation:&lt;/strong&gt; 在训练和推理时 LLM 所需要的内存是多少？如何进行优化内存占用？&lt;/p&gt;
&lt;p&gt;为了回答以上问题，我们先介绍训练/推理阶段的内存计算，再针对可优化部分进行分析并介绍相应优化算法。&lt;/p&gt;
&lt;h2 id="background"&gt;&lt;a href="#background" class="header-anchor"&gt;&lt;/a&gt;Background
&lt;/h2&gt;&lt;h3 id="transformer-architecture"&gt;&lt;a href="#transformer-architecture" class="header-anchor"&gt;&lt;/a&gt;Transformer Architecture
&lt;/h3&gt;&lt;p&gt;以 Qwen3 为例，现代 LLM 的架构包含多层 Transformer Block，其中具体的模块不同的模型可能有改动。下图是对应的模型架构&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jiangyigithub.github.io/ai.github.io/slides/LM_architecture.png"
loading="lazy"
alt="Architecture of Qwen3"
&gt;&lt;/p&gt;
&lt;h3 id="notation"&gt;&lt;a href="#notation" class="header-anchor"&gt;&lt;/a&gt;Notation
&lt;/h3&gt;&lt;p&gt;与参数量、FLOPs 计算所用记号一致；参数量 \(P\) 的推导见 &lt;a class="link" href="https://maosong.website/p/llm-parameter-computation/" target="_blank" rel="noopener"
&gt;LLM parameter analysis&lt;/a&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center"&gt;变量&lt;/th&gt;
&lt;th style="text-align: left"&gt;含义&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(P\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;number of parameters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(L\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;layers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(V\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;vocabulary size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(d\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;hidden size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(d_{\text{ff}}\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;FFN hidden size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(s\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;sequence length&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(b\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;batch size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(h\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;number of attention heads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;\(d_h\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;attention head dimension&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="assumptions"&gt;&lt;a href="#assumptions" class="header-anchor"&gt;&lt;/a&gt;Assumptions
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;若无特别说明，使用 &lt;strong&gt;BF16/FP16&lt;/strong&gt;，每个参数 &lt;strong&gt;2&lt;/strong&gt; byte。&lt;/li&gt;
&lt;li&gt;不使用 dropout（与现代大模型设定一致）。&lt;/li&gt;
&lt;li&gt;Attention 基于原始 multi-head attention.&lt;/li&gt;
&lt;li&gt;FFN 基于 SwiGLU.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="training-memory-analysis"&gt;&lt;a href="#training-memory-analysis" class="header-anchor"&gt;&lt;/a&gt;Training Memory Analysis
&lt;/h2&gt;&lt;h3 id="training-memory-components"&gt;&lt;a href="#training-memory-components" class="header-anchor"&gt;&lt;/a&gt;Training Memory Components
&lt;/h3&gt;&lt;p&gt;训练部分的内存占用由四部分组成：&lt;/p&gt;
$$ \text{training\_memory} = \text{weight} + \text{activation} + \text{optimizer} + \text{gradient} $$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Weights&lt;/strong&gt;: \(\boxed{2P}\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gradients&lt;/strong&gt;（与权重同精度）: \(\boxed{2P}\)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="optimizer-states"&gt;&lt;a href="#optimizer-states" class="header-anchor"&gt;&lt;/a&gt;Optimizer States
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;AdamW&lt;/strong&gt; 优化器需要维护两个动量状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一阶动量 \(m_t\)：\(2P\)&lt;/li&gt;
&lt;li&gt;二阶动量 \(v_t\)：\(2P\)&lt;/li&gt;
&lt;li&gt;合计：\(2 \times 2P = \boxed{4P}\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AdamW &lt;a class="link" href="#references" &gt;[2]&lt;/a&gt; 的更新规则如下：&lt;/p&gt;
$$
\begin{aligned}
m_t &amp;\leftarrow \beta_1 \cdot m_{t-1} + (1 - \beta_1) \cdot g_t \\
v_t &amp;\leftarrow \beta_2 \cdot v_{t-1} + (1 - \beta_2) \cdot g_t^2 \\
\hat{m}_t &amp;\leftarrow \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t \leftarrow \frac{v_t}{1 - \beta_2^t} \\
\theta_t &amp;\leftarrow \theta_{t-1} - \alpha \left( \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_{t-1} \right)
\end{aligned}
$$&lt;h3 id="activation"&gt;&lt;a href="#activation" class="header-anchor"&gt;&lt;/a&gt;Activation
&lt;/h3&gt;&lt;p&gt;激活值是前向传播过程中计算得到的中间结果，用于在反向传播时计算梯度。&lt;/p&gt;
&lt;p&gt;我们仅针对 linear layer 进行推导：&lt;/p&gt;
$$
\begin{aligned}
\text{forward:} \quad &amp; \mathbf{z}_\ell = W_\ell \mathbf{a}_{\ell-1} + b_\ell, \quad \mathbf{a}_\ell = \phi(\mathbf{z}_\ell) \\
\text{backward:} \quad &amp; \frac{\partial \mathcal{L}}{\partial W_\ell} = \frac{\partial \mathcal{L}}{\partial \mathbf{z}_\ell} \cdot \frac{\partial \mathbf{z}_\ell}{\partial W_\ell} = \frac{\partial \mathcal{L}}{\partial \mathbf{z}_\ell} \cdot \boxed{\mathbf{a}_{\ell-1}}
\end{aligned}
$$&lt;p&gt;可以看到，计算第 \(\ell\) 层关于 \(W_\ell\) 的梯度时需要其输入 \(\mathbf{a}_{\ell-1}\)，因此训练时需保存每个模块对应的输入，也就是激活值 (activation)。&lt;/p&gt;
&lt;h4 id="activation--attention"&gt;&lt;a href="#activation--attention" class="header-anchor"&gt;&lt;/a&gt;Activation — Attention
&lt;/h4&gt;&lt;p&gt;按计算图（无优化）可得需保存的激活：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Q/K/V 投影：共享输入 → \(2bsd\)&lt;/li&gt;
&lt;li&gt;\(Q^\top K\)：Q, K 均需保存 → \(2 \times 2bsd = 4bsd\)&lt;/li&gt;
&lt;li&gt;softmax 输入：\(2bhs^2\)&lt;/li&gt;
&lt;li&gt;weighted sum 输入：\(2bhs^2 + 2bsd\)&lt;/li&gt;
&lt;li&gt;output projection 输入：\(2bsd\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Attention 合计：&lt;/strong&gt; \(\boxed{10bsd + 4bhs^2}\)&lt;/p&gt;
&lt;h4 id="activation--ffn--layernorm"&gt;&lt;a href="#activation--ffn--layernorm" class="header-anchor"&gt;&lt;/a&gt;Activation — FFN &amp;amp; LayerNorm
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;FFN&lt;/strong&gt;（SwiGLU，assume \(d_{\text{ff}} = 4d\)）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一层输入：\(2bsd\)&lt;/li&gt;
&lt;li&gt;SwiGLU 输入：\(2 \times d_{\text{ff}} \times d = 8bsd\)&lt;/li&gt;
&lt;li&gt;第二层输入：\(2 \times d_{\text{ff}} \times d = 8bsd\)&lt;/li&gt;
&lt;li&gt;合计：\(\boxed{18bsd}\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;LayerNorm&lt;/strong&gt;：保存输入 → \(\boxed{2bsd}\)&lt;/p&gt;
&lt;h4 id="activation--output"&gt;&lt;a href="#activation--output" class="header-anchor"&gt;&lt;/a&gt;Activation — Output
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt; 包含以下组成部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FinalNorm&lt;/strong&gt; 输入：\(2bsd\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lm_head&lt;/strong&gt; 输入：\(2bsd\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loss&lt;/strong&gt; 输入：\(2bsV\)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;合计：\(\boxed{4bsd + 2bsV}\)&lt;/p&gt;
&lt;h4 id="activation--total"&gt;&lt;a href="#activation--total" class="header-anchor"&gt;&lt;/a&gt;Activation — Total
&lt;/h4&gt;&lt;p&gt;将上面的结果汇总在一起，得到：&lt;/p&gt;
$$
\begin{aligned}
\text{activation} &amp;= L \cdot \text{transformer\_block} + \text{output} \\
&amp;= L \cdot (\text{Pre\_Norm} + \textcolor{red}{\text{Attention}} + \text{Post\_Norm} + \text{FFN}) + \text{output} \\
&amp;= \boxed{bs(32dL + \textcolor{red}{4hsL} + 4d + 2V)} \\
&amp;\approx bsL(32d + \textcolor{red}{4hs}) \\
&amp;\approx \textcolor{red}{4bs^2hL}
\end{aligned}
$$&lt;blockquote&gt;
&lt;p&gt;注：在 Qwen3 中，\(2V / 32dL \approx 6\%\)，\(32dL / 4hsL \approx 2.5\%\)。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以看到，未优化的情况下，\(\text{activation} \propto bs^2\)。这里 \(s^2\) 主要由 attention 部分产生，后续 Flash Attention 就针对这一点进行了优化。&lt;/p&gt;
&lt;h3 id="total-training-memory"&gt;&lt;a href="#total-training-memory" class="header-anchor"&gt;&lt;/a&gt;Total Training Memory
&lt;/h3&gt;&lt;p&gt;将上面的结果进行汇总：&lt;/p&gt;
$$
\begin{aligned}
\text{training\_memory} &amp;= \text{weight} + \text{activation} + \text{optimizer} + \text{gradient} \\
&amp;= 2P + bs(32dL + 4hsL + 4d + 2V) + 4P + 2P \\
&amp;= 8P + bs(32dL + 4hsL + 4d + 2V) \quad \text{(exact)} \\
&amp;\approx 8P + 4bs^2hL
\end{aligned}
$$&lt;p&gt;可以看到，训练阶段的内存占用分为&lt;strong&gt;固定部分&lt;/strong&gt; (\(8P\)) 和&lt;strong&gt;动态部分&lt;/strong&gt; (\(4bs^2hL\))，动态部分主要是 attention 的缓存。&lt;/p&gt;
&lt;h3 id="experiments"&gt;&lt;a href="#experiments" class="header-anchor"&gt;&lt;/a&gt;Experiments
&lt;/h3&gt;&lt;p&gt;我们分别针对 80GB 的显卡计算 Qwen3 系列模型的最高配置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center"&gt;Model&lt;/th&gt;
&lt;th style="text-align: center"&gt;\(P\)&lt;/th&gt;
&lt;th style="text-align: center"&gt;\(L\)&lt;/th&gt;
&lt;th style="text-align: center"&gt;\(h\)&lt;/th&gt;
&lt;th style="text-align: center"&gt;\(s\)&lt;/th&gt;
&lt;th style="text-align: center"&gt;predicted \(b\)&lt;/th&gt;
&lt;th style="text-align: center"&gt;actual \(b\)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Qwen3-0.6B&lt;/td&gt;
&lt;td style="text-align: center"&gt;0.6&lt;/td&gt;
&lt;td style="text-align: center"&gt;28&lt;/td&gt;
&lt;td style="text-align: center"&gt;16&lt;/td&gt;
&lt;td style="text-align: center"&gt;512&lt;/td&gt;
&lt;td style="text-align: center"&gt;68&lt;/td&gt;
&lt;td style="text-align: center"&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Qwen3-1.7B&lt;/td&gt;
&lt;td style="text-align: center"&gt;1.7&lt;/td&gt;
&lt;td style="text-align: center"&gt;28&lt;/td&gt;
&lt;td style="text-align: center"&gt;16&lt;/td&gt;
&lt;td style="text-align: center"&gt;512&lt;/td&gt;
&lt;td style="text-align: center"&gt;42&lt;/td&gt;
&lt;td style="text-align: center"&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Qwen3-4B&lt;/td&gt;
&lt;td style="text-align: center"&gt;4&lt;/td&gt;
&lt;td style="text-align: center"&gt;36&lt;/td&gt;
&lt;td style="text-align: center"&gt;32&lt;/td&gt;
&lt;td style="text-align: center"&gt;512&lt;/td&gt;
&lt;td style="text-align: center"&gt;16&lt;/td&gt;
&lt;td style="text-align: center"&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center"&gt;Qwen3-8B&lt;/td&gt;
&lt;td style="text-align: center"&gt;8.1&lt;/td&gt;
&lt;td style="text-align: center"&gt;36&lt;/td&gt;
&lt;td style="text-align: center"&gt;32&lt;/td&gt;
&lt;td style="text-align: center"&gt;512&lt;/td&gt;
&lt;td style="text-align: center"&gt;4&lt;/td&gt;
&lt;td style="text-align: center"&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;其中 predicted \(b\) 基于前面的准确公式计算得到；actual \(b\) 通过实验验证得到。注意我们这里的 prediction 没有考虑任何优化手段与其他内存开销，因此与实际值有出入。&lt;/p&gt;
&lt;h3 id="case-study"&gt;&lt;a href="#case-study" class="header-anchor"&gt;&lt;/a&gt;Case Study
&lt;/h3&gt;&lt;p&gt;我们分别使用 Qwen3-4B 和 Qwen3-8B 来进行实验（\(b=1\), \(s=512\)）。参考 &lt;a class="link" href="https://zhuanlan.zhihu.com/p/677203832" target="_blank" rel="noopener"
&gt;PyTorch 显存可视化与 Snapshot 数据分析&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id="inference-memory-analysis"&gt;&lt;a href="#inference-memory-analysis" class="header-anchor"&gt;&lt;/a&gt;Inference Memory Analysis
&lt;/h2&gt;&lt;h3 id="inference-components"&gt;&lt;a href="#inference-components" class="header-anchor"&gt;&lt;/a&gt;Inference Components
&lt;/h3&gt;&lt;p&gt;Inference 阶段内存占用主要与模型参数、KV cache 两部分相关：&lt;/p&gt;
$$
\text{Inference\_Memory} = \text{weight} + \text{activation} + \text{KV cache}
$$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Weights&lt;/strong&gt;: \(\boxed{2P}\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Activations&lt;/strong&gt;（经验值，batch size=1）: \(\approx 0.4P\)（参见 &lt;a class="link" href="https://blog.eleuther.ai/transformer-math/" target="_blank" rel="noopener"
&gt;transformer-math&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV cache&lt;/strong&gt;：与序列长度相关，见后续分析。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kv-cache-mechanism"&gt;&lt;a href="#kv-cache-mechanism" class="header-anchor"&gt;&lt;/a&gt;KV Cache Mechanism
&lt;/h3&gt;&lt;p&gt;LLM 推理中为避免重复计算历史 token 的 key/value 而使用的&lt;strong&gt;空间换时间&lt;/strong&gt;的缓存机制。&lt;/p&gt;
&lt;p&gt;自回归时逐 token 生成，每步 attention 形式为（\(\mathbf{q}_t\) 当前 query，\(\mathbf{k}_{:,t}\) / \(\mathbf{v}_{:,t}\) 历史 K/V）：&lt;/p&gt;
$$
\mathbf{q}_t = W_Q \mathbf{x}_t, \quad \mathbf{k}_{:,t} = W_K[\mathbf{x}_1, \ldots, \mathbf{x}_t], \quad \mathbf{v}_{:,t} = W_V[\mathbf{x}_1, \ldots, \mathbf{x}_t]
$$&lt;p&gt;处理下一 token \(\mathbf{x}_{t+1}\) 时只需在已有结果后追加当前步：&lt;/p&gt;
$$
\mathbf{k}_{:,t+1} = [\mathbf{k}_{:,t},\, W_K \mathbf{x}_{t+1}], \quad \mathbf{v}_{:,t+1} = [\mathbf{v}_{:,t},\, W_V \mathbf{x}_{t+1}]
$$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;缓存前&lt;/strong&gt;：每生成一个 token 都重新计算 → 总计算量 \(\sum_{t=1}^{s} \mathcal{O}(t) = \mathcal{O}(s^2)\)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缓存后&lt;/strong&gt;：每步只算当前 token \(W_K \mathbf{x}_{t+1}\)、\(W_V \mathbf{x}_{t+1}\) → 计算量 \(\mathcal{O}(s)\)、空间占用 \(\mathcal{O}(s)\) —— &lt;strong&gt;以空间换时间&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kv-cache-memory"&gt;&lt;a href="#kv-cache-memory" class="header-anchor"&gt;&lt;/a&gt;KV Cache Memory
&lt;/h3&gt;&lt;p&gt;对于 multi-head attention，KV cache 的显存占用为：&lt;/p&gt;
$$
\text{Memory}(\text{KV cache}) = s \times 2 \times 2 \times L \times h \times d_h = \boxed{4sLhd_h}
$$&lt;p&gt;&lt;strong&gt;因子含义：&lt;/strong&gt; \(s\) 序列长，第一个 \(2\) 为 K+V，第二个 \(2\) 为 BF16 的 2 bytes，\(L\) 层、\(h\) 头、\(d_h\) 头维度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remark:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KV 占用与&lt;strong&gt;模型配置&lt;/strong&gt;（\(L, h, d_h\)）和&lt;strong&gt;序列长度&lt;/strong&gt; \(s\) 都有关，token 越多占用越高。&lt;/li&gt;
&lt;li&gt;实际中因 &lt;em&gt;page granularity&lt;/em&gt;、&lt;em&gt;padding&lt;/em&gt;、&lt;em&gt;fragmentation&lt;/em&gt; 往往略高于理论值。&lt;/li&gt;
&lt;li&gt;长输出时 KV 占比会超过权重，成为推理瓶颈 → 见后续「KV Cache 优化」。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="total-inference-memory"&gt;&lt;a href="#total-inference-memory" class="header-anchor"&gt;&lt;/a&gt;Total Inference Memory
&lt;/h3&gt;&lt;p&gt;综合前面分析，推理阶段的总内存为：&lt;/p&gt;
$$
\boxed{\text{Inference\_Memory} \approx 2.4P + 4sLhd_h}
$$&lt;p&gt;可以看到，推理阶段也由固定部分（参数量，activation）以及动态部分（KV cache）组成。&lt;/p&gt;
&lt;h3 id="dynamic-vs-static"&gt;&lt;a href="#dynamic-vs-static" class="header-anchor"&gt;&lt;/a&gt;Dynamic vs. Static
&lt;/h3&gt;&lt;p&gt;由于 Qwen3 的 KV cache 计算为 \(4sLh_{kv}d_h\)，而不同模型只有 \(L\) 不一样，因此对于更大的模型，KV cache 显存占用超过模型权重的上下文长度更高。&lt;/p&gt;
&lt;h2 id="optimization"&gt;&lt;a href="#optimization" class="header-anchor"&gt;&lt;/a&gt;Optimization
&lt;/h2&gt;&lt;h3 id="overview"&gt;&lt;a href="#overview" class="header-anchor"&gt;&lt;/a&gt;Overview
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;阶段&lt;/th&gt;
&lt;th style="text-align: left"&gt;核心方法&lt;/th&gt;
&lt;th style="text-align: left"&gt;典型技术&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Training&lt;/td&gt;
&lt;td style="text-align: left"&gt;显存与效率提升&lt;/td&gt;
&lt;td style="text-align: left"&gt;Activation Checkpointing, Mixed Precision Training, Flash Attention, ZeRO, Pipeline/Model/Data Parallelism&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Inference&lt;/td&gt;
&lt;td style="text-align: left"&gt;长序列与速度优化&lt;/td&gt;
&lt;td style="text-align: left"&gt;KV Cache Optimization, Paged/Radix Attention, Faster Attention, Quantization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="mixed-precision-training"&gt;&lt;a href="#mixed-precision-training" class="header-anchor"&gt;&lt;/a&gt;Mixed Precision Training
&lt;/h3&gt;&lt;p&gt;计算量大的部分用低精度，计算量小的部分用高精度。低精度参与运算，高精度避免 Overflow/Underflow。&lt;/p&gt;
&lt;p&gt;下表是 DeepSeek-V3 &lt;a class="link" href="#references" &gt;[3]&lt;/a&gt; 使用的混合精度训练框架的显存分析：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Precision&lt;/th&gt;
&lt;th style="text-align: center"&gt;BF16&lt;/th&gt;
&lt;th style="text-align: center"&gt;FP32&lt;/th&gt;
&lt;th style="text-align: center"&gt;BF16&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;AMP&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;No&lt;/td&gt;
&lt;td style="text-align: center"&gt;Yes&lt;/td&gt;
&lt;td style="text-align: center"&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Weights&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Master weights&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Gradients&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Adam m&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Adam v&lt;/td&gt;
&lt;td style="text-align: center"&gt;BF16 (2)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;td style="text-align: center"&gt;FP32 (4)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;Static total (bytes/param)&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;16&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;16&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Remark:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;BF16 (w/ AMP) 与 FP32 (w/ AMP) 的静态显存占用相同，但 BF16 (w/ AMP) 的动态显存占用更低。&lt;/li&gt;
&lt;li&gt;主流框架基本都使用了 BF16/FP8 (w/ AMP) 的训练方式。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="zero"&gt;&lt;a href="#zero" class="header-anchor"&gt;&lt;/a&gt;ZeRO
&lt;/h3&gt;&lt;p&gt;将 optimizer states / gradients / weights 按不同 GPU 切片存储，需要参与计算时再 all-gather 整合成完整参数。这样每张卡只需维护自己负责的一部分，大幅降低单卡显存需求 &lt;a class="link" href="#references" &gt;[4]&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ZeRO Stages:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZeRO-1&lt;/strong&gt;：shard optimizer states&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Training\_Memory} = \text{weight} + \text{activation} + \frac{\text{optimizer}}{\#\text{GPUs}} + \text{gradient}
$$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZeRO-2&lt;/strong&gt;：shard optimizer states + gradients&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Training\_Memory} = \text{weight} + \text{activation} + \frac{\text{optimizer} + \text{gradient}}{\#\text{GPUs}}
$$&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZeRO-3&lt;/strong&gt;：shard all&lt;/li&gt;
&lt;/ul&gt;
$$
\text{Training\_Memory} = \text{activation} + \frac{\text{weight} + \text{optimizer} + \text{gradient}}{\#\text{GPUs}}
$$&lt;blockquote&gt;
&lt;p&gt;ZeRO-3 可极大降低单卡显存上限，但通信量也会提高。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="model-parallelism"&gt;&lt;a href="#model-parallelism" class="header-anchor"&gt;&lt;/a&gt;Model Parallelism
&lt;/h3&gt;&lt;p&gt;将模型切分到不同的 GPU 上，计算时，先 dispatch，再执行计算，最后通过 all-gather 等操作得到最终结果 &lt;a class="link" href="#references" &gt;[5]&lt;/a&gt;。切分方式包括 PP (Pipeline Parallelism)、TP (Tensor Parallelism)、EP (Expert Parallelism) 等。&lt;/p&gt;
$$
\text{Training\_Memory} = \frac{\text{Memory}(\text{weight})}{\text{PP degree} \times \text{TP degree}}
$$&lt;p&gt;结合 ZeRO-1 与 Model Parallelism 时（activation 中与 TP 相关的部分按 TP degree 缩减）：&lt;/p&gt;
$$
\text{Memory}_{\text{train}} \approx \frac{\text{weight}}{\text{PP} \times \text{TP}} + \frac{\text{activation}}{\text{TP}} + \frac{\text{optimizer}}{\#\text{GPUs}} + \frac{\text{gradient}}{\text{PP}}
$$&lt;h3 id="activation-checkpointing"&gt;&lt;a href="#activation-checkpointing" class="header-anchor"&gt;&lt;/a&gt;Activation Checkpointing
&lt;/h3&gt;&lt;p&gt;在反向传播时，重新计算所需的输入，来达到以时间换空间的目的 &lt;a class="link" href="#references" &gt;[6]&lt;/a&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;&lt;/th&gt;
&lt;th style="text-align: center"&gt;No ckpt&lt;/th&gt;
&lt;th style="text-align: center"&gt;Selective ckpt&lt;/th&gt;
&lt;th style="text-align: center"&gt;Full ckpt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;memory&lt;/td&gt;
&lt;td style="text-align: center"&gt;很高&lt;/td&gt;
&lt;td style="text-align: center"&gt;中等&lt;/td&gt;
&lt;td style="text-align: center"&gt;很低 \(\sim 2bsd\)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;extra compute&lt;/td&gt;
&lt;td style="text-align: center"&gt;无&lt;/td&gt;
&lt;td style="text-align: center"&gt;中等&lt;/td&gt;
&lt;td style="text-align: center"&gt;很高 \(\sim 2Pbs\)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;实践中常结合 model parallelism 与 selective checkpointing 来实现 trade-off。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="flash-attention"&gt;&lt;a href="#flash-attention" class="header-anchor"&gt;&lt;/a&gt;Flash Attention
&lt;/h3&gt;&lt;p&gt;通过将 Attention 的计算进行分块，来提高内存访问效率以及降低反向传播时所需要的 activation 大小 &lt;a class="link" href="#references" &gt;[7]&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flash Attention&lt;/strong&gt; 通过 tiling 与 online-softmax 降低该部分显存并提升效率（详见 &lt;a class="link" href="https://maosong.website/p/notes-on-flashattention/" target="_blank" rel="noopener"
&gt;notes on Flash Attention&lt;/a&gt;）。这样 attention 部分的显存就由 \(\text{activation} \propto bs^2\) 降低到了 \(\text{activation} \propto bs\)。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theorem:&lt;/strong&gt; Flash Attention 输出 \(O = \text{softmax}(QK^T)V\)（correctness）。其时间复杂度为 \(\mathcal{O}(s^2 d)\)，空间复杂度为 \(\mathcal{O}(s)\)（memory savings）。&lt;/p&gt;
&lt;h3 id="kv-cache-optimization"&gt;&lt;a href="#kv-cache-optimization" class="header-anchor"&gt;&lt;/a&gt;KV Cache Optimization
&lt;/h3&gt;$$
\text{Memory}(\text{KV cache}) = s \times 2 \times 2 \times L \times h \times d_h
$$&lt;p&gt;针对公式中各因子的优化方向 &lt;a class="link" href="#references" &gt;[8]&lt;/a&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;\(s\)&lt;/strong&gt;: KV cache compression, eviction, selection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\(2\) (bytes)&lt;/strong&gt;: KV cache quantization&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\(2\) (K+V)&lt;/strong&gt;: key-value sharing, MLA &lt;a class="link" href="#references" &gt;[9]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;\(h \times d_h\)&lt;/strong&gt;: MQA &lt;a class="link" href="#references" &gt;[10]&lt;/a&gt;, GQA &lt;a class="link" href="#references" &gt;[11]&lt;/a&gt;, MLA&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="weight-quantization"&gt;&lt;a href="#weight-quantization" class="header-anchor"&gt;&lt;/a&gt;Weight Quantization
&lt;/h3&gt;&lt;p&gt;使用低精度来表示高精度数值的方法，来减少内存占用/提高计算效率。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;量化时机&lt;/th&gt;
&lt;th style="text-align: left"&gt;代表性工作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;训练后量化 (PTQ)&lt;/td&gt;
&lt;td style="text-align: left"&gt;GPTQ &lt;a class="link" href="#references" &gt;[12]&lt;/a&gt;, AWQ &lt;a class="link" href="#references" &gt;[13]&lt;/a&gt;, SmoothQuant &lt;a class="link" href="#references" &gt;[14]&lt;/a&gt;, GGUF &lt;a class="link" href="#references" &gt;[15]&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;量化感知训练 (QAT)&lt;/td&gt;
&lt;td style="text-align: left"&gt;LLM-QAT &lt;a class="link" href="#references" &gt;[16]&lt;/a&gt;, PEQA &lt;a class="link" href="#references" &gt;[17]&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="activation-offloading"&gt;&lt;a href="#activation-offloading" class="header-anchor"&gt;&lt;/a&gt;Activation Offloading
&lt;/h3&gt;&lt;p&gt;将一部分参数/优化器状态/激活值等存储到 CPU 上，需要的时候再加载到 GPU 上。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Offloading 场景&lt;/th&gt;
&lt;th style="text-align: left"&gt;代表性工作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;训练阶段 Offloading&lt;/td&gt;
&lt;td style="text-align: left"&gt;ZeRO-Offload &lt;a class="link" href="#references" &gt;[18]&lt;/a&gt; / ZeRO-Infinity, FSDP &lt;a class="link" href="#references" &gt;[19]&lt;/a&gt; CPU Offload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;推理阶段 Offloading&lt;/td&gt;
&lt;td style="text-align: left"&gt;FlexGen &lt;a class="link" href="#references" &gt;[20]&lt;/a&gt;, vLLM &lt;a class="link" href="#references" &gt;[21]&lt;/a&gt; KV Cache Offload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;MoE Offloading&lt;/td&gt;
&lt;td style="text-align: left"&gt;KTransformers &lt;a class="link" href="#references" &gt;[22]&lt;/a&gt;, DeepSpeed-MoE &lt;a class="link" href="#references" &gt;[23]&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="real-systems"&gt;&lt;a href="#real-systems" class="header-anchor"&gt;&lt;/a&gt;Real Systems
&lt;/h2&gt;&lt;h3 id="training-frameworks"&gt;&lt;a href="#training-frameworks" class="header-anchor"&gt;&lt;/a&gt;Training Frameworks
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Framework&lt;/th&gt;
&lt;th style="text-align: left"&gt;Memory Optimizations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Megatron-LM &lt;a class="link" href="#references" &gt;[5]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;TP, SP, Activation Checkpointing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;DeepSpeed &lt;a class="link" href="#references" &gt;[24]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ZeRO-1/2/3, CPU/NVMe Offload, Activation Checkpointing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;FSDP &lt;a class="link" href="#references" &gt;[19]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Full parameter sharding, Gradient sharding, CPU Offload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;Colossal-AI &lt;a class="link" href="#references" &gt;[25]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;ZeRO, TP, PP, Activation Checkpointing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="inference-frameworks"&gt;&lt;a href="#inference-frameworks" class="header-anchor"&gt;&lt;/a&gt;Inference Frameworks
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Framework&lt;/th&gt;
&lt;th style="text-align: left"&gt;Key Techniques&lt;/th&gt;
&lt;th style="text-align: left"&gt;Memory Optimizations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;vLLM &lt;a class="link" href="#references" &gt;[21]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Paged Attention&lt;/td&gt;
&lt;td style="text-align: left"&gt;KV cache paging, Continuous batching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;SGLang &lt;a class="link" href="#references" &gt;[26]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Radix Attention&lt;/td&gt;
&lt;td style="text-align: left"&gt;KV cache reuse, Efficient scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;TensorRT-LLM &lt;a class="link" href="#references" &gt;[27]&lt;/a&gt;&lt;/td&gt;
&lt;td style="text-align: left"&gt;Kernel fusion&lt;/td&gt;
&lt;td style="text-align: left"&gt;Weight quantization, KV cache optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;h3 id="takeaway"&gt;&lt;a href="#takeaway" class="header-anchor"&gt;&lt;/a&gt;Takeaway
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: left"&gt;Components&lt;/th&gt;
&lt;th style="text-align: center"&gt;Training&lt;/th&gt;
&lt;th style="text-align: center"&gt;Inference&lt;/th&gt;
&lt;th style="text-align: left"&gt;Optimization&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;weights&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(2P\)&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(2P\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;quantization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;optimizer states&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(4P\)&lt;/td&gt;
&lt;td style="text-align: center"&gt;0&lt;/td&gt;
&lt;td style="text-align: left"&gt;ZeRO, offloading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;gradients&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(2P\)&lt;/td&gt;
&lt;td style="text-align: center"&gt;0&lt;/td&gt;
&lt;td style="text-align: left"&gt;ZeRO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;activations&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(\sim 4Lhs^2b\)&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(\sim 0.4P\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;ckpt, offloading, flash attention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;KV cache&lt;/td&gt;
&lt;td style="text-align: center"&gt;0&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(4sLhd_h\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;KV optimization, attention&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: left"&gt;&lt;strong&gt;TOTAL&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(8P + 4Lhs^2b\)&lt;/td&gt;
&lt;td style="text-align: center"&gt;\(2.4P + 4sLhd_h\)&lt;/td&gt;
&lt;td style="text-align: left"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;训练&lt;/strong&gt;：瓶颈主要在激活值（随 batch size / 序列长度线性增长）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理&lt;/strong&gt;：瓶颈主要在 KV Cache（随序列长度增长）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="future-directions"&gt;&lt;a href="#future-directions" class="header-anchor"&gt;&lt;/a&gt;Future Directions
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;More efficient architecture (attention, MoE).&lt;/li&gt;
&lt;li&gt;Scalable training/inference framework.&lt;/li&gt;
&lt;li&gt;Software-hardware co-design algorithms.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="references"&gt;&lt;a href="#references" class="header-anchor"&gt;&lt;/a&gt;References
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;An Yang et al., &amp;ldquo;Qwen3 Technical Report,&amp;rdquo; arXiv:2505.09388, 2025.&lt;/li&gt;
&lt;li&gt;Ilya Loshchilov and Frank Hutter, &amp;ldquo;Decoupled Weight Decay Regularization,&amp;rdquo; arXiv:1711.05101, 2019.&lt;/li&gt;
&lt;li&gt;DeepSeek-AI, &amp;ldquo;DeepSeek-V3 Technical Report,&amp;rdquo; arXiv:2412.19437, 2025.&lt;/li&gt;
&lt;li&gt;Samyam Rajbhandari et al., &amp;ldquo;ZeRO: Memory Optimizations Toward Training Trillion Parameter Models,&amp;rdquo; arXiv:1910.02054, 2020.&lt;/li&gt;
&lt;li&gt;Mohammad Shoeybi et al., &amp;ldquo;Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism,&amp;rdquo; arXiv:1909.08053, 2020.&lt;/li&gt;
&lt;li&gt;Vijay Korthikanti et al., &amp;ldquo;Reducing Activation Recomputation in Large Transformer Models,&amp;rdquo; arXiv:2205.05198, 2022.&lt;/li&gt;
&lt;li&gt;Tri Dao et al., &amp;ldquo;FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,&amp;rdquo; arXiv:2205.14135, 2022.&lt;/li&gt;
&lt;li&gt;Haoyang Li et al., &amp;ldquo;A Survey on Large Language Model Acceleration based on KV Cache Management,&amp;rdquo; arXiv:2412.19442, 2025.&lt;/li&gt;
&lt;li&gt;DeepSeek-AI, &amp;ldquo;DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model,&amp;rdquo; arXiv:2405.04434, 2024.&lt;/li&gt;
&lt;li&gt;Noam Shazeer, &amp;ldquo;Fast Transformer Decoding: One Write-Head is All You Need,&amp;rdquo; arXiv:1911.02150, 2019.&lt;/li&gt;
&lt;li&gt;Joshua Ainslie et al., &amp;ldquo;GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints,&amp;rdquo; arXiv:2305.13245, 2023.&lt;/li&gt;
&lt;li&gt;Elias Frantar et al., &amp;ldquo;GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers,&amp;rdquo; arXiv:2210.17323, 2023.&lt;/li&gt;
&lt;li&gt;Ji Lin et al., &amp;ldquo;AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration,&amp;rdquo; arXiv:2306.00978, 2024.&lt;/li&gt;
&lt;li&gt;Guangxuan Xiao et al., &amp;ldquo;SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models,&amp;rdquo; arXiv:2211.10438, 2024.&lt;/li&gt;
&lt;li&gt;Georgi Gerganov, &amp;ldquo;ggml: Tensor library for machine learning,&amp;rdquo; &lt;a class="link" href="https://github.com/ggerganov/ggml" target="_blank" rel="noopener"
&gt;GitHub&lt;/a&gt;, 2023.&lt;/li&gt;
&lt;li&gt;Zechun Liu et al., &amp;ldquo;LLM-QAT: Data-Free Quantization Aware Training for Large Language Models,&amp;rdquo; arXiv:2305.17888, 2023.&lt;/li&gt;
&lt;li&gt;Jeonghoon Kim et al., &amp;ldquo;Memory-Efficient Fine-Tuning of Compressed Large Language Models via sub-4-bit Integer Quantization,&amp;rdquo; arXiv:2305.14152, 2023.&lt;/li&gt;
&lt;li&gt;Jie Ren et al., &amp;ldquo;ZeRO-Offload: Democratizing Billion-Scale Model Training,&amp;rdquo; arXiv:2101.06840, 2021.&lt;/li&gt;
&lt;li&gt;Yanli Zhao et al., &amp;ldquo;PyTorch FSDP: Experiences on Scaling Fully Sharded Data Parallel,&amp;rdquo; arXiv:2304.11277, 2023.&lt;/li&gt;
&lt;li&gt;Ying Sheng et al., &amp;ldquo;FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU,&amp;rdquo; arXiv:2303.06865, 2023.&lt;/li&gt;
&lt;li&gt;Woosuk Kwon et al., &amp;ldquo;Efficient Memory Management for Large Language Model Serving with PagedAttention,&amp;rdquo; SOSP, 2023.&lt;/li&gt;
&lt;li&gt;Hongtao Chen et al., &amp;ldquo;KTransformers: Unleashing the Full Potential of CPU/GPU Hybrid Inference for MoE Models,&amp;rdquo; SOSP, 2025.&lt;/li&gt;
&lt;li&gt;Samyam Rajbhandari et al., &amp;ldquo;DeepSpeed-MoE: Advancing Mixture-of-Experts Inference and Training to Power Next-Generation AI Scale,&amp;rdquo; arXiv:2201.05596, 2022.&lt;/li&gt;
&lt;li&gt;Jeff Rasley et al., &amp;ldquo;DeepSpeed: System Optimizations Enable Training Deep Learning Models with Over 100 Billion Parameters,&amp;rdquo; KDD, 2020.&lt;/li&gt;
&lt;li&gt;Shenggui Li et al., &amp;ldquo;Colossal-AI: A Unified Deep Learning System For Large-Scale Parallel Training,&amp;rdquo; ICPP, 2023.&lt;/li&gt;
&lt;li&gt;Lianmin Zheng et al., &amp;ldquo;SGLang: Efficient Execution of Structured Language Model Programs,&amp;rdquo; NeurIPS, 2024.&lt;/li&gt;
&lt;li&gt;NVIDIA Corporation, &amp;ldquo;TensorRT-LLM: A TensorRT Toolset for Optimizing LLM Inference,&amp;rdquo; &lt;a class="link" href="https://github.com/NVIDIA/TensorRT-LLM" target="_blank" rel="noopener"
&gt;GitHub&lt;/a&gt;, 2023.&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>