【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【AI】【Agent】tokens 介绍
分析了 token 的定义,以及输入 tokens 的处理,和输出 tokens 的速度,分析了参数量与输出 tokens 的关系:参数量越大,输出 tokens 速度越小,并分析了其原因,提到了大模型生成文本是逐个 token 自回归的过程,其生成的每一个 token 都会被重新作为输入,再经过模型计算,生成出新的 token,下面继续分析

Agent

上篇 blog 提到,对于每个新生成的 token,模型都要执行如下操作

  • 从内存中,加载所有参数到 CPU 缓存
  • 做矩阵乘法和激活函数
  • 继续采样下一个 token

其中,这里的第 2 步的计算量 ≈ 模型参数量 × 上下文长度,所以 7B 模型的计算量 ≈ 3.8B 模型的 1.84 倍

所以用之前的表格数据

在这里插入图片描述

可以推算出来参数量和 tokens/s 输出速度关系大致如下

模型 参数量 相对计算量 速度 速度比(vs Phi-3)
Phi-3-mini 3.8B 1.0x 100(取中值) 1.0x
CodeLlama-7B 7.0B ~1.84x 50 ~0.5x
Llama-3-8B 8.0B ~2.1x 37.5 0.375x

可以看到,tokens/s 输出速度和参数量的关系是符合预期的,当计算量翻倍时,速度减半,而且实际速度还受模型架构,内存带宽,CPU 缓存命中率等因素影响,所以不是严格线性,而是衰减得更快,但大体趋势不变

OK,上面提到了 tokens 的生成速度除了正比于参数量,还受到一些硬件瓶颈的限制,下面来看下这些硬件约束(比如内存带宽),是如何影响计算能力的

在纯 CPU 推理的场景,比如这台机器,虽然 CPU 能力很强大(Ryzen 9),但是 GPU 很弱,属于入门级显卡,在这种场景下,真正的瓶颈往往不是 CPU 算力,而是内存带宽

在这里插入图片描述

举个例子,比如一个 7B 的模型,使用 Q5_K_M 进行量化,经量化后的内存需要约 5.5GB,此时每生成一个 token,CPU 就需要从内存中再读取数个 GB 的权重,而 DDR5 内存的带宽 ≈ 50~70GB/s,也就是说,每秒最多能搬运 10 ~ 20 个 token 的数据权重(而这个模型下的计算能力可以生成 token 的速度是 40~60 tokens/s),此时就可以看到

  • 数据搬运速度 < CPU 计算速度

这就意味着 CPU 要经常饿着等数据,这也就是为什么参数越多,每次要搬运的数据越多,等待的时间越长,tokens/s 越低,往往达不到 CPU 理论计算能力的 tokens 生成速度,所以即使 CPU 再强,有 16 核,也会被内存拖慢了

在这里插入图片描述

OK,上面提到的是纯 CPU 推理,主要依靠的是 CPU 计算能力,但受内存带宽的影响,其 tokens/s 的生成速度上限被降低了,但如果是 GPU 作为计算主力的话,下面来看下,假设有 RTX 4090(带 24GB 显存):

  • 显存带宽 ≈ 1 TB/s(远远大于 DDR5,是 DDR5 的 15 倍!)
  • 权重全在显存,此时数据搬运极快
  • 那么此时数据搬运就不再是瓶颈,瓶颈又会转移到计算速度上,此时大模型更能发挥出并行优势

在这里插入图片描述

OK,所以最后总结下,在 CPU + 内存的场景,主要依靠 CPU 进行推理的话,内存带宽是瓶颈,大模型能力会被拖后腿,要想真正发挥大模型计算能力,建议升级 GPU

然后再提下 Phi-3 模型,如果是这种 CPU 推理场景,建议使用 Phi-3 模型,因为微软对 Phi-3 做了极致优化:

  • 架构精简:用更少的参数实现接近 7B 的能力
  • CPU 友好设计:减少内存访问模式的随机性,提高缓存命中率
  • 算子融合:把多个计算步骤合并,减少数据搬运

所以 Phi-3-mini(3.8B)特别快,能达到接近于 2 倍于 Llma-3-8B 的速度,得益于其在数据搬运的功能上做了功夫,但从长远来看,还是最好升级 GPU


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【AI】【Agent】输入/输出 tokens

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐