10多年前上大学的时候就有在学CUDA,那时候cuda进入中国也不久,那个时候有个可以cuda计算的显卡就和现在搞个小汽车一样奢侈,那时候在学超算、异构计算的时候正好同宿舍的洪同学的媳妇在一个大专学习游戏设计,其主要工作就是拿NVIDIA的Quadro系统显卡做图形渲染,那时候就对NVIDIA公司推出的Titan科学计算卡、Geforce游戏卡、图形渲染卡Quadro,这三个类别分不出区别,不知不觉的搞这行这么多年,突然又想到了这么一个话题,于是在这里好好的总结一下。
最近几年由于神经网络的AI大火,于是就出现了一个新的概念,叫做“训练卡”和“推理卡”,这个问题在百度上搜索可以出现很多的相关URL:
要知道,科学计算卡(训练卡、推理卡)、游戏卡、图形渲染卡,这几类显卡其芯片的差别其实不大,而且很多时候其实都是使用的同一款显卡芯片,其实这个显卡的分类有些像我们办的手机套餐业务一样,举个例子:
A套餐,每个月免10G流量,但是打电话时2毛钱一分钟,月租15元;
B套餐,每个月免1G流量,打电话1毛钱一分钟,月租18元;
C套餐,每个月没有免费流量,打电话也是1毛钱一分钟,月租10元;
D套餐,每个月没有免费流量,打电话也是1毛钱一分钟,月租20元,但是每个月可以办理30元的10G流量;
如果一个人,平时对上网流量和打电话都有一定需求,那么选择A套餐比较合适;
如果一个人平时没有多少上网需求,但是偶尔需要扫码付款啥的,主要是打电话比较多,那么适合选择B套餐;
如果一个人完全没有上网流量需求,主要是打电话,那就适合选择C套餐;
如果一个人对上网需求比较大,同时打电话的需求也比较大,那么就适合选择D套餐,虽然月租贵些,但是可以通过额外购买流量包获得大流量上网,同时打电话的资费也是最低的。
从上面的这个电话套餐的例子可以看到,这个显卡型号和手机套餐很像的,可以说是为适合不同场景来量身限定的,但是也可以看做是一种销售手段,毕竟厂家是不会提供一个型号可以适用所有场景的型号的,下面具体说下不同型号显卡之间的差别点。
前提知识:
显卡的性能区别可以大致有几点:
显存带宽;
显存容量;
显卡计算核心数量;
显卡计算核心频率;
显卡高精度计算能力(float64);
显卡低精度计算能力(float32/float16/int8);
显卡的多卡互联能力;
科学计算卡:
训练显卡:
不同于手机套餐,训练显卡在所有指标上都是最优的,唯一的不足估计就是耗电和散热的噪音了。训练显卡其实还可以分作科学Science计算显卡和神经网络计算显卡两种,这里要注意,在NVIDIA公司是不区分科学计算显卡和神经网络显卡的,而在一些最近几年参加显卡研发的公司如寒武纪、华为等等公司,是只有神经网络显卡的,而没有Science显卡的,而Science显卡和neuron显卡的区别只有一点,那就是计算精度和应用问题场景。Science显卡,顾名思义,其应用问题是Science问题,如流体力学仿真、空气动力学仿真、核聚变仿真、天气预报、地震预报等等Science问题,这种类型的问题可以看做是解一组复杂的方程组,其计算精度往往要求float64,即双精度浮点数;而neuron显卡,顾名思义,适用问题就是神经网络,其显卡各项指标均和science显卡一致,唯一不同的是一般不支持float64,最高精度一般支持float32,这个原因主要是因为神经网络计算用不到float64的精度。
可以说科学计算卡(Science卡和neuron卡)各方面能力均是最强的,尤其是其支持多卡互联和分布式互相,这个可以参考NVIDIA的RDMA、NVLINK技术,据说NVIDIA公司已经实现256张显卡互联到一台主机上了。
推理显卡:
显卡显存带宽要求高;显卡显存要求一般;显卡计算核心数量一般;显卡计算核心频率要求高;显卡一般不要求有高精度计算能力;基本不要求具备多卡互联能力。
重点在于计算的吞吐能力,由于推理显卡是一个新概念,这个推理只适用于神经网络问题,因此推理显卡往往不要求有太高的精度(基本不支持float64,只有NVIDIA公司的卡还会一定程度上支持,但是支持较差),甚至可以加强其低精度计算的能力,如:float16、int8、float32。同时,由于神经网络的特性,一个1万台服务器运行的Chat-gpt,其推理时的显存占用可以控制在24G之内,也就是在一个普通显卡的显存大小内,因此推理卡往往不需要太大的显存,但是考虑到其吞吐量,因此其显存带宽依旧是有要求的。同时由于推理显卡一卡就够用,因此也不需要多卡互联,因此推理卡也不支持多卡互联。
游戏卡
以NVIDIA和AMD为代表,单卡的float32计算能力和顶级的科学计算卡基本一致或相近,但是不支持多卡互联(一般没有nvlink硬件接口),没有或不太支持float64精度,显存大小一般(一般10G以内,标准的为6G、8G),显存带宽一般只有科学卡的65%的能力,核心数量和核心频率也和科学卡基本一致。可以说,在单卡的非高精度场景下(float32),只要显存够用,游戏卡和科学卡的性能基本相当、相近,甚至一直,同时由于游戏卡一般提供超频,所以游戏卡设置可以在某些单卡任务上性能超过科学卡。但是,游戏卡不支持float64,因此无法进行Science计算,虽然不影响neuron问题的计算,但是由于带宽的限制和没有多卡互联的硬件接口,因此游戏卡在多卡场景(包括分布式等大规模场景下)和科学卡有着明显的距离(这也是为啥中美贸易战美国限制出口中国的显卡的显存带宽和多卡互联能力了)。但是,在大多数的neuron的神经网络问题上,单卡就足够,尤其是高校和科研院所,同时游戏卡一般只有科学卡的30%的售价,因此很多高校和科研所会大比例的购买游戏卡作为神经网络的计算卡,而不使用科学卡,这也是为啥RTX3090和RTX4090被热捧。不过要注意,由于美国政府加大制裁,已经开始限制RTX4090的出口了,而是对显存带宽和显卡核心数再进行限制,以防止国内科研院所通过游戏卡获得AI计算能力。
图形渲染卡
在各项性能参数上和游戏卡基本一致,不过最明显的特点是显存比较大,在神经网络的AI大火之前,很多Quadro卡的显存就有48G,而那时候的游戏卡Geforce一般就6G,可以说显存大小才是这两个卡的主要区别。由于渲染卡主要是做图形绘制的,对核心数的要求以往会比游戏卡高,但是游戏卡的核心频率往往会比渲染卡高。不论是渲染卡还是游戏卡,一般都是不支持高精度(float64)的,同时显卡带宽也不高,而且同样不支持多卡互联。虽然在单卡非Science问题下,游戏卡和科学卡性能基本一致,但是单从性能指标一致的数量上来看,游戏卡和渲染卡更为贴近。
要注意,虽然游戏卡以前的显存都比较小,但是由于3A大作的出现,同时AI大火,很多人使用游戏卡替代科学卡,所以游戏卡现在的显存大小也不小,比如rtx3090也都有24G了。
简单的来说,游戏卡频率高,显存小,而渲染卡频率低,显存大,而之所以有这个区别主要是因为应用场景不同,游戏卡的应用都是流式场景(现在的AI问题除外),处理的画面数据是要不断刷新的,并不需要在显存中驻留太大的空间,而渲染卡往往是处理静态的数据,比如图片渲染,所以往往对显存要求比较大;同时由于游戏卡希望画面的流畅度,因此频率会更高些,甚至很多显卡集成商会给出适配板载显卡手动超频的能力的,而渲染卡对频率要求不如游戏卡,但是核心数会更高些。说白些,游戏卡处理的数据是实时刷新的,渲染卡处理的数据是静态不懂的,一个是动态的游戏画面计算,一个是静态的图形数据计算。