T.JOHN 发表于 2023-1-20 17:37

[DL使用指南1] AI性能测试

本帖最后由 T.JOHN 于 2023-1-20 17:48 编辑

排版不完全正常,不过PC浏览器基本可读,觉得乱或者手机阅读的可以移步此处为可以正确渲染markdown的页面

此文为debian11环境下部署CUDA套件并且进行AI性能测试的指南,deep learning毕竟用于生产,使用自然有一些门槛。另windows下也一样能够部署,请自行搜索玩耍,使用linux一方面我对windows生产环境不熟,另一方面可获取更高性能。由于linux在安装/部署软件过程中不可避免会报很多错误,因此即便按照本文step by step操作也不可避免,因为时间久远我已经忘了我部署过程中出现过哪些错误。不过每个错误你把关键字段放google上搜索下都能找到答案,只是时间问题。一般是缺乏依赖,无非就是apt install xxx或者pip install xxx即可解决。如果找不到答案,也可以在回帖中问。
[*]更新系统内核
由于intel 12代及其以后cpu有大小核心,调度需要优化。同时AMD/Intel两家集显和以及网卡驱动也集成在内核linux内核中,更新到6.0+内核还是必要的。另外NV独显也依赖headers,这个是内核相关的必安装项。

[*]添加backports至source清单
printf "deb http://deb.debian.org/debian bullseye-backports main non-free\ndeb-src http://deb.debian.org/debian bullseye-backports main non-free" > /etc/apt/sources.list.d/backports.list
[*]更新内核后重启
apt update && apt install -t bullseye-backports linux-image-amd64 linux-headers-amd64
[*]安装C/C++编译器,减少后面报错次数(如果这里预安装了所有依赖就可以一次性无错通过,但很多依赖我已经不记得了)
apt install build-essential
[*]部署CUDA环境
NV的AI护城河强的主要原因在其CUDA套件为业界广泛应用,在此领域先到先得,开发人员底层离不开它。相当于微软的DX之于游戏界,区别只是巨硬不做硬件。

[*]安装CUDA套件
由于CUDA需要配合驱动使用,安装CUDA会强制更新GPU驱动为NV自己的闭源驱动,linux上的开源驱动会同时被卸载。参考NV官网手册的安装命令如下wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-debian11-12-0-local_12.0.0-525.60.13-1_amd64.debsudo dpkg -i cuda-repo-debian11-12-0-local_12.0.0-525.60.13-1_amd64.debsudo cp /var/cuda-repo-debian11-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/sudo add-apt-repository contribsudo apt-get updatesudo apt-get -y install cuda-11-8上述命令我修改最后一行为cuda-11-8,如果不修改会默认安装cuda12.0。截至2023年1月,NV还没有更新cuDNN去支持12.0
使用以下命令可查看已经安装的CUDA套件版本
cat /usr/local/cuda/version.txt
[*]安装cuDNN
cuDNN时GPU加速库,安装时需要指定自己的版本号和CUDA的版本号,否则可能不兼容。依旧参考NV官网手册的流程。在NV开发者页面注册成为NV开发者,再转到cuDNN页面点击下载,选择CUDA对应的cuDNN版本就行下载,debian11是一个deb文件。
注:如果你是ubuntu用户理论可以跳过这个注册步骤,使用在线包管理安装

[*]转到下载目录
cd /你的下载目录
[*]启用本地仓库
sudo dpkg -i cudnn-local-repo-${OS}-8.x.x.x_1.0-1_amd64.deb
[*]导入CUDA GPG密钥
[*]sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
[*]更新仓库元数据
sudo apt-get update
[*]安装Runtime库
sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y
[*]安装开发者库
sudo apt-get install libcudnn8-dev=8.x.x.x-1+cudaX.Y
[*]安装测试样例代码和cuDNN文档
sudo apt-get install libcudnn8-samples=8.x.x.x-1+cudaX.Y
注:X.Y和8.x.x.x分别是你的CUDA和cuDNN版本号。如果不知道版本号,可以用apt search libcudnn8和apt info libcudnn8去查看NV官方源现在可用版本
[*]验证是否安装成功

[*]假设前面下载的样品代码在
/usr/src/cudnn_samples_v8
[*]拷贝cuDNN样例代码至可写目录
cp -r /usr/src/cudnn_samples_v8/ $HOME
[*]进入目录
cd$HOME/cudnn_samples_v8/mnistCUDNN
[*]编译mnistCUDNN样例
make clean && make
[*]运行mnistCUDNN
./mnistCUDNN
[*]如果结果显示如下,则说明安装正确
Test passed!
[*]安装TensorRT
TensorRT属于NV开发的SDK,依赖cuDNN。根据NV的介绍 “更大限度减少显存占用,并高效地为张量重复利用内存”,因此用来优化性能的,包括延时,显存等等。安装参考NV官网手册,debian11可以使用ubuntu 22.04的安装包

[*]转到下载目录
cd /你的下载目录
[*]启用本地仓库
sudo dpkg -i nv-tensorrt-local-repo-${os}-${tag}_1.0-1_amd64.deb
[*]导入cuDNN GPG密钥
[*]cp /var/nv-tensorrt-local-repo-${os}-${tag}/*-keyring.gpg /usr/share/keyrings/
[*]更新仓库元数据
sudo apt-get update
[*]安装TensorRT
sudo apt-get install tensorrt
[*]若使用tensorflow
python3 -m pip install protobuf
sudo apt-get install uff-converter-tf
[*]验证是否安装成功
dpkg -l | grep TensorRT
会有类似如下显示
iigraphsurgeon-tf        8.5.2-1+cuda11.8        amd64        GraphSurgeon for TensorRT package
iilibnvinfer-bin                8.5.2-1+cuda11.8        amd64        TensorRT binaries
iilibnvinfer-dev                8.5.2-1+cuda11.8        amd64        TensorRT development libraries and headers
iilibnvinfer-plugin-dev        8.5.2-1+cuda11.8        amd64        TensorRT plugin libraries
iilibnvinfer-plugin8        8.5.2-1+cuda11.8        amd64        TensorRT plugin libraries
iilibnvinfer-samples        8.5.2-1+cuda11.8        all        TensorRT samples
iilibnvinfer8                8.5.2-1+cuda11.8        amd64        TensorRT runtime libraries
iilibnvonnxparsers-dev                8.5.2-1+cuda11.8        amd64        TensorRT ONNX libraries
iilibnvonnxparsers8        8.5.2-1+cuda11.8        amd64        TensorRT ONNX libraries
iilibnvparsers-dev        8.5.2-1+cuda11.8        amd64        TensorRT parsers libraries
iilibnvparsers8        8.5.2-1+cuda11.8        amd64        TensorRT parsers libraries
iipython3-libnvinfer        8.5.2-1+cuda11.8        amd64        Python 3 bindings for TensorRT
iipython3-libnvinfer-dev        8.5.2-1+cuda11.8        amd64        Python 3 development package for TensorRT
iitensorrt                8.5.2.x-1+cuda11.8         amd64        Meta package of TensorRT
iiuff-converter-tf        8.5.2-1+cuda11.8        amd64        UFF converter for TensorRT package
iionnx-graphsurgeon   8.5.2-1+cuda11.8amd64 ONNX GraphSurgeon for TensorRT package
[*]创建python虚拟环境进行测试
debian11默认自带python3.9,这里只需要创建虚拟环境后直接使用。由于linux的包管理即操作系统安装软件的管理程序依赖python,你把python折腾坏了,系统就容易被你搞挂。因此创建虚拟环境的原因是避免为了污染系统环境,类似于docker,一个简单的半隔离虚拟机,你怎么折腾都在你的一亩三分地中

[*]创建虚拟环境

[*]安装python venv依赖
apt install python3-venv
[*]在当前文件下创建py的虚拟环境
python3 -m venv py
[*]进入py文件夹并且启用虚拟环境,可以看到terminal用户名之前多了(py),以下所有操作都在虚拟环境中完成
cd py && source bin/activate #需要退出请输入deactivate
[*]安装tensorflow-gpu(测试版)
pip install tf-nightly-gpu
注:测试版本支持TensorRT 8.x,稳定版只支持7.x,会报错,因此安装测试版
[*]安装benchmark进行测试

[*]安装ai-benchmark脚本
pip install ai-benchmark
[*]进行测试
ai-benchmark
[*]问题修复

[*]已知问题1 在ai-benchmark运行时报错 Cannot register 2 metrics with the same name: /tensorflow/core/bfc_allocator_delay
应该是tensorflow版本问题,我之前老版本TF跑没这个错误,今天更新到最新版就出错了,但不影响使用
[*]已知问题2 在ai-benchmark运行时报错 successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero.
numa_node报错,并不影响测试,只是会多出一堆字符。参考github和stackflow。输入以下命令解决
for a in /sys/bus/pci/devices/*; do echo 0 | sudo tee -a $a/numa_node; done
[*]已知问题3 TensorRT组件中的python3-libnvinfer无法安装
由于源借用的ubuntu 22.04,debian11系统自带的python是3.9版本,需要3.10。可以通过单独下载tensorrt.whl文件安装,无伤大雅
[*]安装结束,即一旦生产环境部署完毕后,别瞎JB升级软件。比如CUDA,不是越新越好,而是越稳越好,一旦改变坏境中的一个软件,很有可能导致其他组件无法运行。2023年1月的最新环境为CUDA 11.8cuDNN 8.7.0.84 for CUDA 11.8TensorRT 8.5.2 for CUDA 11.8Tensorflow-gpu 2.12 nightly
[*]测试项目包括16个,图像识别,物体区分,分辨率超采样等等,具体参考ai-benchmark官网。跑分参考官网GPU排名,除了总分每个项目都有小分。我用240w的3070跑了下,得分如下
Device Inference Score: 16181
Device Training Score: 18804
Device AI Score: 34985
比2080ti略好,和v100差不多。测试过程中8G显存吃满,核心占用1x%~7x%波动。功耗几十瓦至两百瓦波动。几个子项会报显存不足,提示“不是不能跑,而是更多显存能提升性能”。因此深度学习显存自然是越大越好,而CUDA占用率是跑不到100%的。另外我试了TensorRT安装和未安装的情况,分数基本一样,可能多模型,多任务,多显卡的时候作用更加明显。

最后,4090的deep learning理论性能测试首发时就有了,比3090没强多少,也就1.4x的样子,和它3倍于3090的FP32算力不成正比,能耗比也就略微好些,两者显存大小也一样,如果有项目需求建议显然便宜带nvlink的3090更合适,毕竟价格便宜,显存更大。下一篇介绍如何基于CUDA套件畅玩具备数千年历史的3A大作GO,实现单机部署Katago 1.12.x超越alpha go

21mm 发表于 2023-1-20 18:18

坐等跨机器的文章。

wangguan8602745 发表于 2023-1-20 18:41

本帖最后由 wangguan8602745 于 2023-1-20 18:43 编辑

感谢分享
ai方面应用性能完全没有媒体实测的
完全靠规格盲猜    媒体测试游戏及软件全部以厂家指导及个人倾向性为主
楼主发的网页只排行到2020年的显卡啊?

T.JOHN 发表于 2023-1-20 18:47

wangguan8602745 发表于 2023-1-20 18:41
感谢分享
ai方面应用性能完全没有媒体实测的
完全靠规格盲猜    媒体测试游戏及软件全部以厂家指导及个人 ...

显然这网站的工作人员没钱买新卡[偷笑]被CHH用户吊打[狂笑]

YsHaNg 发表于 2023-1-20 18:59

我习惯部署docker hub里有nv自己的image 直接pull就好 不用管各种依赖 我还是用windows wsl的 驱动都不需要装 ms帮你link好c盘的文件了 你们要真想的话我可以把我的cuda dockerfile分享一下 基本就是比nv的多了点py git cmake host上docker装好就完事

我輩樹である 发表于 2023-1-20 19:03

本帖最后由 我輩樹である 于 2023-1-20 19:05 编辑

4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

wangguan8602745 发表于 2023-1-20 19:09

我輩樹である 发表于 2023-1-20 19:03
4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

请问deepfacelab的显卡排行有吗
提脸速度 跌代速度之类的

T.JOHN 发表于 2023-1-20 19:10

本帖最后由 T.JOHN 于 2023-1-20 19:12 编辑

我輩樹である 发表于 2023-1-20 19:03
4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

这低精度怎么那么叼[震惊]这货构架不是和安培一样么,3090的8同比16没提升,这货怎么提升那么大[流汗]

我輩樹である 发表于 2023-1-20 19:13

wangguan8602745 发表于 2023-1-20 19:09
请问deepfacelab的显卡排行有吗
提脸速度 跌代速度之类的

不了解。但应该差不多,前提是充分优化。

我輩樹である 发表于 2023-1-20 19:26

T.JOHN 发表于 2023-1-20 19:10
这低精度怎么那么叼这货构架不是和安培一样么,3090的8同比16没提升,这货怎么提升那么大...

改进都在tensor core上,而且30系不支持fp8,训练要靠这个,推理int8勉强凑合。

zhuifeng88 发表于 2023-1-20 19:29

T.JOHN 发表于 2023-1-20 19:10
这低精度怎么那么叼这货构架不是和安培一样么,3090的8同比16没提升,这货怎么提升那么大...

tensorcore换代了

目已 发表于 2023-1-20 19:29

我輩樹である 发表于 2023-1-20 19:03
4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

树导这是哪的数据啊?显卡统计的好全。

我輩樹である 发表于 2023-1-20 19:41

目已 发表于 2023-1-20 19:29
树导这是哪的数据啊?显卡统计的好全。

https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/

我輩樹である 发表于 2023-1-20 19:43

openai和runwayml它们太卷,大家直接来到8bit时代。。

目已 发表于 2023-1-20 19:47

我輩樹である 发表于 2023-1-20 19:41
https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/

谢谢,mark他的博客好几年,竟然最近更新了

chungexcy 发表于 2023-1-21 02:39

我輩樹である 发表于 2023-1-20 19:03
4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

不过相比20/30系起来,没有tensor的1080ti怎么这么快

用户 发表于 2023-1-21 03:25

搞Go的瓶颈貌似在CPU和IO,搞GPT的瓶颈是显存,搞图像的瓶颈是GPU和IO
页: [1]
查看完整版本: [DL使用指南1] AI性能测试