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 driver | 430.64 |
cuda | 10.1.105 |
cudnn | 7.6.3 |
pytorch | 1.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()
若输出