当前位置: 首页 > 科技观察

深度学习GPU选购指南:哪款显卡值得我炼金炉?

时间:2023-03-21 15:10:28 科技观察

众所周知,在处理深度学习和神经网络任务时,最好使用GPU而不是CPU,因为即使是相对低端的GPU在神经网络方面也会优于CPU。深度学习是一个需要大量计算的领域。某种程度上,GPU的选择将从根本上决定深度学习的体验。但是问题来了,如何选择合适的GPU也是一个让人头疼的问题。如何避免踩雷,如何做出性价比高的选择?TimDettmers,知名评测博主,先后获得Stanford、UCL、CMU、NYU、UW的PhDoffer,目前是DL领域推荐GPU的PhD。TimDettmers的研究方向是表示学习和硬件优化的深度学习。他创建的网站在深度学习和计算机硬件领域也很有名。本文TimDettmers推荐的GPU均来自N厂。他显然也认为AMD在机器学习方面名不副实。原始链接也发布在下面。原文链接:https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/#GPU_Deep_Learning_Performance_per_DollarRTX40和30系列优缺点对比NVIDIA图灵架构RTX20系列,新NVIDIAAmpereArchitectureRTX30系列具有更多优势,例如稀疏网络训练和推理。其他功能,例如新数据类型,应该更多地被视为易于使用的功能,因为它们提供与图灵架构相同的性能提升,但没有任何额外的编程要求。AdaRTX40系列还有更多的进步,比如上面介绍的张量存储加速器(TMA)和8位浮点运算(FP8)。与RTX30相比,RTX40系列具有类似的功耗和温度问题。通过正确连接电源线,可以轻松避免RTX40电源连接器电缆熔化的问题。Ampere中的稀疏网络训练允许以密集的速度使用细粒度结构自动稀疏矩阵乘法。这是怎么做到的?以一个权重矩阵为例,把它分成4个元素的块。现在想象这4个元素中的2个为零。图1显示了这种情况。图1:安培架构GPU中稀疏矩阵乘法函数支持的结构。当您将此稀疏权重矩阵与一些密集输入相乘时,Ampere的稀疏矩阵张量核心函数会自动将稀疏矩阵压缩为密集表示。大小是图2中所示的一半。压缩后,密集压缩的矩阵块被送入张量核心,计算矩阵乘法是通常大小的两倍。这有效地产生了2倍的加速,因为在共享内存矩阵乘法期间带宽要求减半。图2:稀疏矩阵在矩阵乘法之前被压缩为密集表示。我在研究中致力于稀疏网络训练,我还写了一篇关于稀疏训练的博文。对我的工作的一种批评是:“你减少了网络所需的FLOPS,但你没有产生速度增益,因为GPU不能进行快速稀疏矩阵乘法”。通过添加TensorCore的稀疏矩阵乘法功能,我的算法或其他稀疏训练算法现在实际上可以在训练期间提供高达2倍的加速。开发的稀疏训练算法分为三个阶段:(1)确定每一层的重要性。(2)去除最不重要的权重。(3)推广与每一层的重要性成比例的新权重。虽然此功能仍处于实验阶段并且训练稀疏网络尚不普遍,但在GPU上拥有它意味着您已为未来的稀疏训练做好准备。低精度计算在我的工作中,我之前已经证明新数据类型可以提高低精度反向传播过程中的稳定性。图4:低精度深度学习8位数据类型。深度学习训练受益于高度专业化的数据类型目前,如果要使用16位浮点数(FP16)进行稳定的反向传播,最大的问题是普通的FP16数据类型仅支持[-65,504,65,504]范围内的数字。如果你的梯度滑过这个范围,你的梯度将爆炸成NaN值。为了防止在FP16训练中发生这种情况,我们通常会进行损失缩放,即在反向传播之前将损失乘以一个小数,以防止这种梯度爆炸。BrainFloat16格式(BF16)使用更多位作为指数,因此可能的数字范围与FP32相同,BF16具有较低的精度,即有效数字,但梯度精度对于学习而言并不那么重要。所以BF16所做的是,你不需要再做任何损失缩放,你也不需要担心梯度会很快爆炸。因此,我们应该看到,通过使用BF16格式,由于精度略有损失,训练的稳定性得到了提高。这对你意味着什么。使用BF16精度,训练可能比使用FP16精度更稳定,同时提供相同的加速。使用TF32精度,您可以获得接近FP32的稳定性,同时提供接近FP16的速度改进。好处是要使用这些数据类型,您只需将FP32替换为TF32,将FP16替换为BF16——无需更改代码。但一般来说,这些新数据类型可以被视为惰性数据类型,因为您可以通过一些额外的编程工作(适当的损失缩放、初始化、规范化、使用Apex)获得旧数据类型的所有好处。因此,这些数据类型并没有提供速度,而是提高了训练中低精度的易用性。风扇设计和GPU温度虽然RTX30系列的新风扇设计在冷却GPU方面做得很好,但非原版GPU的不同风扇设计可能会带来更多问题。如果您的GPU升温超过80C,它会自行节流,从而降低其计算速度/功率。这个问题的解决方案是使用PCIe扩展器,它在GPU之间创造空间。使用PCIe扩展器分散GPU对冷却非常有效,威斯康星大学的其他博士生和我使用这种设置取得了巨大成功。它看起来不漂亮,但可以让您的GPU保持凉爽!下面的系统已经运行了4年,没有任何问题。如果您没有足够的空间来容纳PCIe插槽中的所有GPU,也可以使用它。图5:一个带有PCIE扩展口的4显卡系统,看似乱七八糟,但散热效率很高。功率限制问题的优雅解决方案可以在您的GPU上设置功率限制。因此,您将能够以编程方式将RTX3090的功率限制设置为300W,而不是其标准的350W。在4GPU系统中,这相当于节省200W,这可能刚好足以使4xRTX3090系统与1600WPSU一起使用。这也有助于保持GPU凉爽。因此,设置功率限制同时解决了4xRTX3080或4xRTX3090设置的两个主要问题,冷却和功率。对于4x设置,您仍然需要带有高效冷却风扇的GPU,但这可以解决电源问题。图6:降低功率限制具有轻微的冷却效果。将RTX2080Ti的功率限制降低50-60W,温度略有下降,风扇运行更安静您可能会问,“这不会减慢GPU的速度吗?”是的,确实如此,但问题是多少。我在不同的功率限制下对图5所示的4xRTX2080Ti系统进行了基准测试。我在推理期间对500个BERTLarge小批量的时间进行了基准测试(不包括softmax层)。选择BERT大推理,对GPU的压力最大。图7:在RTX2080Ti上,在给定功率限制下测得的速度下降我们可以看到,设置功率限制不会严重影响性能。将功率限制为50W,性能仅下降7%。关于RTX4090连接器起火问题存在误解。据信,RTX4090电源线起火是因为弯得太多。事实上,只有0.1%的用户有这个原因,主要问题是数据线没插好。因此,如果您遵循以下安装说明,使用RTX4090是完全安全的。1.如果您使用的是旧电缆或旧GPU,请确保触点没有碎屑/灰尘。2.取下电源连接器并将其插入插座,直到听到咔嗒声——这是最重要的部分。3.将电源线从左向右拧来测试是否合适。电缆不应移动。4、目视检查与插座的接触情况,排线与插座之间没有缝隙。H100和RTX40中的8位浮点支持支持8位浮点(FP8)是RTX40系列和H100GPU的巨大优势。使用8位输入,它可以让你以两倍的速度加载矩阵乘法的数据,你可以在缓存中存储两倍的矩阵元素,并且在Ada和Hopper架构中,缓存非常大,现在有了FP8和TensorCores,您可以获得RTX4090的0.66PFLOPS计算能力。这超过了2007年世界上最快的超级计算机的全部计算能力。RTX4090是FP8计算的4倍,可与2010年世界上最快的超级计算机相媲美。可以看出,最好的8位基线无法提供良好的零点性能。我开发的方法LLM.int8()执行Int8矩阵乘法,结果与16位基线相同。但是RTX30/A100/Ampere一代GPU已经支持Int8,为什么FP8是RTX40的又一次大升级?FP8数据类型比Int8数据类型稳定得多,并且易于在层规范或非线性函数中使用,而整数数据类型很难做到这一点。这将使它在训练和推理中的使用变得非常简单。我认为这将使FP8训练和推理在几个月内变得相对普遍。您可以在下面看到这篇关于Float与Integer数据类型的论文的相关主要结果。我们可以看到,一点一点地,FP4数据类型比Int4数据类型保留了更多信息,从而提高了4个任务的平均LLM零点精度。GPU深度学习性能排行榜首先,我们先来看一下GPU的原始性能排行榜,看看谁能发挥最好。我们可以看到H100GPU的8位性能与针对16位性能优化的旧卡之间存在巨大差距。上图显示了GPU的原始相对性能,例如,对于8位推理,RTX4090的性能优于H100SMX约0.33倍。也就是说,相比RTX4090,H100SMX的8位推理速度快了三倍。对于这个数据,他没有为旧GPU建模8位计算。因为8位推理和训练在Ada/HopperGPU上效率更高,而且TensorMemoryAccelerator(TMA)节省了很多在8位矩阵乘法中非常精确的寄存器。Ada/Hopper还支持FP8,这使得8位训练效率更高,在Hopper/Ada上,8位训练性能很可能是16位训练性能的3-4倍。对于较旧的GPU,较旧GPU的Int8推理性能接近16位推理性能。我可以用一美元购买多少计算能力?那么问题来了。我买不起性能强劲的GPU。。。对于那些预算不够的人,下一张图表是根据每个GPU的价格和性能。统计的每美元性能排名(PerformanceperDollar)反映了GPU的性价比。选择一个完成深度学习任务并且符合预算的GPU可以分为以下几个步骤:首先确定你需要多少显存(至少12GB用于图像生成,至少24GB用于处理Transformer);choose8-bitor16-bit(8-bitor16-bit),建议使用16-bit,8-bit在处理复杂的编码任务上还是会有困难;根据上图中的指标,找到相对性能/成本最高的GPU。我们可以看到RTX4070Ti是8位和16位推理性价比最高的,而RTX3080是16位训练性价比最高的。虽然这些GPU的性价比最高,但它们的内存也是一个短板,10GB和12GB内存可能不足以满足所有需求。但对于刚刚进入深度学习的新手来说,它可能是一个理想的GPU。其中一些GPU非常适合Kaggle竞赛,其中工作方法比模型大小更重要,因此许多较小的GPU非常适合。Kaggle号称是全球最大的数据科学家聚集平台,专家云集,对新人也非常友好。用于学术研究和服务器操作的最佳GPU似乎是A6000AdaGPU。同时,H100SXM的性价比也非常高,内存大,性能强劲。根据个人经验,如果我要为企业/学术实验室构建小型集群,我建议使用66-80%A6000GPU和20-33%H100SXMGPU。综合推荐说了这么多,终于到了GPU安利环节。TimDettmers专门制作了一张《GPU购买流程图》。如果预算充足,可以上更高的配置。如果预算不足,请参考性价比选择。首先要说明一点:无论选择哪种GPU,首先要确保其显存能够满足自己的需求。为此,您必须问自己几个问题:我要用GPU做什么?是用来参加Kaggle比赛,学习深度学习,做CV/NLP研究,还是玩小项目?如果您的预算紧张,请查看上面的基准测试并选择最适合您的GPU。您还可以通过在vast.ai或LambdaCloud中运行您的问题一段时间来估计所需的GPU内存,看看它是否满足您的需求。如果您只是偶尔需要一个GPU(每隔几天持续几个小时)并且不需要下载和处理大型数据集,那么vast.ai或LambdaCloud也可以很好地工作。但是,如果连续一个月每天都使用GPU,并且使用频率很高(每天12小时),云GPU通常不是一个好的选择。