接上一篇:NVIDIA Tesla P4亲测:货真价实的高科技与狠活儿(1)
下面开始实验部分:
PART
01
DeviceQuery测试
DeviceQuery Test
PART
02
显存带宽测试
BandwidthTest
在虚拟机里实测显存读写143.8GB/s,跨PCIE为10.6GB/s,这个结果还可以。
PART
03
深度学习模型训练
环境介绍:
框架: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却可以。
PART
04
深度学习模型推理
我们直接采用yolov5s模型,trtexec 转onnx模型,得到的测试结果作为推理耗时:
FP32推理:
Yolo V5s Inference Performance -FP32
单帧推理约8ms,按40ms的时间检测,约能支持5路视频实时推理。
如果换成INT8,结果如下:
Yolo V5s Inference Performance -INT8
约4.1ms,差不多快了一倍,约能支持10路视频实时推理。
由于手头的其他显卡成绩都比这个性能强很多,不拿其他显卡做对比测试,而选用Jetson系列的产品作为对比测试:同模型Jetson Nano的推理时间为96ms左右,Jetson Xavier NX推理时间为15ms。这个推理成绩其实还不错。
PART
05
视频编码性能测试
使用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.66 bitrate=1875.6kbits/s speed= 24.1x
nvidia-smi dmon results for single video encoding
可以看到编码速度344fps,encoder芯片利用率约为50%,同时再跑一路:
frame= 8914 fps=238 q=19.0 size= 142848kB time=00:10:23.74 bitrate=1876.1kbits/s speed=16.6x
nvidia-smi dmon results for two videos encoding
功耗略微增加,视频编码硬核编码速度为332 238约570fps,编码硬核只有70%利用率,解码硬核已经100%了,将第二路的视频解码换成CPU继续测试。
ffmpeg -vsync 0 -i testencoder.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.72 bitrate=1874.9kbits/s speed=23.8x
frame= 9504 fps=266 q=19.0 size= 152320kB time=00:11:05.47 bitrate=1875.1kbits/s speed=18.7x
总共约339 266 = 605fps的编码速率,编码硬核利用率约90%,功耗约为30W。
nvidia-smi dmon 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.02 bitrate=1976.3kbits/s speed=29.9x
frame=10908 fps=322 q=19.0 size= 184064kB time=00:12:43.77 bitrate=1974.2kbits/s speed=22.5x
nvidia-smi dmon 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)。
PART
06
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 -i testencoder.mp4 -c:v h264_nvenc -preset fast -b_ref_mode 2 -t 180 output22.mp4
fps = 868
编码视频体积46.4MB
同参数下选用h.264编码:
ffmpeg -vsync 0 -i testencoder.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小时耗显存、供电,同时还耗核心,核心也都是一直满载的,当然机房的环境肯定是比矿场好很多的,所以也难说这种卡和矿卡谁先挂。