面向RTX 3090的深度学习笔记

2020 年 11 月 2 日 CVer

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文者:恨铁不成钢琴

https://zhuanlan.zhihu.com/p/258606347

本文已由原作者授权,不得擅自二次转载

深度学习
……在用笔记本的1060连续炼丹5个月之后,我可以断言……
是一个实验为主的学科。

这篇文章的每一句话很可能都是错的
但某些地方,它们总是有用的
哪怕这篇文章没有一个结论正确,来阅读文章的你们,至少也可以借此思考和探究,我们应该考虑系统的哪些方面,究竟有哪些东西能够影响深度学习的性能。

由于这里只是笔记,笔记不会记载课本中的常见知识(了解那些知识应该去读课本!)
这里只会记录和整理一些原本放在我脑子里的东西。

比如一些特别常用但基本不会有人告诉你的命令

sudo nvidia-smi -pm 1#linux专用,什么意思自己查,我只知道用过的都说好
sudo nvidia-smi -pl 320#性能损失3%但可以保证交火时候不撞温度墙……保证不了就把320改成300

目录

1.我的系统

1.1.基本设置
1.2.应该考虑系统的哪些优化
1.3.3090的选择

2.一些意想不到的问题

2.1.玩游戏用的windows
2.2.Ubuntu高温死机
2.3.Gentoo……她太高贵,我配不上
2.4.CUDA!

1.我的系统

1.1.基本设置

这里的设置很可能并不是最好的设置,根据硬件不同,系统不同,驱动不同,cuda版本不同……各种设置的不同都会导致配置变得不完美,等亮机卡到手之后我会在评论区留下自己的硬件&软件配置,如果其他人实验出了更好的配置(比如用我的配置跑出来的成绩明显差于我公布的数据,且有一个更好的配置备选),可以在评论区留言。你的留言理论上并不会得到回复(因为这样的回复会妨碍其他人的浏览),但至少,你会收到其他人的感激。

目前,我用的是Manjaro(因为安装超级方便),xfce4桌面(据说占用小,但KDE真的好看)
做了好几处调整,比如把内存做成内存盘,比如把各种临时文件夹link到内存盘的某个目录,比如设置了许多快捷键……最重要的修改应该是这一条,固定CUDA,CUDNN版本禁止自动升级(对非30系显卡,这是必须做的):

$ cat /etc/pacman.conf | grep IgnorePkg
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
IgnorePkg = cuda cudnn

(如果设置忽略cuda cudnn升级,在执行sudo pacman -Syu时候会有如下提示)

警告:cuda:忽略软件包升级 (10.2.89-2 => 11.0.3-1)
警告:cudnn:忽略软件包升级 (7.6.5.32-2 => 8.0.2.39-2)
Remark 1.Manjaro可以很方便地通过sudo pacman -Syu升级整个系统,但升级cuda或者显卡驱动之后,很可能不能正常开始新训练(已经开始的训练不受影响),所以不推荐实验室公共电脑使用Manjaro——如果你真的馋Manjaro的各种优势,请把/usr/bin/pacman改个名字,否则实验室电脑很可能因为一次升级而被迫重启
如果此时有两个实验,一个刚刚做到一半而另一个刚刚做完……至少会有一个人觉得很不舒服
Remark 2.如果你已经对sudo pacman -Syu成瘾,可以忽略这条,否则,请养成执行sudo pacman -Syu的习惯, 据传如果几年不执行这个命令,某日心血来潮,结果很可能是系统挂掉

一个悲伤的消息是30系显卡只支持cuda11

pytorch最开始(9月)建议用sm_80+PTX进行编译,我这里发现11.1的cuda+sm80或者sm86都能正常运行,但未测试11.0是什么情况,保险起见可以直接上11.1,如果是勇于尝试的,可以试试11.0会怎么样。

然而我测得的结果是,对我那可怜的笔记本上的1060,用10.2跟11炼丹的效率差距差不多是linux跟windows上的差距……我不得不感叹老黄刀法真好……

如果你需要降级你的cuda和cudnn,请使用下面的代码(降到10.2,如果希望降级到其他版本可以参考这里写的代码,两行pacman选一行就好,不要都选……如果你并没有安装cuda和cudnn,或许可以把-U改成-S,未测试这样更改是否有效,但理应有效。)

#我是用下面这行代码进行降级的。
sudo pacman -U https://archive.archlinux.org/packages/c/cuda/cuda-10.2.89-5-x86_64.pkg.tar.zst https://archive.archlinux.org/packages/c/cudnn/cudnn-7.6.5.32-4-x86_64.pkg.tar.zst

降级系统之后别忘了把IgnorePkg = cuda cudnn这行写进/etc/pacman.conf里面

Note:如果pacman下载速度过慢,可以先把文件使用下载工具下载到本地,再执行 sudo pacman -U $(下载的两个文件) 进行升级

1.2.应该考虑系统的哪些优化

下面的测试,重要性随编号增加而递减

首先应该看的,是系统的稳定性:

1.2.1.GPU温度过高时候会不会死机(测得,ubuntu会,有时会直接掉显卡,但manjaro,哪怕显卡到82度,也从未死机过)
1.2.2.连续训练时GPU温度是否过高(不同系统真的不一样……同一个笔记本我用ubuntu愣是比Manjaro高5度,结果ubuntu频繁死机逼着我写了一个sleep函数……等我发现Manjaro不需要sleep的时候真的是高兴坏了)

然后看系统的性能:

1.2.3.训练一个epoch需要多久(组好3090之后时候我会放出python脚本跟我的测试结果,暂时不会涉及sli因为sli我真的不熟而且我也不确定能不能买到两张水冷卡sli)
1.2.4.初始化并结束第一个epoch的速度有多快(这涉及到搭建模型的效率。mxnet在windows上训练速度感人(快于pytorch),初始化速度真的赶人(几分钟+巨大的内存占用))
1.2.5.数据读取速度有多快(这个很可能成为新显卡的瓶颈,但其实并不重要,毕竟刷SOTA的时候你不可能让你的显卡闲置而CPU吃满)

最后看平台是否用得顺手……这个就因人而异了,毕竟linux上也有steam可以直接开proton玩windows上的游戏——或许最优策略是白天windows玩游戏晚上linux炼丹……我测得的结果是……这样似乎比纯windows训练要快……真的是活见鬼

Remark 3.Manjaro是我测得的最好的系统,但哪个系统最好应该看具体的配置,看硬件兼容性,看各种调校是否到位(比如intel-undervolt降压,用压功耗的方式提升睿频),看是否支持独显集显切换(独显输出画面独显深度学习的唯一结局是网页卡成PPT……我推荐Manjaro的一个原因是,Manjaro自带一个prime-run,能够自由处理独显/集显切换问题)
如果你说,你测得的windows就是比Manjaro要好用,Manjaro跑深度学习的速度只是windows的1/2,windows加载mxnet秒加载,但mxnet训练速度明显慢于pytorch……
如果你遇到类似问题请回复我,我不会回复你因为大家毕竟配置不同。但请你务必留言
——毕竟真的有可能——
比如你住在珠穆朗玛峰峰顶,上了一套水冷系统,跑mxnet没跑多久水冷液就沸腾然后漏出来把主板烧了,而我甚至不知道珠穆朗玛峰峰顶能住人……
你的留言可以帮助后来人选择更合适的配置

1.3.3090的选择

19日下单,终于到手
选择3090的时候,应当注意:
1.是否有购买多块3090的计划,如果是,请在

  • 背板镂空+PCIE延长线(n张显卡配n/2或者2n/3根延长线,并将镂空的背板和风扇进风口隔开)

  • 水冷型号(暂未发售)

这两者之中选择一个。
选错可以直接完成成就:机箱烤红薯,比如

  • 背板镂空,不使用PCIE延长线

  • 背板无镂空(亲自证明了不做散热就是烤红薯,不推荐,选的是微星万图师OC,然而看功耗墙仍然350W且不能用nvidia-smi更改,很有可能只有名字是OC——这样的OC大概不如其他非OC但是背板镂空的版本,毕竟那些版本温度更低)

3080还好,3090选不好,交火可以直接撞温度墙。

由于眼馋算力,我先选了背板无镂空的型号,或许不利于散热,我原以为知道如何调整——但最好的调整方法大概是降功耗或者等冬天

1.4.编译mxnet

编译mxnet的时候会遇到不少问题。

首先在cmake之前记得mkdir build && cd build,否则会污染源代码
如果发现ReadLock报错,需要用sed把set(CMAKE_CXX_STANDARD 11)改成set(CMAKE_CXX_STANDARD 14)
另外需要把 src/operator/tensor/elemwise_binary_broadcast_op_basic.cc 的(第26行)从#include "./elemwise_binary_op.h"改成#include "./elemwise_binary_op-inl.h" [1]
然后就是在自己新建的build目录下cmake .. -DCMAKE _CUDA_ARCHITECTHRES=86开搞
如果cmake进入死循环(比如见鬼的ubuntu),需要在CMakeList.txt手工指定nvcc的路径

mxnet的优点:支持TF32格式,(于是比pytorch快,如果禁用TF32可以看到一点性能的下降(100%->86%))。

缺点:编译时候需要特别处理一下

2.一些意想不到的问题

在这里我会不定期更新一些神奇的问题,包括系统,包括软件,也包括训练经验。
并不会有任何书本知识
但这正是这一节宝贵的地方

2.1.玩游戏用的windows

请记住,windows对dll的支持相当不友好!

windows的设置保证了dll只能加载不能复用
你不能因为“我之前加载过这个dll”这一理由而获得任何性能上的优势
(相比之下,linux可以用sudo nvndia-smi -pm 1保留读取的dll(linux里面起到.dll作用的文件通常是.so)以避免多次加载同一个dll的开销,从而减少1.2.4里面初始化所需要的时间)

另外,我测得的windows下性能奇差无比,不确定原因在cuda还是pip版本本身就有问题

2.2.Ubuntu高温死机

如果直接用搜索引擎的话,你可能会发现,ubuntu相当适合深度学习——因为网上铺天盖地的ubuntu教程

——然而,我不确定你们有没有注意一个问题

如果高考满分750的话
搜索“高考700分经验”,我们只会得到几个状元的经验
搜索“高考600分经验”,我们会得到一批985211的同学的学习经验
搜索“高考500分经验”,我们得到的经验会略少,因为剩下的经验已经不再有竞争力
……
搜索“高考100分经验”?这玩意不是运气好点别作弊有手就行没手拿脚写字都能过线吗?

——于是,“高考100分”这个最简单的东西,最不容易找到有效信息

Remark 4.事实上,搜索结果数量并非我所说的那样……但我实在不想清洗数据了……

Manjaro做深度学习,真的是类似“750分的高考考100分”这样的难度

ubuntu,18.04,安装前要用modprobe或者别的什么把nouveau干掉(否则连安装系统都做不到……)19.10似乎有进步不需要干nouveau,20.04没试过毕竟我最开始计划Linux玩深度学习的时候20.04还没出
安装好ubuntu之后手动修改blacklist干掉nouveau,卸载nouveau相应驱动并安装nvidia闭源驱动,安装cuda,cudnn(又是PPA啊又是别的什么,虽然都是复制粘贴但总归看着麻烦)
如果你用的独显做视频输出,深度学习时候你的电脑可能会卡成PPT
如果你试图安装那个/usr杀手Bumbeeble……反正我为了装Bumbeeble重装了两三次系统……都是未知原因黑屏
训练,显卡温度过高,如果不管直接报错,如果管那只能对显卡限速(限速了还是比windows快……)

最后,因为ubuntu太不稳定,我换用了Manjaro

2.3.Gentoo……她太高贵,我配不上

这是我在有了Manjaro之后做的第二个实验
(毕竟一直眼馋gentoo,觉得Manjaro不够新)

但……Gentoo默认的gcc是9,而Manjaro可以用gcc 10,想用gcc 10需要各种调校
Gentoo默认不能打开-flto优化(因为会出问题),想用gentoo的lto需要非常非常小心

如果出了问题,Manjaro可以去论坛碰碰运气,Gentoo几乎只能使用搜索引擎
性能方面没测出Gentoo与Manjaro有什么差距
但不推荐Gentoo,那是大神的玩具,不是我们的

Gentoo太高贵,非CS专业的基本配不上她的

2.4.CUDA!

最重要的部分当然要放在最后讲。

有时候,换一个cuda版本或许会出现神奇的效果。

比如手工编译mxnet+cuda11,训练网络的时候,一个epoch花了1分13秒(1060显卡)
在windows上也是这个成绩(但windows加载mxnet特别特别慢)

但pip mxnet+cuda10训练网络,一个epoch只需要41秒
……有时候,性能x1.5所需要的只是换一个cuda

我不确定这是否只是个例
但大家其实可以测试一下
如果nvidia-smi显示90+%的GPU-Util,你可以试试将同一个脚本同时执行两次,打开两个训练进程

如果此时你发现这两个训练进程训练一个epoch所需时间的平均数,小于这个脚本平时训练两个epoch所需要的时间——这多半说明你的cuda有问题
——cuda的问题,可以换cuda,也可以换系统。

我建议大家换系统

(毕竟steam有proton,可以打开大部分windows游戏)

参考

  1. https://github.com/apache/incubator-mxnet/pull/18357/commits/86837a0b899813f255f4c954dfd99cd347e1aeea


下载1


在CVer公众号后台回复:PRML,即可下载758页《模式识别和机器学习》PRML电子书和源码该书是机器学习领域中的第一本教科书,全面涵盖了该领域重要的知识点。本书适用于机器学习、计算机视觉、自然语言处理、统计学、计算机科学、信号处理等方向。


PRML

下载2:CVPR /  ECCV 2020开源代码


在CVer公众号后台回复:CVPR2020,即可下载CVPR 2020代码开源的论文合集

在CVer公众号后台回复:ECCV2020,即可下载ECCV 2020代码开源的论文合集


重磅!CVer-论文写作与投稿交流群成立


扫码添加CVer助手,可申请加入CVer-论文写作与投稿 微信交流群,目前已满2400+人,旨在交流顶会(CVPR/ICCV/ECCV/NIPS/ICML/ICLR/AAAI等)、顶刊(IJCV/TPAMI/TIP等)、SCI、EI、中文核心等写作与投稿事宜。


同时也可申请加入CVer大群和细分方向技术群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。


一定要备注:研究方向+地点+学校/公司+昵称(如论文写作+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群


▲长按加微信群


▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

登录查看更多
0

相关内容

【知识图谱@EMNLP2020】Knowledge Graphs in NLP @ EMNLP 2020
专知会员服务
40+阅读 · 2020年11月22日
2700篇+机器学习推理文献大全(1996-2019),附下载
专知会员服务
29+阅读 · 2020年9月6日
专知会员服务
118+阅读 · 2020年7月22日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
专知会员服务
109+阅读 · 2020年3月12日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
107+阅读 · 2019年10月26日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
【初学者系列】tensorboard学习笔记
专知
7+阅读 · 2019年10月4日
GPU 显存不足怎么办?
AINLP
13+阅读 · 2019年8月16日
深度学习入门笔记
论智
7+阅读 · 2018年3月31日
keras系列︱深度学习五款常用的已训练模型
数据挖掘入门与实战
10+阅读 · 2018年3月27日
为个人深度学习机器选择合适的配置
AI研习社
3+阅读 · 2017年12月2日
6个实验教你用Torch玩转深度学习
七月在线实验室
6+阅读 · 2017年11月21日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Efficiently Embedding Dynamic Knowledge Graphs
Arxiv
14+阅读 · 2019年10月15日
Deep Randomized Ensembles for Metric Learning
Arxiv
5+阅读 · 2018年9月4日
Arxiv
15+阅读 · 2018年4月5日
Arxiv
7+阅读 · 2018年3月21日
VIP会员
相关VIP内容
【知识图谱@EMNLP2020】Knowledge Graphs in NLP @ EMNLP 2020
专知会员服务
40+阅读 · 2020年11月22日
2700篇+机器学习推理文献大全(1996-2019),附下载
专知会员服务
29+阅读 · 2020年9月6日
专知会员服务
118+阅读 · 2020年7月22日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
专知会员服务
109+阅读 · 2020年3月12日
【开源书】PyTorch深度学习起步,零基础入门(附pdf下载)
专知会员服务
107+阅读 · 2019年10月26日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
相关资讯
【初学者系列】tensorboard学习笔记
专知
7+阅读 · 2019年10月4日
GPU 显存不足怎么办?
AINLP
13+阅读 · 2019年8月16日
深度学习入门笔记
论智
7+阅读 · 2018年3月31日
keras系列︱深度学习五款常用的已训练模型
数据挖掘入门与实战
10+阅读 · 2018年3月27日
为个人深度学习机器选择合适的配置
AI研习社
3+阅读 · 2017年12月2日
6个实验教你用Torch玩转深度学习
七月在线实验室
6+阅读 · 2017年11月21日
10个深度学习软件的安装指南(附代码)
数据派THU
17+阅读 · 2017年11月18日
Top
微信扫码咨询专知VIP会员