win10完美安装cuda11.x + pytorch 1.9 (血流成河贴┭┮﹏┭┮)让你的torch.cuda.is_available()变成True!

3 篇文章 0 订阅
1 篇文章 0 订阅

当大家有一个小梦想要搞人工智能的时候,甚至要搞深度学习的时候,屁颠屁颠地买重金买来一个N卡的机器之后,却发现你的torch.cuda.is_available()居然是False!顿时泪奔o(╥﹏╥)o,当你忙活大半天之后发现一无所获之后,让你顿时有了砸电脑的想法。对,这篇blog就是来帮你解决这个困惑,让你重拾深度学习的信心与动力!!!

0 先看看你的GPU支不支持cuda,一般来说N卡是支持的。

0.1 右键任务栏,打开任务管理器,看看自己的卡的型号。

在这里插入图片描述

0.2 打开N卡官网,滑到官网首页最下面,找找看自己的型号支不支持cuda。有些太老的机器不支持就去搞一台新机器吧嘻嘻~。

在这里插入图片描述

1 查看你的机器支持的cuda版本。

1.1 现在的机器买来鼠标右键都会有这个N卡控制面板,打开它。

请添加图片描述

1.2 找到“帮助-系统信息-组件”,查看支持的cuda版本,我的是11.4,拿纸记下这个版本来,这是你这台机器可以支持cuda的最高版本,我们就按照这个来装。

在这里插入图片描述

1.3 win+R,输入cmd后,输入nvidia-smi,可以看到下图,第一个数字的意思是目前驱动的版本,第二个的意思是cuda的版本,应该会和刚才的版本一致。

在这里插入图片描述

1.4 输入nvcc -V。你会发现可能没有这个命令,因为你可能还没有安装cuda,不急我们第3步解决这个问题。如果命令有用,将会再次显示你装的cuda的版本,如下图。这个版本必须和刚才记录的版本一样!

在这里插入图片描述

2 先卸载之前安装了的cuda(没有安装过cuda的新机器忽略此条)。

2.1 相比有些朋友可能安装了一次cuda,但是发现还是没用,那是因为安装的版本不对,我们需要先卸载当前的cuda。右键桌面左下角win图标,打开搜索“控制面板”,“查看方式”切换到“小图标”,然后点击“程序与功能”,卸载掉原来的cuda,需要卸载的程序如下,其余都不卸载。

在这里插入图片描述

2.2 然后用藤讯管家或者是其他软件进行“垃圾清理”,把注册表这一项清理掉。

在这里插入图片描述

3 安装cuda

3.1 去官网下载最新的cuda安装包,选项如下,最后点击下载即可。

在这里插入图片描述

3.2 安装步骤如下

系统检查后,选择第一项“安装显卡驱动(就是图形驱动)和 geforce experience(显卡驱动自动更新程序)”,然后继续,选择自定义:
在这里插入图片描述
这里第一个必须勾上,后面三个也勾上。
在这里插入图片描述
之后是路径选择,可以选择自己想安装的位置。

3.3 安装结束后,右键 我的电脑–>属性–>高级系统设置–>环境变量,系统变量中已经加入了cuda的4个路径,如下图。

在这里插入图片描述

3.4 再次尝试第1步的所有步骤,看看所有版本信息是不是一致的。

4 安装pytorch

4.1 打开pytorch官网,然后配置一下选项,如图所示,复制一下红框的命令。
在这里插入图片描述

4.2 打开Anaconda Prompt,然后输入“conda config --remove-key channels”,恢复默认源,清华源已经停止维护了。然后再输入上面粘贴的命令。等待下载完毕,无法下载或者速度过慢的话,只能去官网这个页面找和自己python版本、cuda版本对应的下载包了。

在这里插入图片描述

5 大功告成!

测试一下,搞了几个星期终于搞好啦,相信大家都比我聪明,最多搞半个小时应该可以搞好()!

5.1 打开Anaconda Promp测试:

在这里插入图片描述

5.2 打开notebook测试:

在这里插入图片描述

pytorch部分代码如下:class LDAMLoss(nn.Module): def init(self, cls_num_list, max_m=0.5, weight=None, s=30): super(LDAMLoss, self).init() m_list = 1.0 / np.sqrt(np.sqrt(cls_num_list)) m_list = m_list * (max_m / np.max(m_list)) m_list = torch.cuda.FloatTensor(m_list) self.m_list = m_list assert s > 0 self.s = s if weight is not None: weight = torch.FloatTensor(weight).cuda() self.weight = weight self.cls_num_list = cls_num_list def forward(self, x, target): index = torch.zeros_like(x, dtype=torch.uint8) index_float = index.type(torch.cuda.FloatTensor) batch_m = torch.matmul(self.m_list[None, :], index_float.transpose(0,1)) batch_m = batch_m.view((-1, 1)) # size=(batch_size, 1) (-1,1) x_m = x - batch_m output = torch.where(index, x_m, x) if self.weight is not None: output = output * self.weight[None, :] logit = output * self.s return F.cross_entropy(logit, target, weight=self.weight) train_loader = torch.utils.data.DataLoader(dataset_train, batch_size=BATCH_SIZE, shuffle=True,drop_last=True) test_loader = torch.utils.data.DataLoader(dataset_test, batch_size=BATCH_SIZE, shuffle=True) cls_num_list = np.zeros(classes) for , label in train_loader.dataset: cls_num_list[label] += 1 criterion_train = LDAMLoss(cls_num_list=cls_num_list, max_m=0.5, s=30) criterion_val = LDAMLoss(cls_num_list=cls_num_list, max_m=0.5, s=30) mixup_fn = Mixup( mixup_alpha=0.8, cutmix_alpha=1.0, cutmix_minmax=None, prob=0.1, switch_prob=0.5, mode='batch', label_smoothing=0.1, num_classes=classes) for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device, non_blocking=True), Variable(target).to(device,non_blocking=True) # 3、将数据输入mixup_fn生成mixup数据 samples, targets = mixup_fn(data, target) targets = torch.tensor(targets).to(torch.long) # 4、将上一步生成的数据输入model,输出预测结果,再计算loss output = model(samples) # 5、梯度清零(将loss关于weight的导数变成0) optimizer.zero_grad() # 6、若使用混合精度 if use_amp: with torch.cuda.amp.autocast(): # 开启混合精度 loss = torch.nan_to_num(criterion_train(output, targets)) # 计算loss scaler.scale(loss).backward() # 梯度放大 torch.nn.utils.clip_grad_norm(model.parameters(), CLIP_GRAD) # 梯度裁剪,防止梯度爆炸 scaler.step(optimizer) # 更新下一次迭代的scaler scaler.update() # 否则,直接反向传播求梯度 else: loss = criterion_train(output, targets) loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), CLIP_GRAD) optimizer.step() 报错:RuntimeError: Expected index [112, 1] to be smaller than self [16, 7] apart from dimension 1
05-29
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值