最近要使用CUDA进行C++和DL的学习,主要是用到cuda对C++代码进行优化加速,和pytorch通过cuda使用GPU进行加速。配环境的过程中遇到了各种奇奇怪怪的问题,于是乎决定写一篇Blog来详细描述一下开发环境的配置过程。
首先要确定自己的台式机/笔记本是否支持CUDA,需要有NVIDIA的独显支持。写Blog时,时间是2022年5月17日,我自己本机的硬件是 NVIDIA-RTX3060-Laptop。之后在参考本篇文章时,要注意自己的硬件条件和当时的时间来确定后续环境的版本。
首先要查看自己本机NVIDIA显卡所支持的驱动版本,以NVIDIA-RTX3060-Laptop为例。
在桌面右键打开 NVIDIA控制面板
然后可以看到NVIDIA控制面板的详细内容,打开左下角的系统信息,查看支持的驱动版本。
这里,NIVDIA-RTX3060-Laptop支持的最高驱动版本为472.56,CUDA版本为11.4。
还可以采用命令行的方式来查看驱动版本,打开命令行,输入
nvidia-smi
访问以下网站来查看和自己的驱动版本相匹配的CUDA toolkit版本
CUDA toolkit版本查看
这里我选择的是 CUDA 11.4.0 GA,当然只要选择自己驱动所能支持的版本均可。
接下来访问以下网址下载对应的CUDA toolkit。
CUDA toolkit下载
选择自己所需要的操作系统以及操作系统的版本还有下载的方式,这里以Windows 11 为例,选择的是Windows
->x86_64
->10
->exe[local]
,最后一个选项的意思是直接本地安装还是选择联网安装。总体上来说下载速度还行,直接选择exe[local]
就OK了。
直接双击运行安装程序即可,在这里他会弹出一个提示框,意思是选择一个临时的解压目录,这个目录会在安装完成之后删除,所以如果你C盘空间足够的话,可以不用修改这个目录,直接采用默认选项即可。毕竟安装完成之后会被删除,没什么太大影响。
首先他会检查系统的兼容性,由于可能安装的不是与自己对应驱动的最新版本,可能会有相关的提示信息,可以暂时忽略,进行下一步。
在这里推荐使用自定义的安装方式
接下来要注意了,如果本机之前没有安装过Microsoft Visual Studio的话,可以考虑不勾选Visual Studio Integration选项。但是要注意,如果想要进行C++的CUDA开发的话,还是建议安装Microsoft Visual Studio,目前其与CUDA的兼容性应该是最好的,而且在使用nvcc
进行编译的时候,如果没有安装过Microsoft Visual Studio可能会出现缺少相关组件的问题。这里还需要注意的是,Microsoft Visual Studio的版本一定要在2017-2019之间!
接下来安装引导程序会让你指定安装的位置,这里是真正要安装的路径,一般来说建议直接默认,但是由于笔者C盘确实有点捉襟见肘,所以安装到了D盘。这里要注意,**千万不要和之前临时解压的目录一致 !!!**否则可能在安装完成之后被删掉。具体会有什么结果笔者也不知道,毕竟没敢尝试。
接下来就是无脑下一步直到完成安装即可。
在安装完成之后,可以打开系统的环境变量来检查CUDA
是否已经加入到环境变量中了,默认情况下是自动添加到环境变量中的。
如果这里并没有被自动添加到环境变量,可以手动创建,并根据你之前选定的安装目录来确定相应的环境变量值。笔者的安装目录为 D:\NVIDIAGPU\CUDA\v11.4
,可以按照自己的安装路径进行相应的调整。
以上步骤完成之后,CUDA toolkit基本就已经安装完成了,可以打开命令行,忐忑地验证一下是否真正安装成功。分别输入以下命令来验证nvcc
的版本。
nvcc -V
nvcc --version
得到如下结果,就恭喜你完成了第一步CUDA toolkit的安装和环境配置。
cuDNN可以认为是CUDA对于深度学习的一个加速库,如果想要用python做深度学习相关的内容的话,这个应该是必不可少的。用NVIDIA官方的解释是
NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks.
首先访问以下网址来选择和之前安装的CUDA
cuDNN版本查看
笔者在此处选择的是 cuDNN v8.2.4
支持的是 CUDA 11.4
,选择的是Windows x64
版本。可以根据自己的CUDA
版本和操作系统来选择对应的 cuDNN
版本,这里一定要能够对应上!
下载完成后会得到一个压缩包,将压缩包解压出来。
解压后的文件夹会得到如下内容,要注意,这里需要把这三个目录下的文件复制到,注意是复制到之前CUDA
安装目录中对应的目录下。这就相当于是给原本的CUDA
做了一个扩展,打了一个补丁,让他变得更加强大!
OK以上步骤完成之后,cuDNN也配置完成了,接下来我们验证一下是否真正的配置成功了。切换到安装目录下的.\extras\demo_suite
目录下,笔者的完整路径为D:\NVIDIAGPU\CUDA\v11.4\extras\demo_suite
,可以根据自己的实际情况进行调整。
在该目录下打开命令行,分别执行bandwidthTest.exe
和deviceQuery.exe
,如果顺利得到以下结果,就说明cuDNN的配置成功完成了。注意一定是要得到RESULT = PASS
才算成功
OK截止到目前为止,CUDA
的下载安装和配置都已经完成了接下来就是针对不同的开发需求的环境配置了,笔者只配置了pytorch
和C++
的开发环境。
pytorch
使用CUDA加速pytorch
准备首先你需要有一个python
,在这里笔者不多赘述如何安装和配置python开发环境,相关的文章很多python安装配置,应该是能够顺利完成的,笔者的python
版本为3.7.2
为了能够使用GPU,我们需要下载支持GPU版本的pytorch
,这里可以从pytorch官网进行下载,选择和自己的操作系统,安装途径以及CUDA
版本匹配的pytorch
版本。
然后就在本机通过pip
安装即可,这里可考虑采用国内的镜像源进行加速,如何使用国内镜像源的方法也有很多文章可以参考pip使用国内镜像源,在此不再赘述。
pytorch
验证在安装完成后,可以打开python
尝试验证一下是否能够使用GPU。如果正常配置了python
的环境变量,可以直接打开命令行输入python
,笔者这里由于使用了虚拟环境,因此操作稍微有所不同。但是进入python
交互终端之后的操作是一致的,可以输入以下命令来验证。
import torch
torch.__version__
#cuda是否可用
torch.cuda.is_available()
#返回GPU的数量
torch.cuda.device_count()
#返回gpu名字,设备索引默认从0开始
torch.cuda.get_device_name(0)
得到结果如下,那么恭喜你,能够愉快的让你的pytorch
使用GPU加速了!
CUDA
开发环境在使用nvcc
对于.cu
代码进行编译的时候,需要Visual Studio下MSVC中cl.exe
支持,因此为了能够使用nvcc
对代码进行编译,需要安装Visual Studio 2019(推荐)。具体的安装过程同样有很多文章可以参考Visual Studio 2019安装,在此不再赘述。这里需要注意的是,安装的时候需要勾选以下组件。
在安装完成后,需要将cl.exe
所在的目录添加到环境变量中去,一般来说这个目录藏得比较深。以笔者这里为例,在安装目录的VC
子目录下可以找到。
D:\Microsoft Visual Studio\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
写一个简单的cuda程序对于之前全部的环境搭建进行检验
#include
#include
#include
using namespace std;
__global__ void vec_add(int *a, int *b)
{
int i = blockIdx.x;
a[i] += b[i];
}
int main()
{
const int N = 100;
// ---- allocate the memory ---- //
int *a, *b;
cudaMallocManaged(&a, N*sizeof(int));
cudaMallocManaged(&b, N*sizeof(int));
// ---- initialize a,b ---- //
for(int i=0;i>>(a,b);
cudaDeviceSynchronize();
// ---- display a ---- //
for(int i=0;i
在代码所在目录下打开命令行,输入以下编译命令,获得可执行文件
nvcc test.cu -o test
到此为止,我们就可以正常cuda进行开发了!