GPU进行深度学习训练——新手指南

Posted qmh1114

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GPU进行深度学习训练——新手指南相关的知识,希望对你有一定的参考价值。

前言

最近在训练语义分割网络时决定使用GPU,本文记录新手在使用GPU时遇到的一些坑。想要在win10系统上配置GPU运行Pytorch代码可以考虑以下几种方式:

  1. 安装cuda,以及GPU版本的pytorch和torchvision,使用电脑自带的GPU进行网络训练;
  2. 远程连接实验室的服务器,通过IP、账号以及密码进行访问,可以在pycharm专业版以及vscode上利用SSH进行配置;
  3. 选用在线网址,利用线上提供的免费GPU。

需要注意的是,每种方式都有自己的优劣:
方案一最为方便,但是并非所有的电脑都可以使用,pytorch只支持算力超过3.0的GPU,比如我的电脑就无法配置。
方案二最为可靠,但是可能会出现访问超时的情况说明受到了对方服务器防火墙的阻止,一般需要远程VPN访问或者校园网连接(对于学生来说)。
方案三是成功率最高的方法,但是可能会出现免费GPU资源受限、文件无法实时保存容易丢失文件或者本地数据集上传困难等等问题,本文主要推荐谷歌在线平台Google Colab。

一、本机自带的cuda

首先需要在自己的电脑上安装CUDA、cuDNN以及GPU版本的pytorch和torchvision。(建议先考虑自己的电脑能否支持该操作,我的联想笔记本性能和算力就不够用)
参考:

  • CUDA、cuDNN的安装:GPU版pytorch安装
    命令行nvcc -V判断CUDA是否安装成功,输入 nvidai-smi输出显卡与驱动信息,正确说明安装成功。
  • 下载GPU版本下的pytorch和pytorchvision:GPU版本安装Pytorch教程最新方法
    命令行进入python环境,检测是否可用:
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.cuda.get_device_name(0)
'NVIDIA GeForce RTX 3070 Ti Laptop GPU'

有可能这时会出现False,考虑到之前CUDA已经配置成功那么大概率说明GPU的算力不够,pytorch无法支持。
(参考:“K1000M - CUDA driver initialization failed, you might not have a CUDA gpu”

二、使用SSH远程连接实验室的服务器

目前主流并且对ssh支持比较好的python编译器,主要是pycharm和vscode:

  • Pycharm专业版:可以通过学信网利用学生邮箱申请免费的pycharm专业版,网上有相关的教程,只有专业版才支持Tool - Deployment功能。具体连接方式参考下文:Pycharm通过ssh远程连接GPU服务器训练深度学习代码
  • VS Code:目前已经有很多相关教程,我不进行赘述。

需要注意的是,我在使用上述两种方式时均遇到了报错,显示访问超时,最后即使使用命令行进行访问依旧超时,防火墙确认关闭后也不行。经过一定的排查发现很可能是收到了对面服务器防火墙的阻止,参考:
首先找出出现故障的原因:SSH远程连接故障排错
我最后发现我在ping的时候就连接超时,经过一定的搜索我发现了这个网址:Why do I get Request Timed Out when trying to ping a computer?
最后得出结论是访问受到了对方服务器防火墙的阻止,在经过无数次的尝试都失败后,偶然发现是我的Clash设置了开机自启动一直没有关闭!!!!划重点!!!!使用之前一定要先确认自己的fq软件已经关闭,并且检查VPN能否正常使用,比如我原来就是灰色的(见下图),盲猜是IP相互覆盖,因为clash开了系统代理,自动帮我挂靠到了国外IP!!!!因为这个原因尝试了两三天说实话有点好笑,但是anyway我终于连接上实验室服务器了,可以愉快的跑代码了。后续应该有时间会更新如何在远程服务器上从零搭建自己的python环境。

三、使用线上免费的GPU资源

如果上面两种方式都不能成功那么只剩下最后的选择,使用线上的GPU资源。
可以参考这篇文章中的介绍:
推荐几个提供免费GPU计算资源的平台,助力你的AI之路
我主要就自己使用过的两个平台:Google Colab和百度的AI Studio飞桨进行介绍。

Google Colab

最开始是因为B站李沐老师动手学深度学习的课程接触到Google Colab。(顺便安利一波这个课程,非常良心!)跑一些简单的代码比较方便,首先下载谷歌Driver客户端,在桌面上会形成一个G硬盘,这样就可以进行本地数据集与在线代码的传输了,同时也可以直接下载文件到本地。运行代码时在google colab上挂靠到谷歌Driver上就行。
但是随着我的数据集和模型的增大,对GPU的要求越来越高,弊端很快显示出来:

  1. 硬盘最多只能支持15G的文件,而且删除文件的操作非常繁琐(我甚至出现了在线回收站越清空越占内存的情况,后来发现是所有想在回收站删掉的文件都又回到了回收站,问就是人都麻了)。同时上传数据非常缓慢,我计划上传一个10G左右的数据集,上传预计时间20小时,你是否有很多问号。。。
  2. GPU限制非常严重,经常莫名其妙就会把GPU停掉,谷歌有一些奇怪的限制规则导致我也搞不清理由。此外每次在GPU和CPU之间切换所有的代码都需要重新跑一遍,非常不方便。建议不跑GPU时就把连接断掉,不然想用的时候也用不了了。
  3. 收费版价格昂贵,一个月10美金,并且只支持visa卡和美国存储卡付款,支付宝微信啥的都不行,而且不fq也访问不了。

不过毕竟是免费的,咱们还是不要要求太高,关于如何解决上述列举的每一个问题我进行了一定的尝试,仅供参考,最好还是能使用实验室的GPU,这样最为一劳永逸。

  1. 回收站清理导致内存空间越占越大

打开并且登录谷歌账号然后执行脚本清除内存:清空回收站的脚本
结果如图:

  1. 加载大数据文件太慢,甚至超过十个小时

首先非常不建议直接将文件手动本地移动到Google Driver硬盘的方式,这样会造成很多未知问题,因为本地硬盘和远端服务器数据将会不匹配。这里推荐先本地压缩文件,然后将压缩包上传到云服务器中,进行在线解压。

在线解压部分代码可以参考:
本脚本由幽游地博客发布,出处:https://www.uud.me/qiwenzalun/colab-unzip-unrar.html
不要高兴的太早,因为到这儿大概率您会遇到另一个问题,当云盘使用率到达85%时,每次加载环境可能需要很久很久,久到可能就那么卡住了。也就是说数据最多就允许10G?那么能不能用一次删一次呢,至少我没有成功,回收站文件太多时上述的删除脚本就不再有效了,说白了还是卡住了。
有一个关于内存的解决方案是申请共享云盘,据说这样就可以无限白嫖了,但是会有被封号的风险,网上有很多教程笔者自己并没有尝试。另外关于无论是内存不够还是限制GPU的使用的问题其实最好的方式就是充值了,一个月大约七十,最麻烦的是需要visa卡,实在没办法就只能各显神通了。

百度飞桨

这是我昨天才了解到的平台,可以接受的数据集是60G,而且GPU资源也非常丰富,目前打算常驻在这儿了。等我这几天使用的体验,如果不错后面可能会继续分享使用的一些操作。

追更:原本以为飞桨是难得的良心平台,用了一下发现居然只能支持百度中间的paddle框架,GPU对torch、tensorflow这些全都禁了,还是继续尝试Google Colab吧,遇到的问题只能一个个解决了。

Kaggle

据师兄的推荐,Kaggle也是一个很不错的平台,但是我自己并没有尝试所以就不多做介绍了,如果Google Colab确实很受内存和GPU的限制那么大家可以考虑这个平台,最后祝愿所有人都能早日配置成功GPU,跑通代码啦!

本文所有引用到的文章,如果有任何侵权的地方可以私信我,我会立刻删除。
转载请联系我,绝对不是打广告哈,良心推荐。如果因为我个人知识的局限造成了错误,欢迎在评论区指正。

以上是关于GPU进行深度学习训练——新手指南的主要内容,如果未能解决你的问题,请参考以下文章

使用Floyd进行GPU深度学习训练

深度学习框架原理解析:百度飞桨的多GPU并行训练方案

笔记本深度学习训练散热实用指南

实战Google深度学习框架:TensorFlow计算加速

GPU信息查看以及确认Pytorch使用了GPU计算模块进行深度学习的训练

[人工智能-深度学习-41]:开发环境 - GPU进行训练安装与搭建(PytrochTensorFlowNvidia CUDA)详细过程