找回密码
 加入我们
搜索
      
查看: 7165|回复: 16

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

[复制链接]
发表于 2023-1-20 17:37 | 显示全部楼层 |阅读模式
本帖最后由 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.nvidi ... .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
        会有类似如下显示
        ii  graphsurgeon-tf        8.5.2-1+cuda11.8        amd64        GraphSurgeon for TensorRT package
        ii  libnvinfer-bin                8.5.2-1+cuda11.8        amd64        TensorRT binaries
        ii  libnvinfer-dev                8.5.2-1+cuda11.8        amd64        TensorRT development libraries and headers
        ii  libnvinfer-plugin-dev        8.5.2-1+cuda11.8        amd64        TensorRT plugin libraries
        ii  libnvinfer-plugin8        8.5.2-1+cuda11.8        amd64        TensorRT plugin libraries
        ii  libnvinfer-samples        8.5.2-1+cuda11.8        all        TensorRT samples
        ii  libnvinfer8                8.5.2-1+cuda11.8        amd64        TensorRT runtime libraries
        ii  libnvonnxparsers-dev                8.5.2-1+cuda11.8        amd64        TensorRT ONNX libraries
        ii  libnvonnxparsers8        8.5.2-1+cuda11.8        amd64        TensorRT ONNX libraries
        ii  libnvparsers-dev        8.5.2-1+cuda11.8        amd64        TensorRT parsers libraries
        ii  libnvparsers8        8.5.2-1+cuda11.8        amd64        TensorRT parsers libraries
        ii  python3-libnvinfer        8.5.2-1+cuda11.8        amd64        Python 3 bindings for TensorRT
        ii  python3-libnvinfer-dev        8.5.2-1+cuda11.8        amd64        Python 3 development package for TensorRT
        ii  tensorrt                8.5.2.x-1+cuda11.8         amd64        Meta package of TensorRT
        ii  uff-converter-tf        8.5.2-1+cuda11.8        amd64        UFF converter for TensorRT package
        ii  onnx-graphsurgeon   8.5.2-1+cuda11.8  amd64 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报错,并不影响测试,只是会多出一堆字符。参考githubstackflow。输入以下命令解决
      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

发表于 2023-1-20 18:18 | 显示全部楼层
坐等跨机器的文章。
发表于 2023-1-20 18:41 | 显示全部楼层
本帖最后由 wangguan8602745 于 2023-1-20 18:43 编辑

感谢分享
ai方面应用性能完全没有媒体实测的
完全靠规格盲猜    媒体测试游戏及软件全部以厂家指导及个人倾向性为主
楼主发的网页只排行到2020年的显卡啊?
 楼主| 发表于 2023-1-20 18:47 | 显示全部楼层
wangguan8602745 发表于 2023-1-20 18:41
感谢分享
ai方面应用性能完全没有媒体实测的
完全靠规格盲猜    媒体测试游戏及软件全部以厂家指导及个人 ...

显然这网站的工作人员没钱买新卡被CHH用户吊打
发表于 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统治的时代尤为重要。

FmotZtFaMAAZzqu.png
发表于 2023-1-20 19:09 | 显示全部楼层
我輩樹である 发表于 2023-1-20 19:03
4090低精度性能比3090要强得多,这在现在llm统治的时代尤为重要。

请问deepfacelab的显卡排行有吗
提脸速度 跌代速度之类的
 楼主| 发表于 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勉强凑合。
发表于 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: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他的博客好几年,竟然最近更新了
发表于 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
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-4-22 22:08 , Processed in 0.013181 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表