ubuntu16.04+anaconda3+cuda10.1+cudnn7.6.4+pytorch1.5.1踩坑记录

记录原因

按照CSDN上的安装教程安装pytorch框架,踩坑无数,记录一下,便于以后查询

1、安装NVIDIA驱动

这一步比较常见,参考以下博客完成安装:
链接: https://blog.csdn.net/m0_38007695/article/details/103456043

2、安装环境失败原因分析

网上安装cuda的教程非常多,按照流程安装后,进行测试时无法成功调用cuda。

In [1]: import torch                                                                        
In [2]: import torchvision                                                                    
In [3]: print(torch.cuda.is_available())                                                      
False

一度使我非常困扰,查询cuda、cudnn、以及Nvidia版本对应,没有问题。

软件版本
Nvidia driver430.64
cuda10.1.105
cudnn7.6.3
pytorch1.5.1

重新建立环境,安装了无数次pytorch,还是不行,突然发现解析指令安装时,自动匹配的cudatoolkit-版本为10.1.243,会不会是由于这个版本与cuda不同导致的问题,重新安装果然可以工作了!!!

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

在这里插入图片描述

3、安装cuda

3.1 卸载原版本cuda

根据自己的cuda版本找到卸载脚本:

sudo /usr/local/cuda-10.1/bin/uninstall_cuda_10.1.pl

卸载之后,还有一些残留的文件夹,之前安装的是CUDA 10.1.105,可以一并删除:

sudo rm -rf /usr/local/cuda-10.1/

3.2安装cuda10.1.243

下载地址: https://developer.nvidia.com/cuda-downloads

$ cd ~/Downloads #文件路径
$ sudo sh cuda_10.1.243_418.87.00_linux.run

安装完成后配置环境变量在终端输入

$ vi  ~/.bashrc

在最后添加

export CUDA_HOME=/usr/local/cuda-10.1
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}

export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64/

更新环境变量

$ source  ~/.bashrc

PS:

以下方法有的教程中也有些,记录一下,未执行也可用

设置环境变量和动态链接库

$ vi /etc/profile

在打开的文件末尾加上:

exportPATH=/usr/local/cuda/bin:$PATH

创建链接文件

sudo vi /etc/ld.so.conf.d/cuda.conf

在打开的文件中写入:

/usr/local/cuda/lib64

执行:

sudo ldconfig

3.3 查看版本

可以使用命令nvcc -V或cat /usr/local/cuda/version.txt 查看安装的版本信息:
在这里插入图片描述

3.4 安装后测试

参考https://blog.csdn.net/qq_33200967/article/details/80689543博客内容

执行示例来测试cuda是否可用(若make输入后报错,或./deviceQuery无内容输出,进入该目录下操作即可)

cd /usr/local/cuda-10.1/samples/1_Utilities/deviceQuery
make
./deviceQuery

若可用会输出以下内容:
在这里插入图片描述

4、配置cudnn 7.6.3库

4.1卸载cudnn 7.6.4库

    sudo rm -rf /usr/local/cuda/include/cudnn.h
    sudo rm -rf /usr/local/cuda/lib64/libcudnn*

4.2安装cudnn 7.6.3库

下载cudnn库(cuDNN v7.6.3 for CUDA10.1): https://developer.nvidia.com/rdp/cudnn-download
下载后解压,进入解压后的文件夹cuda

#复制相应文件
cp cuda/lib64/* /usr/local/cuda-10.1/lib64/
cp cuda/include/* /usr/local/cuda-10.1/include/

PS:
以下方法有的教程中也有些,记录一下,未执行也可用

#修改访问权限
$ sudo chmod a+r /usr/local/cuda-10.1/include/cudnn.h /usr/local/cuda-10.1/lib64/libcudnn*

#更新网络链接

$ cd /usr/local/cuda/lib64/
$ sudo chmod+r libcudnn.so.7.4.3
$ sudo ln -sf libcudnn.so.7.4.3. libcudnn.so.7
$ sudo ln -sf libcudnn.so.7libcudnn.so
$ sudo ldconfig

4.3 查看版本

使用如下命令可查看cudnn版本

$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

5、anaconda3

5.1卸载anaconda

删除目录:

rm -rf anaconda3

更新原路径:

gedit ~/.bashrc

删除原anaconda安装时添加的路径
在这里插入图片描述更新环境变量

$ source  ~/.bashrc

5.2安装anaconda3-python3.7版本

在官网下载并安装https://www.anaconda.com/distribution/#download-section

安装指令如下:

bash Anaconda3-2020.02-Linux-x86_64.sh

根据提示信息输入完成安装,包括注册信息和安装位置,都选择了默认设置。

anaconda安装完成后会询问你是否添加环境变量,输入yes,会在~./bashrc中添加环境变量并保存一个备份文件.bashrc-anaconda3.bak。

5.3 anaconda3版本查看

conda --version

5.4 换源

由于下载速度的问题,可以考虑更换成清华大学或者中科大的镜像源,当然会有挂掉的风险

gedit ~/.condarc

参考https://blog.csdn.net/weixin_43667077/article/details/106521015
拷贝以下源目录至condarc并保存即可:

#北京外国语大学开源软件镜像站

channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.bfsu.edu.cn/anaconda
default_channels:
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/main
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/free
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/r
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/pro
  - https://mirrors.bfsu.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.bfsu.edu.cn/anaconda/cloud
  msys2: https://mirrors.bfsu.edu.cn/anaconda/cloud
  bioconda: https://mirrors.bfsu.edu.cn/anaconda/cloud
  menpo: https://mirrors.bfsu.edu.cn/anaconda/cloud
  pytorch: https://mirrors.bfsu.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.bfsu.edu.cn/anaconda/cloud

   
#上海交通大学开源软件镜像站

https://mirrors.sjtug.sjtu.edu.cn/

channels:
  - defaults
show_channel_urls: true
channel_alias: https://anaconda.mirrors.sjtug.sjtu.edu.cn/
default_channels:
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/main
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/free
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/mro
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/msys2
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/pro
  - https://anaconda.mirrors.sjtug.sjtu.edu.cn/pkgs/r
custom_channels:
  conda-forge: https://anaconda.mirrors.sjtug.sjtu.edu.cn/conda-forge
  soumith: https://anaconda.mirrors.sjtug.sjtu.edu.cn/cloud/soumith
  bioconda: https://anaconda.mirrors.sjtug.sjtu.edu.cn/cloud/bioconda
  menpo: https://anaconda.mirrors.sjtug.sjtu.edu.cn/cloud/menpo
  viscid-hub: https://anaconda.mirrors.sjtug.sjtu.edu.cn/cloud/viscid-hub
  atztogo: https://anaconda.mirrors.sjtug.sjtu.edu.cn/cloud/atztogo

 #清华大学开源软件镜像站

https://mirror.tuna.tsinghua.edu.cn/

channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
————————————————
版权声明:本文为CSDN博主「我才是一卓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43667077/article/details/106521015

5.5 anaconda3基本指令

5.5.1 新建环境

创建新环境

conda create --name <env_name> <package_names>

例如创建一个名为test的新环境,python版本为3.7

conda create -n test python=3.7
5.5.2 激活环境
conda activate test
5.5.3 退出环境
conda deactivate
5.5.4 查看已创建的环境
conda info --envs
5.5.5 复制环境
conda create --name <new_env_name> --clone <copied_env_name>
5.5.6 删除环境
conda remove --name test --all
5.5.7 获取当前环境中已安装的包信息
conda list
5.5.8 启动图形化界面anaconda-navigato
anaconda-navigator

6、pytorch 1.5.1

原本想要安装1.3或者1.4的版本,官网只找到了1.5.1的版本,先装着吧,回头看一下区别。

6.1 安装

PyTorch官网https://pytorch.org/上可查看不同版本
在这里插入图片描述
安装命令:
注意要选择官方的安装命令,不要删除 -c pytorch,镜像源的版本有点问题,导致之前安装一直无法调用cuda

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

6.2 版本查询

    import torch
    print(torch.__version__)  #注意是双下划线

如图显示为1。5。1版本
在这里插入图片描述

6.3 测试是否可以调用gpuipython

ipython 

测试1

In [1]: import torch                                                                          

In [2]: import torchvision                                                                    

In [3]: print(torch.cuda.is_available())     

返回 True
在这里插入图片描述
测试2

In [4]: import torch as t                                                                     

In [5]: x = t.rand(5,3)                                                                       

In [6]: y = t.rand(5,3)                                                                       

In [7]: if t.cuda.is_available(): 
   ...:     x = x.cuda() 
   ...:     y = y.cuda() 
   
In [8]: print(x+y)  

返回

tensor([[1.0092, 1.4184, 1.2793],
        [1.1662, 0.7825, 1.4577],
        [0.7173, 1.2580, 1.2082],
        [0.9863, 1.3207, 0.6215],
        [0.8891, 1.3174, 0.8280]], device='cuda:0')

至此安装pytorch成功

参考https://blog.csdn.net/qq_33200967/article/details/80689543
使用以下指令

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.backends.cudnn as cudnn
from torchvision import datasets, transforms


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)


def train(model, device, train_loader, optimizer, epoch):
    model.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()
        output = model(data)
        loss = F.nll_loss(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                       100. * batch_idx / len(train_loader), loss.item()))

def main():
    cudnn.benchmark = True
    torch.manual_seed(1)
    device = torch.device("cuda")
    kwargs = {'num_workers': 1, 'pin_memory': True}
    train_loader = torch.utils.data.DataLoader(
        datasets.MNIST('../data', train=True, download=True,
                       transform=transforms.Compose([
                           transforms.ToTensor(),
                           transforms.Normalize((0.1307,), (0.3081,))
                       ])),
        batch_size=64, shuffle=True, **kwargs)

    model = Net().to(device)
    optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

    for epoch in range(1, 11):
        train(model, device, train_loader, optimizer, epoch)


if __name__ == '__main__':
    main()

若输出
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值