2024年6月25日,注定血与泪的一天,因为我想试试,我这个华硕的天选4搭载的NVIDIA GeForce RTX 4060推理速度如何,所以就开始与CUDA的战斗。。。(然后开始被折磨一整天)
在此记录一下需要避的坑(不 避坑必坑),太提莫多了,我们一步步来说:
一,查看你的CUDA Version版本是第一个大坑(选择适配你的版本最好最好)后续会说和Pytorch的兼容问题。
# Win+R 调出 cmd 然后输入(如果你是英伟达显卡的话): nvidia-smi +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 546.80 Driver Version: 546.80 CUDA Version: 12.3 | |-----------------------------------------+----------------------+----------------------+ | GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA GeForce RTX 4060 ... WDDM | 00000000:01:00.0 On | N/A | | N/A 44C P8 5W / 95W | 1381MiB / 8188MiB | 4% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+运行结果如上,左上角会显示CUDA的Version,我的是12.3,后续都将按照12.3来举例。
二,去CUDA的网上下载CUDA网址如上-下载符合你的版本的,我的是:
Operating System : Windows
Architecture : x86_64
Version : 11
Installer Type : exe(local)
注:一般而言,不同版本的CUDA要求不同的NVIDIA驱动版本,同时显卡驱动版本要不低于CUDA的安装版本,如果驱动版本低的,可以自己去更新。上述中我的是546.8,安装的12.3的CUDA要求不低于545.84,所以我就没去检查更新,主要是懒。
下载好之后进行安装(第二个大坑)!!!!!
要选自定义安装,然后只选第一项CUDA,CUDA展开后,把Visual Studio Integration这一项取消勾选!!!!
取消勾选啊!!!!!!!一定要取消勾选啊!!!!
具体原因主要是有一个东西的安装会一直导致安装失败,成功了也会在后续有各种问题。还有需要记住你装在哪个路径内,方便后续的添加文件。
三,下载cuDNNhttps://developer.nvidia.com/rdp/cudnn-archive
https://developer.nvidia.com/rdp/cudnn-archivecuDNN是一个GPU加速的深度神经网络基元库,能够以高度优化的方式实现标准例程,如前向和反向卷积、池化层、归一化和激活层。全球的深度学习研究人员和框架开发者都依赖cuDNN来实现高性能GPU加速。
我们需要将cuDNN中的内容,一一对应加到刚才我让你记住的目录中,如果你是默认的安装路径的话,那CUDA的安装路径大差不差的就是如下,我们设这个路径为route_CUDA,我瞎设的,并不重要,只是方便我后续编写的时候用..... <OwO>
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3下载好的cuDNN中有三个文件夹,分别是bin,include,lib,而lib下又有一个x64文件夹,我们要做的就是把刚下载的cuDNN中的bin中的文件全选,复制到route_CUDA下的bin中(陈泽bin就是世一上,不玩LOL朋友的请自动忽略,夹带一点私货),后面两个以此类推,注意要把lib/x64文件夹下的文件复制到route_CUDA下的lib/x64中。
四,添加系统路径这一步在你安装的时候,已经自动添加过一些了,你只需要在windows的搜索框中打入“编辑系统环境变量”这六个字,然后打开,就可以编辑系统环境变量了Hhhh(废话自动忽略)选择环境变量--会出现两个框,上面是你的用户变量,下面是系统变量,在系统变量中找到Path或者PATH这玩意儿,双击进入并加入这两项:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\lib(如果你是默认安装的话,应该是一样的,如果不是那可以参考上面自动添加的,比如:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\bin
这样你就可以确定路径了)
五,运行bandwidthTest.exe和deviceQuery.exe(检测工具) # 进入到route_CUDA的目录下后,跟着下列命令一步步执行 cd .\extras\demo_suite .\bandwidthTest.exe .\deviceQuery.exe结果如下(依次是bandwidthTest.exe和deviceQuery.exe):
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\extras\demo_suite>.\bandwidthTest.exe [CUDA Bandwidth Test] - Starting... Running on... Device 0: NVIDIA GeForce RTX 4060 Laptop GPU Quick Mode Host to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 12381.6 Device to Host Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 12848.1 Device to Device Bandwidth, 1 Device(s) PINNED Memory Transfers Transfer Size (Bytes) Bandwidth(MB/s) 33554432 173264.2 Result = PASS NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\extras\demo_suite>.\deviceQuery.exe .\deviceQuery.exe Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA GeForce RTX 4060 Laptop GPU" CUDA Driver Version / Runtime Version 12.3 / 12.3 CUDA Capability Major/Minor version number: 8.9 Total amount of global memory: 8188 MBytes (8585216000 bytes) MapSMtoCores for SM 8.9 is undefined. Default to use 128 Cores/SM MapSMtoCores for SM 8.9 is undefined. Default to use 128 Cores/SM (24) Multiprocessors, (128) CUDA Cores/MP: 3072 CUDA Cores GPU Max Clock rate: 2250 MHz (2.25 GHz) Memory Clock rate: 8001 Mhz Memory Bus Width: 128-bit L2 Cache Size: 33554432 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: zu bytes Total amount of shared memory per block: zu 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: zu bytes Texture alignment: zu bytes Concurrent copy and kernel execution: Yes with 1 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 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 = 12.3, CUDA Runtime Version = 12.3, NumDevs = 1, Device0 = NVIDIA GeForce RTX 4060 Laptop GPU Result = PASS进行到这一步我们仍然不能掉以轻心啊,还有很多的坑等着我们去踩..... <OwO>
五,创建环境关于conda的内容,前人之述备矣,我们就不做赘婿了,呸呸呸,赘叙了(感觉还是错了,无所谓反正我上学那会儿语文学的也不好)直接上命令:
#创建一个叫im_so_handsome的虚拟环境,python版本大于3.8,我默认的是3.11 conda create --name im_so_handsome #激活im_so_handsome虚拟环境 conda activate im_so_handsome 六,安装Pytorch这一步太痛了,痛啊,太痛了,太太太太太太痛啦!!!!!!!!!!!!!!!!!!!!!第三个大坑来了,我是万万没有想到的是这次坑我的竟然是清华园(清华源)XD
正题开始,这个下面的网址,根据你的CUDA的版本读取到对应的命令
Start Locally | PyTorchStart Locally
https://pytorch.org/get-started/locally/我的选择是这样的(为什么我是CUDA12.3,但是我选择了12.1呢,首先说明一下,实测有效,应该是向下兼容,但最好还是选择跟自己版本号一样的,毕竟错一次的时间成本很高,呜呜呜T_T)
接下来我将分享重头戏了,我“精明的”小脑瓜一转,为什么不用清华源呢,我就把后面的这个:
--index-url https://download.pytorch.org/whl/cu121换成了清华源,就那个一串最后是simple,算了,打出来吧:
# 如假也不包换的清华源 -i https://pypi.tuna.tsinghua.edu.cn/simple当时因为没仔细看,以为就是个源,所以自己斗胆换成了国内的源(但其实他是包含cu121的版本号的),然后就是自动给你下载了默认的版本,然后就导致了不兼容,就像西湖醋鱼一样,醋是醋,鱼是鱼,西湖是西湖,同样的CUDA是CUDA,Pytorch是Pytorch,结果就是Pytorch根本检测不到你的显卡,呜呜呜想哭呜呜呜T_T
那我们应该怎么办呢?
GOOD QUESTION!!!
确保处在稳定的网络环境中,老老实实得按照他给你得命令安装,我的是如下:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121失败就重新装,失败就重新装,这是个玄学,说不定哪次就成功了,我也是装了七八次才装上了。
然后就是第四个坑:痛啊,太痛了,太太太太痛啦!!!!!!!!!!!!!!!!!!!!!+1+1+1+1+1+1+1+1+1+1+1+1+1+1
如果你的环境里,已经安装了Pytorch,请你卸载掉,谢谢,覆盖是不好使滴,当你执行上一步,没有出现反反复复地重装得时候,反而是一连串的Requirement already satisfied,恭喜你踩雷了!
这个时候要不你就干脆新创个环境,要不就用下面这个命令卸载Pytorch:
pip uninstall torch卸载完成后,再去上个步骤安装Pytorch。
XXX:说!你还敢不敢投机取巧了
我:不敢了,大爷,再也不敢了,呜呜呜
七,检验结果在终端执行python进入python环境:
python #然后输入 >>> import torch >>> torch.cuda.is_available()输出结果是True,证明CUDA可用,检测到了你的显卡。
然后让我们再来看看你的显卡数量,笔记本的话,应该都是一张吧。。。可能,我也不确定,涉及到知识盲区了。反正我的是一张,代码和结果一起打在下面了 :
Python 3.12.4 | packaged by Anaconda, Inc. | (main, Jun 18 2024, 15:03:56) [MSC v.1929 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> torch.cuda.is_available() True >>> import torch >>> torch.cuda.device_count() 1可以看出来结果是1,至此恭喜你,终于成功了,但是,俗话说的好,一千个人有一千零一个哈姆雷特,如果你碰到了新的坑,那只能继续摸索,路漫漫那,其修远兮欸。。。。<OwO>
希望我们都可以在未来某天成为技术大牛!!!