0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LLM推理任务中GPU的选择策略

新机器视觉 来源:知乎 2024-04-07 15:32 次阅读

去年十月,美商务部禁令的出现,使中国客户无法使用NVIDIA H100/H200旗舰芯片。一时间,各种NV存货、中国限定卡型、其他厂商NPU纷至沓来。在大模型推理场景中,如何客观比较不同硬件的能力,成为一大难题,比如:

Q1:输入输出都很长,应该选H20还是A800?

Q2:高并发情况下,用L20还是RTX 4090?

最直接的解决方法是,使用SOTA推理服务框架,对不同硬件X不同负载做全面的评估。但是,大模型任务推理的负载变化范围很大,导致全面评估耗时耗力。主要来源以下几个方面:

输入参数batch size、input sequence length、output sequence length变化多样。

大模型种类很多,从7B到170B,不同尺寸模型都有。

硬件种类很多。参考许欣然的文章,备选的NVIDIA GPU就有15种,而且还有其他厂商的硬件。

e9017e7e-f35c-11ee-a297-92fbcf53809c.jpg

如何在繁重的benchmark任务前,对不同硬件在不同推理任务上的表现有一个直观的认识?为此,我做了一个简单的性能评估工具LLMRoofline,它使用Roofline模型,不需要运行程序,来简单比较不同硬件。

Roofline模型

Roofline模型是一种非常简化的性能模型,但可以清晰地展示出应用程序的硬件性能极限。

在Roofline模型可以直观展示一张曲线图,其中x轴表示AI(Arithmetic Intensity),即每个内存操作对应的浮点运算次数;y轴表示性能,通常以每秒浮点运算次数(Tflops)表示。图中的“屋顶”(Roofline)由两部分组成:一部分是峰值内存带宽(Memory Bandwidth)限制的斜线,另一部分是峰值计算性能(Peak Performance)限制的水平线。这两部分相交的点是应用程序从内存带宽受限转变为计算性能受限的转折点。

下图绘制了多个不同GPU(包括NVIDIA的A100、H20、A800、L40S、L20和4090)的Roofline模型。如果一个硬件的屋顶Roof越高,那么它在处理计算密集型任务时的性能更好;如果屋顶的Line斜率越高,表示它的HBM带宽越高,处理访存密集型任务时,性能越好。

e90f530a-f35c-11ee-a297-92fbcf53809c.jpg

图1,不同GPU的Roofline模型

LLM推理性能模型

方法一:全局Roofline模型

基于Roofline模型,可以计算出不同LLM模型推理任务的AI。我们用Decode阶段的AI来代表整体推理阶段的AI,因为Prefill阶段,是计算密集的,且在一次推理任务中只算一次,时间占比很小。因为LLM的Transformers layer数比较大,所以只考虑Transformers的计算和访存,忽略包括Embedding在内的前后处理开销。

AI = 总计算量FLOPS/(总参数大小+总KVCache大小)

为了简化,没考虑中间activation的内存读取,因为它的占比通常很小,而且可以被FlashAttention之类的Kernel Fusion方法优化掉。

总计算量和参数量可以参考如下文章,文章中的数据还是针对GPT2的,这里在LLAMA2模型下进行一些修改,主要包括取消intermediate_size=4*hidden_size限制,并考虑GQA和MoE等模型结构的优化。

这里约定,bs(batch size),in_len(输入序列长度,Decoder阶段一直是1),kv_len(KVCache长度),h(hidden_size),i(intermediate_size)。

总计算量

e91eef0e-f35c-11ee-a297-92fbcf53809c.png

总参数量

e92da9c2-f35c-11ee-a297-92fbcf53809c.png

KVCache参数量

e93f2094-f35c-11ee-a297-92fbcf53809c.png

如果使用MoE结构,我们计算参数时对ffn 乘以 #Expert,计算量对ffn乘以topk。

有了任务的AI,可以在图1中,min(peak_flops, ai * bandwidth)查找对应位置的Tflops性能,从而比较两个硬件上该任务的性能优劣。

使用多卡Tensor Parallel并行,分子分母都近似除以GPU数目,因此AI几乎不变。使用FP8会增加Roof高度,但是Line的斜率不变。

方法二:算子Roofline模型

上述方法还是将整个Transformers看成整体算出AI,还可以对Decoder中每一个算子算出它的AI,然后使用Roofline模型计算该算子的延迟。计算算子的AI可以考虑Activation的读写开销,相比方法一访存计算会更加精确。

我找到了一个现成的项目LLM-Viewer做了上述计算,该项目也是刚发布不久。

https://github.com/hahnyuan/LLM-Viewergithub.com/hahnyuan/LLM-Viewer

值得注意的是,目前无论方法一还是方法二都无法精确估计运行的延迟。比如,我们用LLM-Viewer估计A100的延迟,并和TensorRT-LLM的数据对比,可见最后两列差距还是比较大的。因为Roofline模型只能估计性能上限,并不是实际的性能。

Model Batch Size Input Length Output Length TRT-LLM
Throughput (token/sec)
LLM-Viewer
Throughput
(token/sec)
LLaMA 7B 256 128 128 5,353 8,934
LLaMA 7B 32 128 2048 1,518 2,796
LLaMA 7B 32 2048 128 547 788
LLaMA 7B 16 2048 2048 613 1,169

但是,应该可以基于LLM-Viewer的数据进行一些拟合来精确估计不同GPU的性能,不过据我了解还没有对LLM做精确Performance Model的工作。

效果

LLMRoofline可以使用上述两种方式比较不同硬件的性能。它会画出一个Mesh,横轴时序列长度(可以看成生成任务的平均KVCache length),纵轴时Batch Size。

比如,我们比较NVIDIA H20 rumors和A100在推理任务上的差异。这两款芯片一个带宽很高4TBps vs 2 TBps,一个峰值性能高 312 Tflops vs 148 Flops。

使用LLAMA2 13B时,左图是方法二、右图是方法一的A100/H20的比较结果,大于1表示有优势。两张图有差异,但是分布近似。A100比H20的优势区域在网格的左上角。当序列长度越短、Batch Size越大,A100相比H20越有优势。这是因为,此时任务更偏计算密集型的,A100的峰值性能相比H20更具优势。

借助性能模型,我们可以澄清一些误解。例如,有人可能会认为在H20上增大Batch Size会使任务变得更加计算密集,且由于H20的计算能力非常低,因此增大Batch Size是无效的。这里忽略了序列长度对AI的影响,对于处理长序列的任务来说,任务一直是访存密集的,增大Batch Size仍然是一种有效的优化策略。

e94d397c-f35c-11ee-a297-92fbcf53809c.jpg

当使用LLAMA2 70B时,A100相比H20优势区域扩大。这是因为LLAMA2 13B没有用GQA,但LLAMA2 70B用了GQA,这让推理任务更偏计算密集,对A100更有利。

e95ab11a-f35c-11ee-a297-92fbcf53809c.jpg

当使用Mistral 7B时,LLM-Viewer目前还没有登记模型信息,我们只有方法一的结果,A100相比H20的优势区域相比13B缩小。这说明hidden size越大,越偏计算密集。

e9677288-f35c-11ee-a297-92fbcf53809c.jpg

Mixtral 8X7B时,可见A100相比H20一致保持劣势,说明MoE把推理任务推向访存密集的深渊,H20的带宽优势发挥明显作用。

e97304ae-f35c-11ee-a297-92fbcf53809c.jpg

通过使用 LLMRoofline,我们能够制作出许多两个硬件比较的 Mesh,从而清晰地观察到一些类似上述的简单结论。

总结

大模型推理任务的复杂性和多变性使得对不同型号GPU的适用范围的理解变得尤为重要。为了帮助大家直观地感知这些差异,本文介绍了一款名为LLMRoofline的性能分析工具。该工具采用Roofline模型,能够直观地对比不同硬件的性能和适用范围。具体而言,影响硬件选择的因素包括任务的序列长度、批处理大小(Batch Size),以及是否使用了MoE/GQA等优化技巧,它们相互作用可以在LLMRoofline中得到体现。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4597

    浏览量

    101763
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4424

    浏览量

    126724
  • LLM
    LLM
    +关注

    关注

    0

    文章

    202

    浏览量

    233

原文标题:如何为LLM推理任务选择正确的GPU

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    对比解码在LLM上的应用

    为了改进LLM推理能力,University of California联合Meta AI实验室提出将Contrastive Decoding应用于多种任务LLM方法。实验表明,所
    发表于 09-21 11:37 373次阅读
    对比解码在<b class='flag-5'>LLM</b>上的应用

    充分利用Arm NN进行GPU推理

    Tuner之前(上图)和启用OpenCL Tuner之后(下图)的流线型捕获。关注GPU使用率部分的非碎片队列活动(橙色曲线),突出显示的间隔显示GPU上ML推理过程的开始和结束。
    发表于 04-11 17:33

    如何判断推理何时由GPU或NPU在iMX8MPlus上运行?

    当我为 TFLite 模型运行基准测试时,有一个选项 --nnapi=true我如何知道 GPU 和 NPU 何时进行推理?谢谢
    发表于 03-20 06:10

    如何利用LLM做多模态任务

    大型语言模型LLM(Large Language Model)具有很强的通用知识理解以及较强的逻辑推理能力,但其只能处理文本数据。虽然已经发布的GPT4具备图片理解能力,但目前还未开放多模态输入接口并且不会透露任何模型上技术细节。因此,现阶段,如何利用
    的头像 发表于 05-11 17:09 682次阅读
    如何利用<b class='flag-5'>LLM</b>做多模态<b class='flag-5'>任务</b>?

    如何利用LLM做一些多模态任务

    本文整理了近两年来基于LLM做vision-lanuage任务的一些工作,并将其划分为4个类别:
    的头像 发表于 05-17 15:02 603次阅读
    如何利用<b class='flag-5'>LLM</b>做一些多模态<b class='flag-5'>任务</b>

    如何利用LLM做多模态任务

    大型语言模型LLM(Large Language Model)具有很强的通用知识理解以及较强的逻辑推理能力,但其只能处理文本数据。虽然已经发布的GPT4具备图片理解能力,但目前还未开放多模态输入接口
    的头像 发表于 05-22 15:57 520次阅读
    如何利用<b class='flag-5'>LLM</b>做多模态<b class='flag-5'>任务</b>?

    LLM在各种情感分析任务中的表现如何

      最近几年,GPT-3、PaLM和GPT-4等LLM刷爆了各种NLP任务,特别是在zero-shot和few-shot方面表现出它们强大的性能。因此,情感分析(SA)领域也必然少不了LLM的影子
    的头像 发表于 05-29 17:24 1530次阅读
    <b class='flag-5'>LLM</b>在各种情感分析<b class='flag-5'>任务</b>中的表现如何

    基准数据集(CORR2CAUSE)如何测试大语言模型(LLM)的纯因果推理能力

    )的纯因果推理能力。其中CORR2CAUSE对LLM来说是一项具有挑战性的任务,有助于指导未来关于提高LLM纯粹推理能力和可推广性的研究。
    的头像 发表于 06-20 15:39 1311次阅读
    基准数据集(CORR2CAUSE)如何测试大语言模型(<b class='flag-5'>LLM</b>)的纯因果<b class='flag-5'>推理</b>能力

    适用于各种NLP任务的开源LLM的finetune教程~

    ChatGLM2-6b是清华开源的小尺寸LLM,只需要一块普通的显卡(32G较稳妥)即可推理和微调,是目前社区非常活跃的一个开源LLM
    的头像 发表于 07-24 09:04 1431次阅读
    适用于各种NLP<b class='flag-5'>任务</b>的开源<b class='flag-5'>LLM</b>的finetune教程~

    人工智能中的处理器如何选择

    为长期运行的计算密集型 AI 训练和大规模 AI 推理选择合适的 CPU 或 GPU,本质上是要为您的应用选择适宜的计算解决方案。相比传统 x86 处理器成本高、能耗大,最新的 Amp
    的头像 发表于 09-05 10:58 711次阅读
    人工智能中的处理器如何<b class='flag-5'>选择</b>

    mlc-llm对大模型推理的流程及优化方案

    比如RWKV和给定的device信息一起编译为TVM中的runtime.Module(在linux上编译的产物就是.so文件)提供mlc-llm的c++推理接口调用 。
    发表于 09-26 12:25 448次阅读
    mlc-<b class='flag-5'>llm</b>对大模型<b class='flag-5'>推理</b>的流程及优化方案

    Hugging Face LLM部署大语言模型到亚马逊云科技Amazon SageMaker推理示例

     本篇文章主要介绍如何使用新的Hugging Face LLM推理容器将开源LLMs,比如BLOOM大型语言模型部署到亚马逊云科技Amazon SageMaker进行推理的示例。我们将部署12B
    的头像 发表于 11-01 17:48 467次阅读
    Hugging Face <b class='flag-5'>LLM</b>部署大语言模型到亚马逊云科技Amazon SageMaker<b class='flag-5'>推理</b>示例

    怎样使用Accelerate库在多GPU上进行LLM推理呢?

    大型语言模型(llm)已经彻底改变了自然语言处理领域。随着这些模型在规模和复杂性上的增长,推理的计算需求也显著增加。
    的头像 发表于 12-01 10:24 541次阅读
    怎样使用Accelerate库在多<b class='flag-5'>GPU</b>上进行<b class='flag-5'>LLM</b><b class='flag-5'>推理</b>呢?

    LLM推理加速新范式!推测解码(Speculative Decoding)最新综述

    这个问题随着LLM规模的增大愈发严重。并且,如下左图所示,目前LLM常用的自回归解码(autoregressive decoding)在每个解码步只能生成一个token。这导致GPU计算资源利用率
    的头像 发表于 01-29 15:54 418次阅读
    <b class='flag-5'>LLM</b><b class='flag-5'>推理</b>加速新范式!推测解码(Speculative Decoding)最新综述

    自然语言处理应用LLM推理优化综述

    当前,业界在将传统优化技术引入 LLM 推理的同时,同时也在探索从大模型自回归解码特点出发,通过调整推理过程和引入新的模型结构来进一步提升推理性能。
    发表于 04-10 11:48 81次阅读
    自然语言处理应用<b class='flag-5'>LLM</b><b class='flag-5'>推理</b>优化综述