找资料的时候感觉现在写30XX系显卡深度学习环境配置的文章还不太完善,所以记录了自己的采坑经历。
Why?
下面这张图非常直观,TITAN性能比2080ti强,3080的CUDA核心数差不多是TITAN的两倍,内存少一些。目前3080显卡7000出头可以拿下,性价比非常不错。
1 准备工作
上半年配了台支持4GPU的机器,原计划下半年训练任务上来以后再加卡。但是30XX显卡出来以后,2个3080理论上和4个2080ti性能差不多,现在再加2080ti就非常不理智了。所以拆了2080ti,买了两个技嘉GeForce RTX™ 3080 GAMING OC 10G。
机器的硬件配置:
cpu:i9 10900x
主板:华硕PRIME X299-DELUXE Ⅱ
内存:16G * 4
电源:1600w
显卡:技嘉3080 GAMING O10G * 2
这套配置换3080有很多问题,性价比极低,不太推荐大家按照这个配置来买,有很多更合理的配置单可以参考。
2 环境配置
深度学习环境配置要多花点时间了解自己机器的情况,免得踩太多的坑。先去github上看看别人采的坑https://github.com/pytorch/pytorch/issues?q=is%3Aissue+is%3Aopen+30。
机器的环境:
操作系统:Ubuntu18.04
Nvidia Driver:455
Python:3.7
Pytorch:>= 1.7.0
cuda:11.1.1
cudnn:8.0.5
版本号很重要,一定要看清楚,选不对小版本就是在瞎折腾。
2.1 Nvidia驱动安装
2.1.1 下载驱动
驱动用官方推荐的455,对GTX3080、GTX3090做了适配。
官网地址:https://www.nvidia.com/download/driverResults.aspx/163522/en-us
# 查看GPUlspci -vnn | grep VGA# 安装官方推荐的驱动sudo ./NVIDIA-Linux-x86_64-455.23.04.run --no-x-check -no-nouveau-check -no-opengl-files
驱动安装这里no-x、no-opengl很重要。
安装好驱动以后reboot,查看驱动情况。
watch nvidia-smi
2.1.2 Tips
给Ubuntu装Nvidia的驱动每次都会把我制得服服帖帖的,记录显卡驱动的安装这里踩过的几个坑:
(1)ubuntu-drivers devices没有输出
以前安装2080ti驱动的时候很简单,更新系统,然后用ubuntu-drivers devices很简单就装上了。但是,3080插上以后,ubuntu-drivers devices没有输出。
开始我还以为是显卡没有插好,检查了很多次。后来用下面这个命令是可以看到显卡的。我想了一下应该是ubuntu还没有更新对30XX显卡的检测。所以官方直接下载驱动安装就好了。
lspci -vnn | grep VGA> 1a:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2206] (rev a1) (prog-if 00 [VGA controller])> 68:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2206] (rev a1) (prog-if 00 [VGA controller])
(2)没有关闭x、opengl
第一次安装驱动没有关闭x和opengl,安装失败。
sudo ./NVIDIA-Linux-x86_64-455.23.04.runs
2.2 cuda、cudnn安装
conda一键搞定
自己编译的cuda性能会好一些,不想折腾的话可以用conda安装。
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch-nightly
conda会自动给我们安装cuda和依赖库,等一会(这里等的时间和网速有比较大关系,我等了20分钟)就好了。
安装失败的话检查你的网络,速度太慢就去挂个VP*。
这里的cuda是11.0,和推荐的不一样,但是我运行挺正常的。如果有问题,欢迎大家指出来,我修正。
2.2.1 cuda 11.1
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.runsudo sh cuda_11.1.0_455.23.05_linux.run
2.2.2 cudnn 8.0.5
这里我并没有看到有8.0.5版本的cudnn,只有8.0.4。很多人说8.0.4会安装失败,所以我用的是conda的一键安装。
https://developer.nvidia.com/rdp/cudnn-archive
2.3 Pytorch安装
pytorch一定要安装nightly版本。
pip install numpypip install --pre torch torchvision torchaudio -f https://download.pytorch.org/whl/nightly/cu110/torch_nightly.html
2.4 测试
放别人的一小段测试代码,看看有没有正常调用显卡进行训练。
import torchimport torch.nn as nnimport torch.optim as optimsize = 128class PayloadModel(nn.Module): def __init__(self): super().__init__() self.layers = nn.Sequential( \ *[nn.Conv1d(size, size, 1, 1, 0) for i in range(10)]) def forward(self, X): return self.layers(X)device = "cuda:0"model = PayloadModel().to(device)optimizer = optim.Adam(model.parameters(), lr = 5e-4)inputs = torch.randn(32, size, 256, device = device)targets = torch.randn(32, size, 256, device = device)loss = nn.MSELoss()for step in range(10000000): predicted = model(inputs) L = loss(predicted, targets) optimizer.zero_grad() L.backward() optimizer.step() print("%d steps, loss = %f" % (step, L.item()), end = "\r")
结束语
30XX显卡性能提升很多,性价比也不错,现阶段想配机器的同学这里不推荐买20系列。但是torch和tensorflow稳定版支持30XX显卡可能还需要一点时间,需要动手能力稍微强一点,网上写30xx的文章还不多,遇到问题先看看github,留言讨论也可以。
Reference
https://pytorch.org/
https://github.com/pytorch/pytorch/issues/47669