完美解决torch.cuda.is_available()一直返回False的玄学方法

一直用的TensorFlow(keras)来完成一些工作,因许多论文中的模型用pytorch来实现,代码看不懂实在是不太应该。正好趁此假期,疫情原因无法出去浪,在家学一下pytorch。

游戏用笔记本自带GeForce 1050显卡,可用GPU,想着不用白不用,先装一个GPU版本再说。但是我按照网上的所有方法,torch.cuda.is_available()总是返回False。有轻微强迫症的我,不解决掉是睡不好的。

首先说一下我所做的工作顺序。说不定能有参考。(系统:WIN10)

1.安装CUDA

此处有其他大量且优质的帖,故不在此详述。我自己的机器支持CUDA10.2,但是我安装的是CUDA10,按理说应该版本是向下支持的。安装正确在cmd中敲nvcc -V能显示即可。

NVIDIA-smi命令截图如下。感觉是没什么问题的,驱动版本也挺高。

2.安装对应版本的pytorch

首先想到的肯定是官网安装。conda+重新开放的清华源=神速。此处是我自己的一个大坑。

3.安装cudnn等

同样,有大量帖子教学。我是在一直失败,走投无路,抱着安装一下试试的想法,结果并无卵用。

玄学解决

网上的攻略说产生此类问题的主要原因在于驱动安装的不正确。但我自己的情况并不符合。

在搜了大量的帖子无果后。偶然发现,使用官网conda命令下载的,居然全是CPU版本。

无论我怎么尝试使用conda下载任何版本,都是cpu版本的。可能是清华源的问题??

既然conda无法用,那就用pip。官网的pip命令,不知道是不是我的问题,就算使用各种源,速度也超级慢,还会中断,700M+硬是下不下来。无奈使用本地下载方法。

在此处寻找符合自己版本的pytorch-cuda版本,torchvision版本下载。

https://download.pytorch.org/whl/torch_stable.html

(速度同样极慢!但是不会断了。。。。勉强能下)

下载后pip install xxx(下载下来的文件名) 安装即可。

接下来就见证奇迹了。但是奇迹是怎么发生的,conda为什么只能下cpu版本,我一直没有搞明白。

补充:记录下pytorch安装中一个比较隐蔽的坑,torch.cuda.is_available()返回false的一个原因

如题,想要安装GPU版,一开始从网上找了教程,显卡驱动、CUDA、cuDNN挨个更新安装,都选择了10.1版本,安装完后在anaconda中按照官网提示输入下面的代码,可以看到cudatoolkit即GPU版

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

然后发现基本上大一点的包都下载不下来,包括pytorch、cudatoolkit等等,遂又从网上找教程,加清华源,加了几个之后下载很快,下载下来也可以用,以为已经成功了,但是torch.cuda.is_available()返回就是False。

最开始以为是开始安装的版本不匹配,然后又尝试了10.2版本的CUDA,结果还是一模一样,最后输入conda list后终于发现了问题所在:

可以看到第三列版本号前面的cpu,后来上清华源的网站上看了下,可能是清华源没有对应cuda版本的pytorch,所以会装cpu版的。

目前的解决方法有两个,可以去清华源网站上找对应的版本,https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/,安装输入命令行时将cuda版本改掉。也可以科学上网,直接从官网安装。

(0)

相关推荐

  • 详解win10下pytorch-gpu安装以及CUDA详细安装过程

    1.Cuda的下载安装及配置 首先我们要确定本机是否有独立显卡.在计算机-管理-设备管理器-显示适配器中,查看是否有独立显卡. 可以看到本机有一个集成显卡和独立显卡NVIDIA GetForce GTX 1050. 接下来,测试本机独立显卡是否支持CUDA的安装,点击此处查询显卡是否在列表中. 从上图中,可以看到我本机的独立显卡是支持CUDA安装的,计算力是6.1. 那么,接下来就是选择CUDA进行安装即可,点击此处 这里我选了CUDA Toolkit10.0的版本,至于选择哪个版本,个人认为应

  • pytorch中使用cuda扩展的实现示例

    以下面这个例子作为教程,实现功能是element-wise add: (pytorch中想调用cuda模块,还是用另外使用C编写接口脚本) 第一步:cuda编程的源文件和头文件 // mathutil_cuda_kernel.cu // 头文件,最后一个是cuda特有的 #include <curand.h> #include <stdio.h> #include <math.h> #include <float.h> #include "math

  • Pytorch 解决自定义子Module .cuda() tensor失败的问题

    最近在刚从tensorflow转入pytorch,对于自定义的nn.Module 碰到了个问题,即使把模组 modle=Model().cuda(),里面的子Module的parameter都没有被放入cuda,导致输入是torch.cuda.FloatTensor,但是比如CNN的weight却还是torch.FloatTensor (当然最粗暴的方法就是直接在子模组里面都用了 .cuda() 但是问题并不在那,可能是调用子模组的时候,存在某些错误,导致父模组没有把子模组的parameter注

  • pytorch判断是否cuda 判断变量类型方式

    我就废话不多说了,那就直接看代码吧~ inputs = Variable(torch.randn(2,2)) inputs.is_cuda # will return false inputs = Variable(torch.randn(2,2).cuda()) inputs.is_cuda # returns true 判断: torch.is_tensor() #如果是pytorch的tensor类型返回true torch.is_storage() # 如果是pytorch的storag

  • 完美解决torch.cuda.is_available()一直返回False的玄学方法

    一直用的TensorFlow(keras)来完成一些工作,因许多论文中的模型用pytorch来实现,代码看不懂实在是不太应该.正好趁此假期,疫情原因无法出去浪,在家学一下pytorch. 游戏用笔记本自带GeForce 1050显卡,可用GPU,想着不用白不用,先装一个GPU版本再说.但是我按照网上的所有方法,torch.cuda.is_available()总是返回False.有轻微强迫症的我,不解决掉是睡不好的. 首先说一下我所做的工作顺序.说不定能有参考.(系统:WIN10) 1.安装CU

  • 安装pytorch报错torch.cuda.is_available()=false问题的解决过程

    问题介绍 在安装torch之后,命令行(Anaconda Powershell Prompt)运行这三行代码: python # python import torch torch.cuda.is_available() 返回结果始终为False. 出错原因 原因有多个,可以参考文章最后的链接[1] 他的很清晰,如果按我的没有解决可以看一下. 主要就是以下两个: CUDA.cudnn.torch版本不对应.(解决方法参考链接[1]) 一个坑:是通过清华源下载的!检查是不是清华源下载导致的问题:

  • 解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题

    我要实现的功能是在上传文件之前校验是否表格中存在重复的数据,有的话,需要弹窗提示是否覆盖,确认之后继续上传,取消之后,就不再上传. 项目中用的element-ui是V1.4.3 <el-upload class="upload-demo" drag ref="fileUpload" :action="urls.fileUpload" :on-success="handleUploadSuccess" :on-error=

  • JS模态窗口返回值兼容问题的完美解决方法

    因系统要兼容原IE已使用的关闭方法,经调试测得,需对window.dialogArguments进行再较验,不然易出问题. function OKEnd(vals) { if (vals == null) vals = "TRUE"; if (typeof (window.opener) == "undefined") { if (typeof (window.dialogArguments) != "undefined") { if (wind

  • ios微信浏览器返回不刷新问题完美解决方法

    开始用的表单提交,返回参数就丢失,换成url跳转,popstate监听 (注释部分)ios10测试始终有问题,继续搜,最后用pageshow,pagehide完美解决(另外说一句:珍爱生命,远离微信和ios) var wxback = { init :function(){ //隐藏微信分享按钮等 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { WeixinJSBridge.call('hid

  • php中unserialize返回false的解决方法

    本文实例讲述了php中unserialize返回false的解决方法,分享给大家供大家参考.具体方法如下: php 提供serialize(序列化) 与unserialize(反序列化)方法. 使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据. 先来看看如下程序实例: <?php $arr = array( 'name' => 'fdipzone', 'gender' => 'male' ); $str = serialize($arr); //序

  • Android在view.requestFocus(0)返回false的解决办法

    我们有时候想让listview的第一行自动获取到焦点,我们就会使用view.requestFocus(0)来操作,而有时候并不生效,debug后显示rerurn为false. 这是因为我们获取焦点太早,listview控件还为加载完毕.可以尝试一下方法解决: listview.post(new Runnable(){ @Override public void run(){ view.requestFocus(0); } }); 以上所述是小编给大家介绍的Android在view.request

  • easyui form validate总是返回false的原因及解决方法

    最近做表单验证用了easyui form组件.又一次发现在测试表单都填写正确了但是调试表单的代码监测到调用form的"validate"方法总是返回false 最后查了一下原因在html中写的是easyui-validatebox但是在script中却又声明了$('#field1').combobox(); <form id="form1"> <input type="text" id="field1" cl

  • 详解php中curl返回false的解决办法

    首先来看一个封装的curl函数 function request_post($url = '', $param = '') { if (empty($url) || empty($param)) { return false; } $postUrl = $url; $curlPost = $param; $curl = curl_init();//初始化curl curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页 curl_setopt($curl

  • 解决os.path.isdir() 判断文件夹却返回false的问题

    今天使用os.path.isdir()判断是否是文件夹的时候发现一个问题: lst = os.listdir(path) for i in lst: if os.path.isdir(i) 遍历到path下面的一个子文件夹时,os.path.isdir()却返回 false. 但如果使用如下处理,就能正常处理,返回true. lst = os.listdir(path) for i in lst: i = os.path.join(path, i) #=================〉这一行很

随机推荐