windows下的CUDA环境配置
windows下的CUDA环境配置
Ding Ning1、环境配置
英伟达官方提供了详细的配置文档:
https://docs.nvidia.com/cuda/cuda-quick-start-guide/index.html#
配置文档中提供了win和linux平台下的两类安装指南,由于我的平台是win64,所以只尝试了win系统的配置。下面是官方提供的详细版配置指南:
https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/
总的说,配置过程非常简单,windows下只需要下载CUDA Development Tools安装器,点击一键安装即可。
CUDA Development Tools安装器提供了:自动卸载旧版本、自动注册环境变量、自动安装IDE插件等等功能,要做的就是点击next steps就可以了。(第二次覆盖安装时,如果破坏了卸载程序,可能需要手动修改nvcc的环境变量)
但是经过自己上手,发现官方文档中有不少问题,主要是支持版本不清晰,容易造成反复卸载安装,浪费时间,故写一个配置核对和安装的教程文档:
1.1 系统要求
1、检查系统和编译器
英伟达对windows的系统支持仅有以下几个版本,我的系统是Microsoft Windows 10 22H2,所以直接下载NVIDIA CUDA Toolkit (available at https://developer.nvidia.com/cuda-downloads)就可以了。
CUDA12.6 在windows平台下仅支持MSVC编译器。CUDA最新版及后续版本都将不再对32-bit compilation native and cross-compilation提供支持。
1.2 显卡要求
1、检查显卡版本是否被支持
访问下方网址,检查自己的显卡是否在其中。
一查晕了,我是1050ti,不在支持列表里。
但是查询社区后的结果是可行。
因此,如果你的显卡型号不在官网的支持列表里,不要着急,google一下:cuda + 你的显卡型号。
2、检查显卡驱动
确定了自己显卡型号被支持,另一个需求就是显卡驱动的版本,这对应着你能够安装的CUDA toolkit版本
需要首先检查自己的显卡驱动,下图是CUDA版本与驱动版本的对应关系(https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html):
通过
1 | 英伟达控制面板->帮助->系统信息 |
可以直接看到自己的显卡驱动版本。你可以通过升级驱动或选择驱动适配的CUDA版本进行安装。
1.3 windows 系统下的 VS 要求
英伟达官方的tools kit可以为你一键安装VS的插件适配,能很大程度提高编程效率,因此虽然我的电脑跑VS很费劲,还是选择了VS作为我CUDA编程的IDE。
直接在官网下载Instaler。在安装过程中发现我的vs并不能安装Nsight Integration, 去官网查询后得知VS2019和之前的版本号,仅支持32位;而对于2022和后续版本,仅支持64位。
这个套件包含了几个很重要的工具,所以还是得安装。对我而言重要的工具有两个:
Nsight Compute : CUDA application interactive kernel profiler
Nsight Systems : System-wide performance analysis tool
所以我重新安装了一个VS2022。官方下载地址如下:
在安装时选择C++桌面开发即可。
1.4 安装及验证
1. 安装过程:
1、选择一个解压文件夹,这个文件夹在安装结束后会被自动删除。
解压中
2、选择高级安装,设置安装位置及安装组件
3、安装完成
2. 验证:
这里有三种方式验证,三种方法可以交叉验证,以确定到底哪一步出错了。
下面是具体的验证方法:
1、在CMD中输入命令行,即可验证NVCC编译器的版本。NVCC是CUDA的编译器,是在C编译器基础上的一个拓展。
“CUDA nvcc编译器会自动分离你代码里面的不同部分,如图中主机代码用C写成,使用本地的C语言编译器编译,设备端代码,也就是核函数,用CUDA C编写,通过nvcc编译,链接阶段,在内核程序调用或者明显的GPU设备操作时,添加运行时库。”
出自:https://face2ai.com/CUDA-F-1-1-%E5%BC%82%E6%9E%84%E8%AE%A1%E7%AE%97-CUDA/
下面是查看版本的命令:
1 | nvcc -V |
验证结果:
同样的,你可以使用where指令查询NVCC的安装位置,确保环境变量中定义的位置指向的是你现在安装的NVCC:
1 | where nvcc |
2、运行示例
在安装目录下,有一系列测试用例,可以直接执行。如下图:
直接在命令行中执行这些程序,也可验证环境是否成功。我运行了带宽测试,结果如下:
3、最后一个验证方法是克隆官方示例,并编译运行。官方示例是通过VS编写的,在打开时只需点击sln工程文件即可。示例仓库如下:
将代码克隆下来后,通过运行其中bandwidthTest这个测试项目,测试tools和VS的集成功能是否完善。
Samples/1_Utilities/bandwidthTest
验证结果:
1.5 遇到的一些问题和解决方法
1. Nsight Integration组件安装失败
报错截图:
具体报错如下:
1 | Not Installed: |
解决方法:
https://forums.developer.nvidia.com/t/cuda-toolkit-not-fully-installed/182066/4
https://forums.developer.nvidia.com/t/integrated-cuda-profilers-not-installed/254745
简单地说,没有安装是因为 Graphics Frame Debugger 和 Profiler 目前以及从toolkit中移除(toolkit 的基本功能是开发环境,调优工具理应独立按需配置)。如果需要安装,需要进行单独的配置,具体的安装教程文档如下:
https://developer.nvidia.com/nvidia-nsight-integration-install-tips
这是官方对问题的回复:
1 | Hi, @sandocarlos1 |
2. 安装器的选择
由于网络原因,我选择了local安装器。两个安装器的功能是完全一致的,只是network安装器会在安装过程中下载待安装文件。如果网络环境不好,我也建议你选择local安装器,从而避免重复下载带来的额外耗时。
3. 驱动版本
上述问题是因为现安装的显卡驱动比installer自带的驱动版本高,在安装时可以直接选择取消勾选安装driver(如下图),一般不会造成问题。
下图是官方文档(https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html)中表明的安装程序自带的驱动版本:
自己的驱动版本可以通过英伟达管理面板查看,比如我的驱动版本就是最新的,比安装包自带的驱动版本高,所以出现了上述的告警。
4. NVCC环境变量的自动修改
如果之前安装过某个版本的CUDA,这里会提示可能需要人为修改环境变量:
根据我的验证,如果你没有自己乱删文件,导致卸载出问题了,安装器会自动帮你更新环境到新的安装位置:
5. VS配置错误,无法正确编译CUDA示例项目
重复安装不同版本的CUDA,可能会造成VS的项目配置出现一些问题,如下方的帖子和我的截图:
对VS进行repair后仍然报错,排除问题是由于IDE安装不全:
到这里为止,和帖子中的问题一模一样,还是没有正确检索到安装的CUDA版本号。这个帖子的问题仍然没有解决,所以我选择自己进行解决。通过查阅几个方案后,定位到了原因所在,总结得到了如下可行方案:
step 1. 修改项目CUDA
这里关键点在于不要学习各种帖子中描述的直接修改文件,而是选择直接内部修改配置,避免破坏文件的健全性,具体的操作如下:
1 | VS中右键项目->生成依赖性->生成自定义->选择现在正确安装的版本: |
step 2. 重新打开项目
1 | VS中右键项目->生成 |
step 3. 点击上方debug按钮,即可开始调试:
原因分析:
https://forums.developer.nvidia.com/t/cannot-run-samples-on-ms-visual-studi-2019/72472
上述的帖子中,都遇到了相同的问题,问题根源在于IDE找不到编译所需的依赖文件。这个CUDA的版本号是github中的项目指定的。问题出在这里,当打开一个新的陌生项目时,依赖检查模块定位到了配置文件中指定的CUDA版本,但该版本并不是本机安装的版本,因此依赖无法被正确加载。需要手动修改依赖版本。
如下图,图中是一个测试项目刚打开时的依赖项配置页面,图中默认的12.5版本的CUDA并不是我本机安装的版本。所以需要手动指定。
总地说,任何在CUDA版本上的修改都有可能会导致这个问题。包括但不仅限于:工程中指定了CUDA版本,但运行前并没有确认本地安装的CUDA版本是否一致;工程中升级CUDA版本,需要重新指定CUDA依赖。此外,工程路径中有中文同样会造成编译失败,切记检查是否是因为字符集乱码导致无法定位。
这是一个常见的简单问题,拓展问题搜索关键词
1 | [未找到导入的项目XXX,请确认<Import>声明中的CUDAs路径正确,且磁盘上存在该文件] |
针对该类问题,英伟达官方给出的解决方案:
1.6 一些有用的资料
- CUDA Toolkit Archive
包含所有toolkit的历史版本,如果GPU太老,不被最新版本的toolkit支持,可以考虑安装旧版本的:
1.7 一些有趣的事实
1、 VS 的 Intellisense 并不支持 CUDA 的特性语法,比如<<<>>>.
这是很多开发者舍弃VS作为编辑器的部分原因:
https://www.reddit.com/r/CUDA/comments/uimcen/is_there_a_way_to_get_visual_studio_2019/?rdt=65020
更有趣的是,早在2018年就有人在社区中提出开发这项插件的请求,但是直到现在,这个问题仍然open着。
在2022年,终于有热心的开发者注意到了这个小问题,提供了一种宏替换的方法,通过在代码头添加宏替换,自行解决这个问题,下面是回复原文:
1 | his suggestion has been open for going on 5 years now with no signs of life from MSFT. I don’t mean to sound pessimistic, but perhaps we’ll need to find our own workarounds. To that end: |
更多的,有人在2022年开源了一个python脚本,用于生成上述思路的宏,从而试图解决这个问题:
英伟达官方为vsc编写了一套专用的code edition插件,但是仍然不管VS用户的死活:
https://developer.nvidia.com/nsight-visual-studio-code-edition
这一定程度上反映了轻量与重量的优缺点。你可以选择VSC作为你的开发工具,选择VS作为你的调优工具和工程管理工具。