目录
前言
华硕推出了RTX3070的天选系列,好不容易抢了台ASUS 天选air,就想试试RTX3070的AI性能怎么样,这货有5120个CUDA核心,8GB GDDR6显存,应该比较牛吧!
YOLOv5最近也比较火,就拿它来试试。正好整理一下相关的软件,附上链接。
1. 选取合适的软件及版本
YOLOv5 需要安装PyTorch,登录PyTorch的网站,找到最新的稳定版本为1.7.1,目前为止,支持的最高的CUDA版本为11.0。
我安装在windows系统,采用Conda安装,选择Python 3.8,RTX3070是Ampere构架,支持的最低的CUDA版本为11.0(大家可以关注一下,随着厂家的后续更新,可以选择支持的最新版本)。
注意:我开始选择的是CUDA Toolkit 11.0 Update1 (Aug 2020),发现不能正确识别RTX3070。
后来重新安装CUDA Toolkit 11.2,就可以正确识别RTX3070了,看来CUDA的小版本对PyTorch的影响不是太大,不是必须安装CUDA 11.0版本。
选择对应的cuDNN 8.1.0,CUDA Driver Version应该是最低要求,我安装了最新的 r461。
仔细研究发现,RTX3070的计算能力是8.6,11.0的CUDA里面没有RTX30xx的信息,11.2的CUDA里面有RTX30xx的信息:{0x86,"Ampere"}。
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.2\common\inc\helper_cuda.h
CUDA需要有一个Compiler,VS2017/VS2019都支持。我选的是Visual Studio Community 2017 社区版(免费版),
Note: There's a compilation issue in several Visual Studio 2019 versions since 16.7.1, so please make sure your Visual Studio 2019 version is not in 16.7.1 ~ 16.7.5
2. 安装VS2017
下载并安装Visual Studio Community 2017 社区版(免费版), 只选择 “使用C++的桌面开发” 就可以了。
3. 安装CUDA
下载并安装CUDA Toolkit 11.2,这一步没有太多需要说明的。
如果你使用老一点的Nvidia显卡,你也可以试试CUDA Toolkit 11.0 Update1 和 CUDA Toolkit 11.0 Downloads(注意:这两个版本不能识别RTX3060~RTX3090这些显卡) 。
下载并安装cuDNN8.1.0, 这个需要一个开发者账号,并做一些调查问卷。将下载的文件解压到CUDA的相应目录里就可以了。
更新RTX3070显卡的驱动程序,目前最新的版本是:461.40-notebook-win10-64bit-international-nsd-dch-whql.exe。
编译CUDA带的例子,看看能不能识别显卡:
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.2\bin\win64\Release>deviceQuery.exe
deviceQuery.exe Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce RTX 3070 Laptop GPU"
CUDA Driver Version / Runtime Version 11.2 / 11.2
CUDA Capability Major/Minor version number: 8.6
Total amount of global memory: 8192 MBytes (8589934592 bytes)
(40) Multiprocessors, (128) CUDA Cores/MP: 5120 CUDA Cores
GPU Max Clock rate: 1290 MHz (1.29 GHz)
Memory Clock rate: 6001 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 4194304 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total shared memory per multiprocessor: 102400 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 1536
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 5 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
CUDA Device Driver Mode (TCC or WDDM): WDDM (Windows Display Driver Model)
Device supports Unified Addressing (UVA): Yes
Device supports Managed Memory: Yes
Device supports Compute Preemption: Yes
Supports Cooperative Kernel Launch: Yes
Supports MultiDevice Co-op Kernel Launch: No
Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.2, CUDA Runtime Version = 11.2, NumDevs = 1
Result = PASS
4. 安装设置 Anaconda
选择适合Windows和Python 3.8的版本:64-Bit Graphical Installer (457 MB),按照提示安装即可。
设置conda的清华源,在cmd的命令行里运行:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
5. 安装PyTorch
打开Anaconda Prompt的命令行,创建yolov5,输入:
conda create -n yolov5 python=3.8
conda activate yolov5
安装pytorch及相应的软件包:
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch
6. 安装YOLOv5
获取YOLOv5的项目文件:
git clone https://github.com/ultralytics/yolov5.git
安装YOLOv5的依赖软件(使用清华源):
pip install -U -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
7. 测试YOLOv5
获取YOLOv5的weights文件:yolov5s.pt 和 yolov5m.pt,运行:
(yolov5) C:\yolo\yolov5>python detect.py --source data/images --weights weights/yolov5s.pt --conf 0.25
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', project='runs/detect', save_conf=False, save_txt=False, source='data/images', update=False, view_img=False, weights=['weights/yolov5s.pt'])
YOLOv5 torch 1.7.1 CUDA:0 (GeForce RTX 3070 Laptop GPU, 8192.0MB)
Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients, 17.0 GFLOPS
image 1/3 C:\yolo\yolov5\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.016s)
image 2/3 C:\yolo\yolov5\data\images\gj.jpg: 480x640 Done. (0.016s)
image 3/3 C:\yolo\yolov5\data\images\zidane.jpg: 384x640 2 persons, 1 tie, Done. (0.016s)
Results saved to runs\detect\exp49
Done. (0.239s)
(yolov5) C:\yolo\yolov5>python detect.py --source data/images --weights weights/yolov5m.pt --conf 0.25
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', project='runs/detect', save_conf=False, save_txt=False, source='data/images', update=False, view_img=False, weights=['weights/yolov5m.pt'])
YOLOv5 torch 1.7.1 CUDA:0 (GeForce RTX 3070 Laptop GPU, 8192.0MB)
Fusing layers...
Model Summary: 308 layers, 21356877 parameters, 0 gradients, 51.3 GFLOPS
image 1/3 C:\yolo\yolov5\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.018s)
image 2/3 C:\yolo\yolov5\data\images\gj.jpg: 480x640 Done. (0.016s)
image 3/3 C:\yolo\yolov5\data\images\zidane.jpg: 384x640 2 persons, 1 tie, Done. (0.016s)
Results saved to runs\detect\exp50
Done. (0.241s)
采用USB摄像头来测试一下:
(yolov5) C:\yolo\yolov5>python detect.py --source 0 --weights weights/yolov5s.pt --conf 0.25
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', project='runs/detect', save_conf=False, save_txt=False, source='0', update=False, view_img=False, weights=['weights/yolov5s.pt'])
YOLOv5 torch 1.7.1 CUDA:0 (GeForce RTX 3070 Laptop GPU, 8192.0MB)
Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients, 17.0 GFLOPS
1/1: 0... success (640x480 at 30.00 FPS).
0: 480x640 1 person, Done. (0.371s)
0: 480x640 1 person, Done. (0.000s)
0: 480x640 1 person, Done. (0.000s)
0: 480x640 1 person, Done. (0.006s)
0: 480x640 1 person, Done. (0.000s)
(yolov5) C:\yolo\yolov5>python detect.py --source 0 --weights weights/yolov5m.pt --conf 0.25
Namespace(agnostic_nms=False, augment=False, classes=None, conf_thres=0.25, device='', exist_ok=False, img_size=640, iou_thres=0.45, name='exp', project='runs/detect', save_conf=False, save_txt=False, source='0', update=False, view_img=False, weights=['weights/yolov5m.pt'])
YOLOv5 torch 1.7.1 CUDA:0 (GeForce RTX 3070 Laptop GPU, 8192.0MB)
Fusing layers...
Model Summary: 308 layers, 21356877 parameters, 0 gradients, 51.3 GFLOPS
1/1: 0... success (640x480 at 30.00 FPS).
0: 480x640 1 person, Done. (0.875s)
0: 480x640 1 person, Done. (0.000s)
0: 480x640 1 person, Done. (0.011s)
0: 480x640 1 person, Done. (0.000s)
小结
安装设置完成,也能够跑起来了。第一次初始化花的时间比较长,后续每次执行的时间都不尽相同,而且不同weights文件yolov5s.pt 和 yolov5m.pt 的计算结果也差别也不与计算量一致,说明单个图片做检测的计算量在这个测试里不是主要因素,下一次做大量运算再试一试。
老徐 2021/2/21