有很多种方式可以运行,以下是一个快速概述
简而言之:
Pytorch团队提出了一种通过在底层建立优化来优化的方法
- Torch.compile:用于PyTorch模型的编译器
- GPU量化:使用降低精度的操作加速模型
- 推测解码:使用一个小的“草图”模型来预测一个大的“目标”模型的输出,加速LLMs
- 张量并行:通过在多个设备上并行运行模型来加速
Pytorch在不到1000行的代码中实现了所有这些。
下面是性能对比

现在,让我们逐个解释一下!
原始(25 tokens/s)
这是LLaMA-7b的性能。
使用新的编译器和聪明分配实现首次3倍增益(76 TOK/S)
使用LLaMA-7B,Pytorch分析了受限于CPU的性能问题。这意味着首要目标是降低开销,使其更高效。
于是编译器登场。通过将更大的区域编译为预编译状态,每个操作的CPU调用次数减少了。这意味着此包装器现在可以在没有间隙的情况下执行,如下所示。
使用它,只需使用以下代码:
torch.compile(decode_one_token, mode="reduce-overhead", fullgraph=True)
在幕后发生了什么?
首先,当生成更多的标记时,kv-cache会增长,每次缓存增长时都需要重新分配和复制(昂贵的计算)。为了允许最大的尺寸,Pytorch实现了一个大的缓存。
其次,在预填充阶段需要两种策略分别进行编译。整个提示是动态处理的,标记根据上面显示的代码进行解码。保持这两种策略并行允许进行进一步的优化。仅使用这两种策略,可以获得4倍的推理性能提升。