最近看了下影响大语言模型的因素,简单说就是带宽和算力
带宽就是内存带宽,越大越好
算力就是FLOPS也是越大越好.(有点废话了…)
但是我使用aida64进行跑分测试时发现分单精度和双精度FLOPS,那么推理的时候主要看哪个?单精度模型用单精度的算,双精度的用双精度的算?
不过这样又引出一个问题,量化的模型用哪个算…
一般常用 FP32 也就是单精度。
浮点数精度:双精度(FP64)、单精度(FP32、TF32)、半精度(FP16、BF16)、8位精度(FP8)、4位精度(FP4、NF4)
量化精度:INT8、INT4
奥奥,感谢,那fp16是单精度速度*2
? int8*4
int4*8
?是这么算吗?
主要还是影响显存,显存会按1/2下降,速度也会提升,不一定是1/2,从浮点数量化到整数精度速度提升会更多
正好借这个贴简单科普下 LLM 推理的一些入门知识。
推理工况
首先,我们要明白影响 LLM 速度的究竟是什么。在此之前先要搞清楚 LLM 推理的工况:
- LLM 推理分为 prefill(也就是提示词处理)和 decode(文本生成)两个阶段。
- 推理分为小 batch(可以简单理解为单线程)和高 batch(多个生成任务并行执行)。
搞清楚这两个分类之后,我们来讨论他们的瓶颈:
- prefill 阶段是计算瓶颈。
- decode 阶段,在小 batch下是带宽瓶颈,随着 batch 数提高,逐渐转换为计算瓶颈。
量化与精度
其次对于推理要分清存储精度和推理精度,两者可以不一致。具体的情况要看你使用的推理引擎。例如 llama.cpp 里的各种量化格式推理时先 dequant 成例如 fp32,再交由 kernel 计算。模型占用的显存取决于存储精度,但 dequant 会有一定开销,取决于具体格式。
LLM 推理几乎从不使用双精度(fp64),无论是存储还是计算,因为大部分显卡的 fp64 算力非常差,而且 fp64 精度过剩,对推理没有好处。
GPU 的计算力
GPU 的计算能力是很复杂的话题。在各个精度下的算力没有简单的换算关系。Tensor Core 和 Shader Core 也提供不同大小的算力,具体需要查询 NVIDIA 对应 GPU 的 Spec,一般会给出标称值。
一般来说,prefill 速度参照 tensor core 算力,单 batch decode 参照内存带宽,高 batch decode 参照 tensor core 算力对比即可。
应该选择怎样的 GPU
有关 M 芯片
首先,由于最近看到了许多科技博主在不专业的测试下得出 Mac M 芯片做 LLM 推理性价比高的结论,大有误人子弟、以次充好之嫌,在此做一些总结:
- M 芯片的内存带宽相较于其算力好,因此 M 芯片看起来在上下文不太长(轻 prefill),并行数不太高(batch =1)的情况下有挺好(能看)的性能。
- M 芯片的算力,在同级别 NVIDIA 竞品中非常糟糕。prefill 和高 batch 工况下完全不能用。就算是 2080Ti-22G,在高并发下跑 W8A8-Int8(14B) 也能达到接近 400Token/s 的速度,就算 M4Max 也毫无还手之力。(注:2080Ti 22G 参考价格 <3000)
- 关于 M 芯片的显存性价比高的论述完全无效。1. 不用张量并行的话,LLM 多卡推理对卡间带宽没有什么要求,因此可以很轻松的用多卡叠加显存,性价比完全可以超过 M 芯片;2. 你就算 M4Max 的算力,跑 70B 以上的模型速度都几乎属于不可接受的水平了,要那么大显存完全没用啊。
综上所述,M 芯片只适用于【轻 prefill、低 batch,模型不太大】的推理工况(还得至少是 Pro 或者 Max)。即使是这种工况,性价比也不如其他方案。对于那些简单测试个模型速度就得出结论的视频,纯纯误导消费者,罪大恶极。
那么,怎么选 GPU 呢
简单来说:试!因为 LLM 推理和 GPU 算力都挺复杂的,理论分析除非特别了解各 GPU 的计算能力和推理工况,不然很可能绕进去得出错误结论。因此比较好的方法就是实际尝试(用自己的推理需求)。现在在线租卡平台多如牛毛,也没啥门槛,所以说这是很轻松的事情。
附加:个人玩 LLM 推理性价比比较高的 GPU
- P40:究极便宜的大显存(虽然现在涨了),算力一般但是和 M4Max 五五开没问题。
- 2080Ti-22G:经典魔改卡,各方面都不错。
- 3090 / 4090:富哥就用这些吧。
- AMD 卡:也能推理,性价比貌似也不差。不过我不是特别了解,略过。
附加:常用推理引擎
- llama.cpp:社区用的多。性能不好但是使用比较简单,兼容性也很好。
- sglang:高并发用。大负载工况下性能很优秀。
- vllm:类似 sglang,但性能不如。
- exllama2
我想楼主的问题上面介绍都有涉及了。若有错误也欢迎指出。
感谢,昨天晚上我就看了类似的帖子(但是是营销号写的,排版都错了)
其实mac系列真正能跑的应该也就是mac studio吧?800的带宽够用了,个人不追求并发也能用?
但问题是价格感人…
对的,只是能跑。但是单论跑 LLM 这一项没有性价比。如果非常追求体积功耗,而且只是随便玩玩(这么贵的拿来玩可能也只有富哥了)倒是可以接受。
如果是使用像epyc这种多核心的服务器cpu来跑量化模型,效果怎么样?比如向双路9654这种,带宽是足够了,但是算力是不是不太行?
另外一个就是假如内存带宽约等于显存带宽,那么是否运算的时候哪怕超出显存的那部分,也不会太降速?还是说超出部分会用cpu来跑?
这个问题主要是类似mac的疑惑,因为mac可以叫统一内存也可以叫集显用内存,那么如果是正常的机器,内存带宽等于显存带宽,不知道是否可用用显卡的算力+内存的空间(或者内存+显存)
无论怎么样不怎么推荐用 CPU 跑,因为现在推理引擎都是往 GPU 上的计算单元优化的,CPU 基本只是保证能跑。另一方面也是算力差很多。
超过部分 llama.cpp 可以设置用 CPU 跑,当然会降速的,而且很慢。你后面说的那个不行,PCIe就瓶颈了。交换模型还有一大堆额外开销。
感谢,那么说集显因为焊上去的所以没有pcie的瓶颈?(明确指定就是使用内存或者瓶颈比较高?),而独显其实没法把工作空间挪到内存中进行,只能先搬回自己的显存里跑,而搬这一步就比较慢了?
M 芯片的集显可以直接在内存的数据上做计算。是的,独立 GPU 所有的计算的前提是内容要在显存里(注:这是一般情况下;也有零拷贝的一些技术让kernel可以直接从主机内存上读数据,不过应用范围十分局限),没有办法说直接拿 GPU 在内存上的数据做计算的。
PCIe他毕竟是个相对外部的控制器,延迟带宽什么的都一般,要频繁搬模型的话会有严重瓶颈
非常感谢大佬解答
我记得某个视频提到:
新款的M4,FP16即半精度能力较差,所以推理其实不是在行
FP32的能力不错,所以训练的时候还可以