基于 TRT-LLM 的 LLM 推理流程。

1.1. 推理

LLM 推理有两个阶段:

  • prefill: 输入 prompt 处理的阶段,会生成 cache
  • decode/generation: 后续新生成 token 的阶段,会利用 prefill 的 cache 以及当前阶段本身产生的 cache

Prefill and Decode flow

Prefill

  • Prefill 阶段会并行处理输入的所有 token,这里处理方式使得即使在较小的 bathc size 下也能打满 GPU 的利用率;
  • 由于在 prefill 阶段需要处理长输入,所以这个阶段的计算开销很大,显卡利用率很容易打满;
  • 增加 batch size 时,prefill 阶段每个 token 的处理开销几乎保持不变,这意味着 prefill 的效率在小 batch size 时就很高,说明开销是固定的。

Decode 阶段

  • Decode 阶段是自回归的,每次只生成一个 token,因此这一阶段的 GPU 利用率较低;
  • IO 密集型:Decode 过程中需要频繁地读取 KV Cache,导致 IO 开销较大。即使输入的长度始终为 1,反复的 KV Cache 访问也使得这一阶段成为 IO 密集型;
  • 扩大 batch size 可以显著降低 decode 阶段的开销,因为更大的 batch size 能更有效地分摊固定的 IO 读写成本,不过开再大也不能完全打满GPU,毕竟KV Cache的读写开销过大,导致decode阶段难以成为计算密集型。

References:

Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2024-11-29 17:03:22

results matching ""

    No results matching ""