
在前面的CUDA环境安装中,安装过CUDA9.1,但没有安装cuDNN。随着CUDA系列的逐渐深入,对CUDA版本的要求也越来越高,不然很多新的技术没办法推进。所以只好重装驱动。甚至找了块RTX的高一些的显卡。但可惜的是,升级失败了。硬件虽然可以认出,但从Nivida官网下载的新驱动根本无法安装,在环境检查的那个环节就报无法支持。原因是Windows10的版本过低。查了下,正好小一个很小的版本号。在这个版本的Win10中只支持标准版的驱动,而NVIDIA公司已经在后续的版本不再支持标准版本转而全面支持DCH驱动。
后来只好又恢复了老的显卡,去官网下载了Nvidia App,这次倒很顺利将显卡的驱动升级到了470,CUDA支持11的初级版本。本来也想止步于此,至少大部分的CUDA相关内容可以继续展开。但天不遂人愿,在第二周正在写代码时,系统突然报“微信崩溃,恢复中”,然后好长时间没办法恢复,只好硬重启。然后,就没有然后了。再也无法进入系统,初步猜测是系统盘的固态硬盘寿命到了。
随即将电脑搬到朋友处,进行了测试确实是如此,只好换了张新的固态硬盘,重做了系统。但可笑的是,官网下载的Windows10竟然不能安装Nivdia App,总是报CUDA不支持这个操作系统。但最后还是通过升级Windows10将驱动升级到了580,支持了CUDA12.6。
本文将针对这个环境进行描述说明,重点描述CUDA12.66安装的不同与cuDNN的安装以及Pytorch的安装及相关验证方法。本文的环境是:
Windows1022h2+vistual Studio2019/2022++andconda3-2025-12-1+CUDA12.6+cuDNN8.7.9.29+ PyTorch2.10.0+cu126
从各种资料查看,理论上讲CUDA12.6可以适配cuDNN8以上及9以上的版本。但大多安装推荐的都是使用的8,故选用一个较新8的版本。vistual Studio以提前安装了2019和20022两个版本。之后安装了andconda3。
1、CUDA的安装
CUDA的安装方法与前文基本一致,但12.6的版本在安装时,指定路径时只有一个路径指定框架不像以前有三个指定路径的框(注意,如果C盘允许,推荐不要改变这个安装路径,对于新手不太友好,而且后面的cuDNN配置方便)。利用前文的验证方法也通过了验证,说明安装成功。此处出现了一个问题下面再说。安装成功后,用前文的各种验证方法都可以通过。
但打开VS2022或VS2019都没创建CUDA12.6运行时的这个模板,即在Vistual Studio的创建项目中没有模板可选。查询了很多资料,最简单的说是重装;其次有的说手动指定相关的文件。
在后者的说明中,查看一下相关的选项,在“C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6\extras\”文件中根本没有visual_studio_integration这个文件夹。这也意味着根本就没有安装或没有安装成功VS扩展支持。想了一下,在安装CUDA时,是取消了“visual studio integration”这个安装选项的,于是觉得可能是高版本的里面需要安装或在安装VS时未选中相关的选项。
将CUDA安装程序打开,重新安装,但只安装这个选项即下图:

因为要使用cdDNN,所以下载了上面的相应版本。虽然网上说9以上的版本也可以支持,但为了保险起见,还是下载了较老的版本。这里有一个不同,9以上的直接打开exe安装即可。9以下,是解压版本,即下载的是一个压缩包,解压缩后,将cuDNN相应路径名下的文件拷贝到CUDA安装的相关路径下同名文件夹下即可(即合并相同文件夹及其下面的文件)。也不用重新指定环境变量。即下图所示:

pytorch的安装又经历了过山车一样的心情。参照相关的网上的安装说明,有好几种方法,可以下载离线包,也可以使用anaconda安装,也可以使用pip安装。这里参考使用pip安装。步骤如下:

pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu126
从理论上讲,就可以坐等成功了。可国内网络啊。连着报错,先是说“SSL”连接问题,然后说“远端主机强行关闭”,问了下DeepSeek,说是国内的网络的问题。解决方法推荐使用国内的镜像源。然后按照方法使用了清华的镜像。结果,确实安装成功了。但测试发现是一个CPU版本。本想着修改一下再创建一个新的虚拟环境,再装一个GPU版本,可忽然想到会不是科学的方法下载就好呢?于是用科学方法下载,果然,一分钟就安装好了。无语。干代码的,不容易。
安装成功后,使用下面的脚本测试一下:
import torch
import sys
print("=" * 50)
print("PyTorch安装信息:")
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"CUDA版本: {torch.version.cuda}")
print(f"cuDNN启用: {torch.backends.cudnn.enabled}")
print(f"GPU数量: {torch.cuda.device_count()}")
if torch.cuda.is_available():
print(f"当前GPU: {torch.cuda.get_device_name(0)}")
print(f"GPU内存: {torch.cuda.get_device_properties(0).total_memory / 1e9:.2f} GB")
# 测试cuDNN
x = torch.randn(1, 3, 224, 224, device='cuda')
try:
# 尝试一个使用cuDNN的操作
x = torch.nn.functional.conv2d(x, torch.randn(64, 3, 3, 3, device='cuda'))
print("cuDNN操作测试: 成功")
# 再次检查版本
print(f"cuDNN版本: {torch.backends.cudnn.version()}")
except Exception as e:
print(f"cuDNN操作测试失败: {e}")
说明,这段验证代码从网上找的。其运行结果是:
PyTorch安装信息:
PyTorch版本: 2.10.0+cu126
CUDA可用: True
CUDA版本: 12.6
cuDNN启用: True
GPU数量: 1
当前GPU: NVIDIA GeForce GTX 960
GPU内存: 4.29 GB
cuDNN操作测试: 成功
cuDNN版本: 91002
否则相关选项无法打印或干脆是None。
注意:安装可以中断,然后继续安装,不会影响进一步的安装。而且中断后也可以再次安装,会继续推进,但还会断,有耐心的可以不断尝试看是否最终可以安装成功。
如果在中断后想删除相关安装操作,可以使用下面的命令:
pip list #查看安装项目
pip uninstall torch torchvision torchaudio -y #移除相关安装
其实不如直接把这个虚拟环境删除,使用下面的命令:
conda remove -n pytroch_env --all // 删除虚拟环境名(如pytroch_env)环境及下属所有包
在vs2019/2022中打开原来VS2017的CUDA项目,无法进行升级,直接报环境错误,找不到CUDA9.1的相关内容。可能如果同时安装了CUDA9.1就能够升级上来吧,没有经过实验验证。但推测可能是这样的。
在Windows上可以同时支持多个版本的CUDA的。相关的方法,可以查询资料,此处不把这个进行说明。
依然沿用老的方法,直接打开VS2019/2022,在创建新项目时,选择“CUDA 12.6 Runtime”即可自动创建一个测试例程,将原来的回调函数相关部分的代码拷贝进来,如下:
#include"cuda_runtime.h"
#include"device_launch_parameters.h"
#include<stdio.h>
#include<cstdio>
#include<cstdlib>
// 回调函数
void CUDART_CB testCB(cudaStream_t stream, cudaError_t status, void* userData){
printf("enter callback!\n");
printf("cur status: %s\n", cudaGetErrorString(status));
if (userData != nullptr) {
int* d = (int*)userData;
printf("user data: %d\n", *d);
}
printf("GPU operate completed!......\n");
}
// 向量加法
__global__ voidvecAdd(constfloat* a, constfloat* b, float* c, int n){
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) {
c[i] = a[i] + b[i];
}
}
intmain(){
constint N = 10000;
constsize_t size = N * sizeof(float);
printf("CUDA callback demo start...\n");
// host mem
float* hA = (float*)malloc(size);
float* hB = (float*)malloc(size);
float* hC = (float*)malloc(size);
for (int i = 0; i < N; i++) {
hA[i] = i;
hB[i] = i + 1;
}
// dev mem
float* dA, * dB, * dC;
cudaMalloc(&dA, size);
cudaMalloc(&dB, size);
cudaMalloc(&dC, size);
cudaStream_t stream;
cudaStreamCreate(&stream);
// user data
int userData = 108;
printf("user data: %d\n", userData);
printf("start copy data from host...\n");//host->dev
cudaMemcpyAsync(dA, hA, size, cudaMemcpyHostToDevice, stream);
cudaMemcpyAsync(dB, hB, size, cudaMemcpyHostToDevice, stream);
printf("start kernel...\n");
int bSize = 256;
int nBlocks = (N + bSize - 1) / bSize;
vecAdd << <nBlocks, bSize, 0, stream >> > (dA, dB, dC, N);
// copy :dev->host
printf("start copy from dev...\n");
cudaMemcpyAsync(hC, dC, size, cudaMemcpyDeviceToHost, stream);
// add callback
cudaStreamAddCallback(stream, testCB, &userData, 0);
printf("host continues to work ...\n");
for (int i = 0; i < 10; i++) {
printf("host:cur num %d...\n", i);
}
// wattting
printf("waitting...\n");
cudaStreamSynchronize(stream);
for (int i = 0; i < 100; i++) {
printf("result data :%f\n", hC[i]);
}
// 清理资源
cudaStreamDestroy(stream);
cudaFree(dA);
cudaFree(dB);
cudaFree(dC);
free(hA);
free(hB);
free(hC);
printf("app end!\n");
return0;
}
程序可以正常编译并启动运行。但有一个警告出现:
Cuda12Stream.lib 和对象 D:\vs2022_cuda_project\Cuda12Stream\x64\Debug\Cuda12Stream.exp
1>LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
它的意思和原来开发多线程库时的“多线程调试(MT或MTd)”选择问题一样,可以不处理。也可以使用下面的方式去除警告:
右键项目——属性
配置属性-链接器-命令行
粘贴下面的代码:
/NODEFAULTLIB:LIBCMT /NODEFAULTLIB:LIBCMTD
再重新编译相关项目则没有了这个问题。
通过本文的升级安装,同样的显卡已经可以支持相当新的CUDA版本(虽然无法支持最新的CUDA13)。在这种情况下,一般的验证型应用都可以进行开发使用了。以后有时间再把C++版本的Pytorch和TensorFlow安装起来,就可以更好的把相关软硬件利用起来。