|
在人工智能的快速成长中,GPU(图形措置器)已经成为了模型推理的主要驱动力。在许多深度学习场景中,GPU不仅可以大幅提升推理速度,还可以显著降低功耗。然而,选择适合的GPU并不总是那么容易,因为分歧的推理场景可能需要分歧的GPU配置。本文将深入探讨GPU的硬件架构,以及分歧推理场景对GPU的分歧需求,以辅佐读者更好地舆解这一范围。
一、如何读懂GPU的硬件参数
1.1 GPU的基本布局
图1 SM的硬件布局
相信大部门人都知道GPU超强的并行计算能力要归功于它成千上万的CUDA Core. 然而GPU中并不仅是Cuda Core, 还有RT Core、Tensor Core、SFU等计算单元、寄存器、L1/L2 Cache、全局内存等存储单元,以及warp调剂、指令分发等控制单元。要理解GPU,需要先了解GPU的核心组件-SM(Streaming Multiprocessor)。
SM和CUDA Core是紧密相关的,它们都是GPU中的重要组件。SM是NVIDIA在推出全新的Fermi架构时引入的一个概念,它实际上是GPU的基本运算区块。而CUDA Core则是SM中的核心,负责执行GPU的算术运算。我们从SM中各组件的功能角度可以将SM划分为三块:
- 计算单元,SM中包含整型(int32)计算单元,浮点(FP32)计算单元, 特殊函数(比如正余弦函数)计算单元(SFU),此外还有Volta架构开始引入的RT Core(图形学范围常用的光线追踪)和Tensor Core(专注于矩阵运算),我们凡是所说的CUDA Core指的是SM中的FP32计算单元,凡是所说的GPU的峰值算力也是以FP32计算单元的算力来统计的。
- 存储单元,SM中包含寄存器、L0 指令cache, L1 Cache和SharedMemory等存储单元,注意L2 Cache和DRAM(全局内存)这些都不在SM内部,见图2。
- 调剂/控制单元,Warp调剂单元和指令分发单元。一个warp是32个线程,一个SM上可以同时调剂多个warp,warp的切换是通过warp调剂单元来控制。
图2 GPU的内存布局
Memory类型 | 描述(以A100为例) | L1 Cache | 带宽:19TB/s
空间:192KB*108=20MB(每个SM 192KB) | L2 Cache | 带宽:4 TB/s(估算)
空间:40MB | DRAM | 带宽:1.5TB/s
空间:40/80 GB | 需要注意的是,分歧的GPU架构可能会有分歧的SM和CUDA Core的组织方式,以及各种存储单元的尺寸也会有明显分歧。因此,在具体的应用中,需要按照具体的GPU架构来理解SM和CUDA Core的关系。
1.2 理解GPU核心参数
A10 datasheet
当我们想了解一款GPU时,都是会去查询该GPU的datasheet,上图是A10的datasheet,里面列举了该款GPU的核心指标参数。这些参数该如何理解呢,在我们了解了GPU的基础架构后,对这些参数的理解也可以分成三个方面:
- 算力层面, 主要存眷两部门,其一是FP32算力,这部门是由cuda core提供,其二是tensor core提供的算力,不外tensor core只能措置FP16、int8/4、bf16、bf8、TF32等精度。在一些处所可能会看到针对fp16会提供两种算力,一种是基于cuda core的算力,一种是基于tensor core的算力。凡是tensor core提供的峰值算力是cuda core算力的8倍以上,表2中列举了常见的几种GPU的算力。所以如果你的模型推理时需要FP32精度,那么你只需要考虑GPU的FP32算力即可。
- 存储层面。凡是在应用这个层次考虑,我们将不再考虑其寄存器大小了,我们会更加存眷L1 cache/shared memory尺寸以及全局内存(DRAM,也就是常说的显存)尺寸、显存越大,可容纳的模型尺寸就越大。此外还会存眷全局内存的带宽。像LLM推理场景中的flashattention方案有效的前提LLM的推理是memory-bound的,而A系列卡的shared memory有128KB/192KB每SM, 同时shared memory的带宽是DRAM带宽的10倍以上,flashattention充实操作shared memory以减少对DRAM的访存次数进而达到提升吞吐的效果。
- 其他,比如功耗(常会在统计推理成本时使用)、连接方式(PCI/SMX)、encoder/decoder(gpu上独立的编解码芯片,在视觉推理场景常用)。
表2 常见GPU的cuda core和tensor core 算力对比
二、如何判断哪种GPU更适合本身的法式
2.1 显存大小的选择
在选型GPU时最先要考虑的就是显存的大小,模型推理场景需要消耗显存的主要有两个处所:
模型参数的尺寸凡是是固定的,不会在推理阶段呈现变化。但中间值、激活值这些需要占用的尺寸可能会在推理过程中动态变化,最常见的场景是很多时候需要通过增加batch size来提升推理的吞吐量,而中间值、激活值这些占用的显存大小与batch size是成正比的,尽管大部门场景模型尺寸对比于激活值要大很多,但总有例外。比如在LLM的推理场景,130B的模型,如果要输出2k或者4k长度的上下文,凡是需要的kv-cache尺寸多大几十GB,batch size每增加1,kv-cache消耗就要增几十GB, 在这种场景下这些中间值的消耗经常会比模型参数更多。这里简单列出了主流GPU的显存大小。
表三:主流GPU显存大小
2.2 gpu 型号的选择
我们总但愿选择最高性价比的GPU,但如何才能做到呢。这就需要我们既要了解GPU的算力(可以参考:模型推理的主流GPU硬件参数整理(不按期更新) - 知乎 (zhihu.com))又要了解本身的法式。上文中提到GPU的算力单元可以分两部门:cuda core和tensor core,cuda core只能提供FP32和FP16算力,tensor core可以提供FP16\INT8\INT4等算力,而且tensor core的峰值算力要大出一个数量级。但是这里需要知道tensor core是从Volta架构以后才撑持,如果要使用之前的kelper或者pascal系列的显卡,是不撑持tensor core的。如果我们的模型必需要使用FP32算力,那么我们就找一款FP32峰值算力较高的机器即可,如果要使用FP16或者int8,这时就可以考虑使用具备tensor core的GPU。
三、总结与展望
在选择模型推理的GPU时,我们需要考虑多个因素,包罗模型大小、运算复杂度、显存需求等等。通过对比分歧GPU的性能指标和性价比,我们可以得出一个合适的选型方案,以满足模型推理的需求。
在未来的博文中,我们将会探讨更多关于模型推理GPU选型的细节和技巧,以及更具体的GPU型号和配置对比。但愿您能够存眷我们的博文,并与我们共同探讨相关问题。
谢谢您的阅读和撑持! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|