赞
踩
2024年6月25日,注定血与泪的一天,因为我想试试,我这个华硕的天选4搭载的NVIDIA GeForce RTX 4060推理速度如何,所以就开始与CUDA的战斗。。。(然后开始被折磨一整天)
在此记录一下需要避的坑(不 避坑必坑),太提莫多了,我们一步步来说:
版本是第一个大坑(选择适配你的版本最好最好)后续会说和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来举例。
网址如上-下载符合你的版本的,我的是:
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这一项取消勾选!!!!
取消勾选啊!!!!!!!一定要取消勾选啊!!!!
具体原因主要是有一个东西的安装会一直导致安装失败,成功了也会在后续有各种问题。还有需要记住你装在哪个路径内,方便后续的添加文件。
https://developer.nvidia.com/rdp/cudnn-archivehttps://developer.nvidia.com/rdp/cudnn-archive
cuDNN是一个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
这样你就可以确定路径了)
- # 进入到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
这一步太痛了,痛啊,太痛了,太太太太太太痛啦!!!!!!!!!!!!!!!!!!!!!第三个大坑来了,我是万万没有想到的是这次坑我的竟然是清华园(清华源)XD
正题开始,这个下面的网址,根据你的CUDA的版本读取到对应的命令
Start Locally | PyTorchStart Locallyhttps://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>
希望我们都可以在未来某天成为技术大牛!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。