今天在conda下d2l环境中,正在使用pytorch学卷积神经网络,想用gpu加速训练,于是使用如下命令
torch.cuda.device_count()
竟然输出0。我是安装过cuda且有gpu的,怎么回事呢。可能是之前没注意版本的原因。
干脆重新安装吧!
环境上的问题
一定要让你用的pip与python对应,否则全都白做
在安装之前,先看好自己的python和pip版本。
我是在conda创造的虚拟环境d2l中进行所有步骤的,其python=3.8,其他环境中也类似。
执行
python -V
python3 -V
pip -V
pip3 -V
(我花了一上午的时间才发现这个问题,用pip安装的torch安装到了python3.9中了,而我用的是python3.8,导致python3.8一直无法使用GPU。最终卸载掉了多余的python,接下来的python和pip都对应的python3.8.13)
接下来是conda的修改镜像环节,目的是加速下载速度。
下面的操作是常用命令:
- 查看镜像
conda config --show channels
- 添加镜像(这里使用清华的)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
- 恢复默认源
conda config --remove-key channels
接下来将conda激活到要安装的环境,我的是d2l
conda activate d2l
安装cuda
查找源上可用的cuda版本
conda search cudatoolkit --info
找到想要下载的cuda版本后,把cuda下载到本地:复制url字段里的下载链接到浏览器,会自动下载到本地Download文件夹下。
然后安装本地包:
conda install --use-local 本地cuda包所在的路径
安装cudnn
查看cuda对应的cudnn版本
conda search cudnn --info
我的cuda版本是11.3,所以选择这个。
同样,将url复制到浏览器下载,然后conda本地安装
conda install --use-local 本地cudnn包所在的路径
安装pytorch
去官网查询与cuda匹配的pytorch和torchvision包。官网:INSTALLING PREVIOUS VERSIONS OF PYTORCH
我的cuda是11.3,因此我执行这句话:
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
注意,这里不要用conda的命令,而是用pip的命令原因是conda会让你下载cpu版本的torch[1]:
等一会儿就安装成功了。
验证
输入python代码
(d2l) PS E:\study\deapLearning\d2l-zh> python
Python 3.8.13 (default, Oct 19 2022, 22:38:03) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.12.1+cu113'
>>> torch.cuda.is_available()
True
>>> torch.cuda.device_count()
1
>>>
成功。
参考了以下博文,在此表示感谢:
conda虚拟环境中安装cuda和cudnn,再也不用头疼版本号的问题了
Anaconda创建虚拟环境报错—UnavailableInvalidChannel: The channel is not accessible or is invalid
torch.cuda.is_available()返回false——解决办法