GPU 篇一:当年王谢堂前燕,飞入寻常百姓家

2022-10-03 13:04:49 105点赞 290收藏 67评论

2016年9月13日,GTC China大会上,NVIDIA发布了Tesla P4 GPU。这是一块采用Pascal架构、2560个CUDA核心、8GB GDDR5显存、显存带宽192.0GB/S半高Data Center系列GPU。这款GPU为了深度学习推理而生,搭载了当时最先进特性的同时只有50/75W的功耗。当初售价高达一万多的P4 GPU,如今闲鱼售价只要500多,我们重新审视这款GPU,它的某些特性依然能为我们所用,包括时至今日在60W功耗下依然算强劲的性能,支持INT8,能够加速神经网络推理,较大的显存以及对编解码的较好支持。低功耗、小体型、编解码性能良好、可以跑常用模型(训练+应用)以及比GTX 1080更好的特性能否让它在现在深度学习的浪潮中,依然有一席之地?

简介

Tesla P4的GPU算力为6.1,核心代号为GP104,同GTX1080一样。具有4个GPC,20个SM单元,每个GPC有5个SM,每个SM有128个CUDA核心,共计2560个CUDA核心,提供5.5TFLOPS的单精度计算性能,,256KB寄存器,96KB的Shared Memory,总共48KB的L1缓存和8个纹理单元。GPU的整体架构图如下图所示:

Block Diagram of the GP104 GPUBlock Diagram of the GP104 GPU

SM的结构图如下图所示:

GP104 SM DiagramGP104 SM Diagram

从SM结构图我们可以看出,这代架构SharedMemory和L1 Cache是分开的。与Maxwell相同,GP104的L2 Cache依然是2048KB。

这代架构的Tuning Guide很短,在之前的CUDA阅读100天(DAY85:阅读 Compute Capability 6.x(gpuworld.cn))里已经有了详细介绍,如果有需要的同学可以自行翻阅CUDA 100天的内容,我们只在这里粗略介绍一下。

Pascal Tuning Guide一开始就说这代架构跟之前的架构比较相似,不需要改任何代码就可以看到明显的加速,然后说这代架构分两个版本,GP100和GP104,同时给出了P100的白皮书和GTX 1080的白皮书,而Tesla P4就是专业卡版本的GTX 1080,之所以说差不多,是说某些详细参数上有些差异,但是核心参数是一样的,比如GTX1080采用的是GDDR5X的显存,显存带宽也是320GB/S,核心频率也较高,当然功耗也高。

下面就说了一些SM里的资源情况,指出了GP100和GP104在资源上的不同,这里可以详细参考CUDA 100天的内容。在新的计算指令里提到,Pascal架构支持FP16和INT8,但是FP16速度上,GP100是2xFP32,跟Jetson Nano一样,GP104上是1/64,感觉用还不如不用。

INT8的小节中,NVIDIA这么描述” GP104 provides specialized instructions for two-way and four-wayinteger dot products. These are well suited for accelerating Deep Learninginference workloads.”意思是GP104上提供了dp4a和dp2a指令,但是没说GP100上也提供,这样看GP100不支持INT8(实际上也不支持,INT8是从算力6.1开始支持的)。在性能上” Both instructions offera throughput equal to that of FP32 arithmetic.”和FP32具有一样的吞吐率,但是这句之前有一句:” The __dp4a intrinsic computes a dot product of four 8-bit integerswith accumulation into a 32-bit integer.”这样就可以理解为是说前者一条的代价,和一条普通的FP32指令一样,但是前者是4组int8打包的,所以是400%的吞吐率,也即理论上提供22T的INT8性能。在下面TRT实验中,我们也可以看到提升了一倍的加速效果。

新的特性还有Atomic Memory Operations也即介绍原子操作的一些东西,共享内存以及共享内存带宽,以及新的统一内存,这些都在CUDA 100天上有详细介绍,这里不再累述。

以上都是关于这张卡计算部分的总结,下面我们来看看这张卡另一个重要特性,也即视频编解码,Tesla P4对当今(2022年)主流的编解码支持依然非常友好。我们根据NVIDIA Vedio Encode and Decode GPU Support Matrix表来看下T4 GPU的视频编解码能力。

P4 GPU视频编码支持如下:

Encode GPU Support MatrixEncode GPU Support Matrix

图中大红圈里的为P4GPU的编码支持,可以看出,P4 GPU属于数据中心系列,支持h.264标准 YUV420采样,444采样和Lossless、支持h.265标准 YUV420采样,444采样和Lossless,支持最大编码分辨率为8K,同时h.265支持10bit编码,但是不支持B Frame,不支持AV1编码。拥有两个编码硬核,注意小红圈里的Unrestricted,无限制,我们再看下GTX 1080的编码支持中这部分的描述:

GTX 1080’s EncoderGTX 1080’s Encoder

我同样用小红圈将其画出,GTX 1080只支持3路视频编码。注意这里的3,是只整机支持的数目,也就是说,你将机器中插入8张GTX 1080,依然只能支持3路视频编码,而P4是无限制的。2颗编码硬核的编码速度大约为1000fps,如果用来编码本地视频,3路和无限制其实区别并不大,3x333fps跟33x30fps对本地视频来说没有本质区别,都能最大化利用编码硬核性能。但是对实时视频就不一样了,对于直接读取摄像头视频,然后推理,编码保存这个过程来说,摄像头帧率一般为15~30帧,3路最多也只有90fps的编码性能,只利用了1/10不到,后面实验部分我们可以看到,视频编码有个基本功率,这个功率非常大,编码硬核利用率越低,这个代价就越大。而P4对编码路数没有限制,实验中我们可以看到随着编码路数的增加,显卡功耗并没有太大变化。

P4视频解码支持如下:

Decode GPU Support MatrixDecode GPU Support Matrix

可以看出解码应对当今主流视频标准依然没什么压力,支持h.264,h.265 8bit 10bit,支持VP8和VP9 8bit,不支持h.265 444采样,不支持AV1解码。不过考虑到目前h.265444采样依然没有推广开来,片源很少,AV1编码的视频同样片源很少,不管是下载的电影资源也好,还是摄像头的实时视频也好,基本都是420采样的h.264或者420采样的h.265,所以可以看出,视频解码部分依然支持良好。

由于解码部分性能消耗相对很小,这部分放不放到GPU里做其实区别不大,因此这部分我们不做深究,也不做实验测试。

下面继续介绍一些它的其他特性:

半高:半高显卡属于小众市场,但是确实有很多场景又需要半高显卡,各个显卡厂家也都退出了性能不错的半高显卡,比如半高GTX 1650,半高750等,甚至还有半高的3060专业版——A2000。半高显卡受众较小,价格一般相对比较昂贵,比如半高的GTX 1650这张卡只有FP16性能比P4好一点,其他方面性能均不如P4,闲鱼价格要700多,而各方面都很差的GTX750半高卡,也要200块左右,相对来说P4从价格上还是很划算的。

单槽:P4是一张单槽卡,A2000是双槽卡,由于我的nas机箱只支持半高单槽,所以没法用A2000。

被动散热:这张卡定位是Data Center系列,没有主动散热器,这是这张卡使用最麻烦的地方,我先手动锁定功耗到60W,然后用了一个8cm的风扇侧吹,跑训练测试的时候温度88度,功耗不稳定,但约45W左右,用yolov5s模型+coco128数据集,能基本不降频跑完300个epochs测试。虽然闲鱼上有人卖散热模块,其他地方也有魔改散热教程,但是折腾都需要付出一定的时间精力,这点需要考虑好。

没有外接供电口:无需外接供电,这点必须好评。

没有显示输出口:这个可能在一般的电脑上没有什么问题,有核显就用核显输出,没有核显可以再加块亮机卡就解决了,但是我这块主板为X99E/ITX,只有一个pciex16的插槽,X99支持的CPU天然没有核显,因此局面一度非常尴尬,我只能先接一张亮机卡,然后调整bios里的各种选项,确保系统无问题了,再将亮机卡换成P4,然后开机,不过还好很顺利,直接就进系统了。如果亮机卡无问题,换P4启动不了,甚至没法排查。不过没有显示输出接口,理论上又能省点电。

ECC内存支持:P4支持ECC校验,开启后会损失一部分显存,好评。

GPU Memory on enable ECCGPU Memory on enable ECC

开启过后,显存可用为7611MB,下图显示关闭ECC时显存:

GPU memory with ECC disabledGPU memory with ECC disabled

可用为8121MB,差了500MB。值得注意的是开启ECC关闭ECC这个操作是有寿命的,开关几千次就不能再继续开关了。

虚拟化支持:P4支持虚拟化,可以切分,但是我没用过虚拟化,贴一张官网的P4 FOR VIRTUALIZATION。

P4 FOR VIRTUALIZATIONP4 FOR VIRTUALIZATION

至此,P4的特性基本介绍完毕,下面开始测试部分。

测试

1. DeviceQuery测试

DeviceQueryTestDeviceQueryTest

2. 显存带宽测试

BandwidthTestBandwidthTest

在虚拟机里实测显存读写143.8GB/s,跨PCIE为10.6GB/s,这个结果还可以。

3. 深度学习模型训练

环境介绍:

框架:pytorch

模型:yolov5s

数据集:coco128

BatchSize:16

ImageSize:640

Epochs: 300

加8cm风扇侧吹,训练耗时0.7个小时,温度稳定88度,核心频率800~900MHz,基本稳定,可以看出散热压力还是大。

我手头没有性能相近的其他显卡,也没T4,但是有2080,同参数下,2080跑完训练耗时为0.155小时,但是此成绩不能代表T4成绩,因为T4也有功耗75W和被动散热的限制。不过我觉得0.7个小时其实还好。

同参数下,3080的耗时为0.11个小时,3090的耗时为0.1个小时。

未对其他模型进行进行测试,不过在其他卡上我有不同模型的详细测试数据,需要注意的是,模型训练过程中,会卡7611显存容量大小,比如将bs设置成32的话,或者模型yolov5l,imagesize设置成1024 都会吃掉7.9GB左右的容量,这个时候,开启ECC无法训练,但是关闭ECC却可以。

4. 深度学习模型推理

我们直接采用yolov5s模型,trtexec 转onnx模型,得到的测试结果作为推理耗时:

Yolo V5s InferencePerformance  -FP32Yolo V5s InferencePerformance -FP32

单帧推理约8ms,按40ms的时间检测,约能支持5路视频实时推理。

如果换成INT8,结果如下:

Yolo V5s InferencePerformance -INT8Yolo V5s InferencePerformance -INT8

约4.1ms,差不多快了一倍,约能支持10路视频实时推理。

由于手头的其他显卡成绩都比这个性能强很多,不拿其他显卡做对比测试,而选用Jetson系列的产品作为对比测试:同模型Jetson Nano的推理时间为96ms左右,Jetson Xavier NX推理时间为15ms。这个推理成绩其实还不错。

5. 视频编码性能测试

使用ffmpeg进行编码性能测试,编码参数:

ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i test.mp4 -c:v h264_nvenc -preset slow-profile main -qp 20 output.mp4

frame=14427 fps=344 q=19.0 size= 231168kB time=00:16:49.66bitrate=1875.6kbits/s speed= 24.1x

nvidia-smidmon results for single video encodingnvidia-smidmon results for single video encoding

可以看到编码速度344fps,encoder芯片利用率约为50%,同时再跑一路:

frame= 8914 fps=238 q=19.0 size= 142848kB time=00:10:23.74bitrate=1876.1kbits/s speed=16.6x

nvidia-smi dmon results for two videos encodingnvidia-smi dmon results for two videos encoding

功耗略微增加,视频编码硬核编码速度为332+238约570fps,编码硬核只有70%利用率,解码硬核已经100%了,将第二路的视频解码换成CPU继续测试。

ffmpeg -vsync 0 -itestencoder.mp4 -c:v h264_nvenc -preset slow -profile main -qp 20 output22.mp4

frame=10883 fps=339 q=19.0 size= 174336kB time=00:12:41.72bitrate=1874.9kbits/s speed=23.8x

frame= 9504 fps=266 q=19.0 size= 152320kB time=00:11:05.47 bitrate=1875.1kbits/sspeed=18.7x

总共约339 + 266 =605fps的编码速率,编码硬核利用率约90%,功耗约为30W。

nvidia-smidmon results for two videos encoding with CPU decodingnvidia-smidmon results for two videos encoding with CPU decoding

ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i testencoder.mp4 -c:v h264_nvenc-preset faster -profile main -qp 20 output.mp4

frame= 8932 fps=427 q=19.0 size= 150784kB time=00:10:25.02bitrate=1976.3kbits/s speed=29.9x

frame=10908 fps=322 q=19.0 size= 184064kB time=00:12:43.77bitrate=1974.2kbits/s speed=22.5x

nvidia-smidmon results for two videos encoding with CPU decodingnvidia-smidmon results for two videos encoding with CPU decoding

改用preset fast 可以达到427 + 322 = 749fps的速度,利用率依然不到100%,功耗总共30W。

还可以改变参数继续测试,但是我认为已经没什么必要了,可以看出编码速度非常非常快,甚至解码速度都赶不上编码速度(只有一个解码硬核,而有两个编码硬核)。不过我们需要注意的是,这时的功耗,单路视频编解码时,功耗为28W,我个人认为这个是启动功耗,也即基础开销,这28W是显存、GPU核心等单元共同使用的,再增加一路视频编码,功耗为30W,说明增加的那一路视频编码功耗只高了2W,这样两颗编码硬核功耗就约为4W,能提供约800fps的编码速度,这个能效比还是很好的,同时需要注意,编码时sm一样有利用率,说明利用GPU编解码视频时,执行推理时就无法利用全部的CUDA Core理论性能。开nvidia-cuda-mps-control -d后,能普通CUDA计算,和转码几乎同时压满(需要一点点小技巧,CUDA计算创建流的时候用cudaStreamCreateWithPriority(),选低优先级计算即可(传输参数0)。

6. B帧对HEVC编码成品体积影响

最后我们来简单测试下B帧对HEVC编码体积的影响,由于P4不支持HEVC B Frame,因此这个测试是在3090上做的,做这个测试的目的是为了探讨不支持HEVC B Frame是否非常影响最终编码体积。

测试环境为监控摄像头,其他参数一致的情况下,我们记录180秒监控视频,来对比两者体积变化。视频动态非常小,几乎为静止画面。

关闭B帧:

ffmpeg -vsync 0 -i testencoder.mp4 -c:v hevc_nvenc-preset fast -b_ref_mode 0-t 180 output33.mp4fps = 826

编码视频体积 46.4MB

指定b_ref_mode为2:

ffmpeg -vsync 0 -itestencoder.mp4 -c:v h264_nvenc -preset fast -b_ref_mode 2 -t 180 output22.mp4

fps = 868

编码视频 体积46.4MB

同参数下选用h.264编码:

ffmpeg -vsync 0 -itestencoder.mp4 -c:v h264_nvenc -preset fast -t 180 output33.mp4

fps = 816

编码视频体积 45.5MB

可以看出,这个B Frame的支持,对成品体积控制而言,几乎没什么效果。但是根据另一位工程师反映,同样的参数,使用B帧能在30系上能小10-20%体积。我懒得继续调参测试,就没继续测。

总结

这张卡目前价格为500元左右,甚至批量买500张,可以低到300/张,性能测试下来,其实也不错,一些特性直至今天用依然非常够用,包括性能。尤其是考虑到半高单槽,这个价格应该没有性价比更高的,包括A卡在内。问题也有两点,一是散热很不好做,容易碰到过热降频;二是没有显示输出,显卡3060矿卡价格大概是800元左右了,性能要比这个好很多,除非是限制了只能半高单槽。3060是有显示输出的,不需要再外接亮机卡。可能也有人担心3060是矿卡,寿命应该不长,但是挖矿消耗的是显存、供电等周边设备,这种数据中心的卡,不仅7x24小时耗显存、供电,同时还耗核心,核心也都是一直满载的,当然机房的环境肯定是比矿场好很多的,所以也难说这种卡和矿卡谁先挂。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

NVIDIA 英伟达 GeForce RTX 4060Ti 公版 显卡

NVIDIA 英伟达 GeForce RTX 4060Ti 公版 显卡

3199元起

NVIDIA 英伟达 GeForce RTX 4070 SUPER Founder Edition 显卡 12GB

NVIDIA 英伟达 GeForce RTX 4070 SUPER Founder Edition 显卡 12GB

暂无报价

NVIDIA 英伟达 GeForce RTX 4080 SUPER 16GB 公版 显卡

NVIDIA 英伟达 GeForce RTX 4080 SUPER 16GB 公版 显卡

8998元起

NVIDIA 英伟达 GeForce RTX 4090 公版显卡 24GB

NVIDIA 英伟达 GeForce RTX 4090 公版显卡 24GB

17959元起

NVIDIA 英伟达 GeForce RTX 4070 Founder Edition公版显卡 全新架构 DLSS 3技术

NVIDIA 英伟达 GeForce RTX 4070 Founder Edition公版显卡 全新架构 DLSS 3技术

5379元起

NVIDIA 英伟达 GeForce RTX 4080 16G 公版 显卡

NVIDIA 英伟达 GeForce RTX 4080 16G 公版 显卡

9259元起

NVIDIA 英伟达 芯联能 GeForce RTX4060 双风扇万丽 8G独立显卡

NVIDIA 英伟达 芯联能 GeForce RTX4060 双风扇万丽 8G独立显卡

暂无报价

NVIDIA 英伟达 T1000 8GB GDDR6 专业显卡 工业包装

NVIDIA 英伟达 T1000 8GB GDDR6 专业显卡 工业包装

2799元起

NVIDIA 英伟达 Tesla系列 GPU深度计算加速显卡 Tesla P4 8G

NVIDIA 英伟达 Tesla系列 GPU深度计算加速显卡 Tesla P4 8G

暂无报价

NVIDIA 英伟达 T400 4GB GDDR6 专业显卡 工业包装

NVIDIA 英伟达 T400 4GB GDDR6 专业显卡 工业包装

1099元起

NVIDIA 英伟达 Quadro P1000 显卡 4GB

NVIDIA 英伟达 Quadro P1000 显卡 4GB

1558.95元起

英伟达(NVIDIA)T1000 4GB GDDR6 专业显卡 工业包装

英伟达(NVIDIA)T1000 4GB GDDR6 专业显卡 工业包装

2299元起

英伟达(NVIDIA)A800 80G 专业运算卡

英伟达(NVIDIA)A800 80G 专业运算卡

暂无报价

NVIDIA 英伟达 GeForce GTX 1060 显卡

NVIDIA 英伟达 GeForce GTX 1060 显卡

暂无报价

NVIDIA Tesla 显卡 H800 80G 计算加速 GPU推理训练高性能显卡 Tesla H800 80G(售价联系客服)

NVIDIA Tesla 显卡 H800 80G 计算加速 GPU推理训练高性能显卡 Tesla H800 80G(售价联系客服)

暂无报价

NVIDIA 英伟达 TITAN Xp 12G 显卡

NVIDIA 英伟达 TITAN Xp 12G 显卡

暂无报价
67评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章

The_Galaxy_Rabbit

喵!喵!喵!

关注 打赏
最新文章 热门文章
290
扫一下,分享更方便,购买更轻松