失踪人口回归,本次主要解决一下电脑无GPU或者GPU算力不够,但是需要进行神经网络训练的情况。
目录
创建一个新的Pycharm项目(如果你的代码在服务器上,你需要用一个新的纯Python项目同步服务器上的项目,那么进行这一步)
直接利用已有的Python项目(我这边需要将电脑的代码上传打AutoDL,所以我直接使用已有的项目,而且如果你本地和服务器的匹配的,你也可以用这个下载服务器的,只是进行本地项目和远程项目的同步)
前言
本文主要涉及GPU租用以及Pycharm中SSH、SFTP连接远程服务器
会例举一些自己尝试过的GPU租用平台以及后期采用的,还有Pycharm中SSH、SFTP连接远程服务器编辑调试全面手把手教程。
一、GPU租用
对于学生,GPU算力从哪里来,目前途径只有一下几种:
- 自己购买显卡或者几个合资购买共同使用,但是目前的显卡价格以及后期日常费用,相对于租用算力来说,前期需要很大的投入,对于某些只是暂时用到深度学习的人来说很不现实。
- 使用老师实验室中的服务器,或者使用学校的服务器(大部分学校的服务器也已经开始收费了,而且有时要排队),而且大部分要求进入到实验室使用,在某些时候可能很不方便。如果说实验室有腾讯云GPU服务器这种,当我没说,但是这种科研任务紧的时候也会优先考虑科研任务。
- GPU租用,相对于第一种自己购买显卡,灵活性更高,但是只适用于短期。
因为离开实验室,可能需要用到比较大的GPU算力,只是偶尔比较急的情况,所以最近自己试了下GPU租用的方法。以下列举了一些尝试的平台:
- AutoDL,好的东西就不压轴了,这个是我目前觉得最实惠的平台,也是自己主推的。
链接:AutoDL-品质GPU租用平台-租GPU就上AutoDL
学生的话可以进行学生认证,具体可以翻看帮助文档,注册一开始就会赠送一个月的炼丹会员三级。
- GPU云服务器 特惠专场 ,因为其他的都比较类似,所以我先介绍这个比较特殊的,这是租用服务器,但是我们选择的是比较便宜的一种方法------竞价实例。当然便宜存在一定的坏处。自己也没有过多的尝试,因为GPU云服务器还是挺费钱的。
链接:GPU云服务器 特惠专场
可以先了解一下竞价实例。链接:云服务器 竞价实例 - 产品简介 - 文档中心 - 腾讯云
不推荐没有配置和使用服务器经验的使用,还有注意以下:
竞价实例(Spot)是云服务器 CVM 的一种新实例运作模式,它最核心的特点是折扣售卖和系统中断机制,即您可以以一定幅度的折扣购买实例,但同时系统可能会自动回收这些折扣售卖的实例。当您购买并获得一个竞价实例后,它的使用和按量计费的 CVM 实例基本毫无区别,包括控制台操作、远程登录、服务部署、关联 VPC 等。
后续操作慎重。如果你需要配置非常高,例如以下这种:
我记得好像是比AutoDL便宜的,可以先用比较便宜的试试手
这个就介绍这么多了,有使用的可以跟我分享分享[cry].
- 极链AI云,没怎么用过[cry].后期参考以下这边的可视化界面,因为之前Autodl的可视化界面没有调好[cry].
链接:https://cloud.videojj.com/auth/register?inviter=31381&activityChannel=student_invite
Featurize,这个也没怎么用过[cry].
链接:Featurize
恒源智享云,这个也没怎么用过[cry].
链接:恒源云_GPUSHARE-恒源智享云
- 其他一些链接:
北京超算中心免费使用申请单
目前哪里可以租用到GPU服务器? - 知乎
当前有哪些用于深度学习的低成本的算力(GPU)租借平台? - 知乎
二、AutoDL算力租用
1.创建实例
注册后进入控制台,在我的实例菜单下,点击租用新实例:
在租用实例页面:选择计费方式,选择合适的主机,选择要创建实例中的GPU数量,选择镜像(内置了不同的深度学习框架),最后创建即可
创建完成后等待开机,今后主要用到的操作入口见截图中
如果是新手,暂时我们可以将实例进行关机,在更多中选择无卡模式开机。(无卡模式配置环境,传输文件真的很慢,我后悔了)
2.SSH远程连接
如果您是Windows用户,默认Windows系统未安装SSH客户端,推荐下载使用Cmder工具,免安装解压即用。或者使用XShell工具更佳。
开机实例后,找到SSH登录指令
复制您的SSH登录指令,这里演示使用的是:ssh -p 35394 root@120.92.100.9
在
ssh -p 35394 root@120.92.100.9
命令中, 各个参数的含义为:用户名:root
HOST: 120.92.100.9(或域名形式的如region-1.autodl.com)
端口号:35394
在您的本地终端中输入该命令,输入密码进行登录
查看GPU占用情况:nvidia-smi
三、Pycharm中SSH、SFTP连接远程服务器编辑调试
我目前的需求是将代码部署在服务器上,使用Pycharm的SSH连接Linux服务器,用Pycharm的友好界面远程运行服务器上的Python项目,并且可以对其进行修改。经过查阅了大量的资料,并希望把整个的流程以及错误处理描述的比较全面。
注意:本文章适用于Pycharm的专业版,免费的社区版本没有远程连接的功能。
SFTP配置
首先第一步来配置SFTP,很多教程在这一步先来设置SSH,SSH设置比较简单,但是Pycharm在设置完SSH后只能担当XShell等软件的角色,并不能满足我们刚才提出的需求(比如说要查看整个项目文件列表并把Python文件展示在Pycharm中),所以第一步我们先来设置SFTP。
创建一个新的Pycharm项目(如果你的代码在服务器上,你需要用一个新的纯Python项目同步服务器上的项目,那么进行这一步)
在最开始做这件事的时候我并不知道本地项目和远程项目的关系,为了事实上Pycharm在这里把本地的项目和远程的项目做了一个映射的关系,通过这些配置,我们既可以把服务器项目的文件拉取到本地项目中,也可以把本地项目的文件上传到服务器项目中,所以为了方便演示,我们创建一个新的项目,这个项目我把他叫做Pycharm_Remote。
如图所示,我们在本地创建一个最基本的纯Python项目,如果您不清楚具体的过程,可以在搜索引擎中搜索Pycharm 创建项目
关键字来查找教程。创建项目中使用的Python环境可以先设置为我们本地的Python环境。
直接利用已有的Python项目(我这边需要将电脑的代码上传打AutoDL,所以我直接使用已有的项目,而且如果你本地和服务器的匹配的,你也可以用这个下载服务器的,只是进行本地项目和远程项目的同步)
已有项目中使用的Python环境是我们本地的Python环境
本地环境有显卡,但是算力不够[cry].
创建SFTP相关配置
在导航栏部分找到Tools→Deployment→Configuration
在弹出的窗口中点击左上角加号,选择SFTP
输入你想给这个链接起的名字
点击OK,在新出来的页面中创建一个新的SSH连接,点击三个点,然后点击加号,输入一个新的SSH连接
其中Visible only for this project指的是是否在不同项目中共享这个SFTP配置,可以按需开启,在SSH设置中输入服务器的IP地址,以及相应的用户名,就如同在XShell中连接服务器那样。
登陆指令如下
我们可以测试连接,测试成功后点击OK后回到配置SFTP的界面
如果是使用Windows连接Linux的话,最好可以把Advanced中的编码从GBK改成UTF-8,这样在报错的时候如果服务器那边返回的是中文的错误,Windows这边就不会显示乱码而找不到原因所在(血泪教训),而且如果遇到中文数据文件什么的与服务器也好沟通。
接下来我们配置比较关键的一个环节,需要配置Root Path,这个字段的意思是远程服务器的根路径,比如说我把他设置为/home/a/,那就意味着我们把a这个文件夹当做了Pycharm所检测的根路径,将来的项目必须在a这个文件夹下面Pycharm才能检测得到。这里还有一个Autodetect的选项,他会自动选择主目录下的用户文件夹作为Root Path,如/home/xiaoming/,大家按需所取即可。
我们使用的AutoDL平台,在Root Path中我们参考下官方的指导文件。
链接如下:AutoDL帮助文档
其中注意如下:
配置同步目录,意思是本地项目和远程实例中的哪个目录进行关联,这里设置为数据盘的地址:/root/autodl-tmp
点击结束,如果配置均无误PyCharm会有一小会配置过程,完成后即可远程开发。
如上图所示,我们配置了SFTP的所有Connection部分,接下来来到Mapping部分,这部分的用处是将我们本地的文件夹和服务器上的项目文件夹联系映射起来,所以这个地方我们要填入的是我们的项目文件夹,而这里要注意的是要填入相对于Root Path的路径,而不是绝对路径,比如说我在Root Path部分填入的路径是/root/autodl-tmp,而我真正的项目的绝对路径是/root/autodl-tmp/dyl_bysj,这时候我在Mapping的Deployment Path中填入的就是/dyl_bysj,第一行的Local Path默认是我们的项目文件夹所在的本地目录。
如果是新服务器,先到 /root/autodl-tmp 目录下
创建文件夹 dyl_bysj
输入命令:mkdir dyl_bysj,创建文件夹dyl_bysj ,再次查看列表,可以看到多了一个文件夹 dyl_bysj
mkdir dyl_bysj
点击OK,至此我们的SFTP配置就结束了
这时我们可以在导航栏找到Tools→Deployment→Browse Remote Host,在右边就会出现刚才设置的Root Path下的所有文件。(如没有出现,注意下面有解决方法)
这边服务器是新开的,所以只有文件夹,我们可以看看有文件的状况(可以先跳过有文件展示)
我们选择相应的文件,双击就可以展现出来了
这个时候我们可以对其进行编辑,在导航栏找到Tools→Deployment→Automatic Upload,打开,这时候我们对文件的更改就会自动上传到服务器上
这时我们已经可以对文件进行编辑了,也可以看到了服务器上的项目文件,其本质我认为是在Pycharm端配置了一个SFTP的传输工具,可是却不能运行,原因是没有配置Python的远程解释器。
我们先将本地代码上传到服务器项目中
首先在本地Project中要选择上传的文件,很重要(会影响Tools→Deployment出现的栏目是否可选,影响更新的是哪个文件)。我们点击Projcet下想要更新的,使选中(会有篮框)
在导航栏找到Tools→Deployment→Upload to...(这个不可选就看上面强调的)
注意以下,可能存在其他SFTP,要提防
注意名字与刚才是否一致,不一致就选Upload to...
当然这边还有要主要的
选择我们的通道(根据你自己设置的)
等待上传结束,注意此时还没有配置解释器(这边上传还是比较慢的,后续会推荐一个别的方法,平台系统的可视化界面提供的那个上传也很慢,也有可能是我这边上传速度比较慢)
上传成功后,在Remote Host中查看,先刷新一下
然后查看文件夹
检查一下路径是否对应
无误后,这时我们已经可以对文件进行编辑了,也可以看到了服务器上的项目文件,其本质我认为是在Pycharm端配置了一个SFTP的传输工具,可是却不能运行,原因是没有配置Python的远程解释器。如果一切正常,可以进行 配置远程解释器
这四个可以自行猜测啥意思,也可以百度
如果没有出现或者误关了
在创建好SFTP配置后,我们想查看服务器文件的时候会发现右侧的Remote Host会显示Nothing to show,这时候不要担心,如果目录没有配置错误就相信自己,把项目关掉然后重新打开,此时再查看服务器的文件就可以正常显示了。
配置远程解释器
本节的前提条件是服务器上有正常的可以运行的Python环境。(AutoDL已有环境)
类似于添加Pycharm的解释器环境,在Setting中找到Python Interpreter,点击右上方的小齿轮,选择Add。
在新弹出来的窗口中选择SSH Interpreter,因为我们刚才配置SFTP的时候已经配置了SSH了,这时候我们就选择第二个选项Existing server configuration,选择我们刚才配置的SSH即可。
不是AutoDL的情况下
点击Next,在这一步我们需要让Pycharm找到服务器的Python在哪个地方,并且设置扫描的文件夹。如果不清楚服务器的Python安装在哪个地方,可以使用
which python
命令来查找所使用的Python位置,我这里使用的是Anaconda中的虚拟环境,记得要查看是否是软连接,比如说我这个找到的Python就是个软连接,其真实文件指向的是python3.9,可以使用ls -l
命令查看其连接指向
点击Next,我们在Interpreter中填入上述的Python路径,下面那个选项按需勾选(见 目录中 需注意的问题),其意思是使用Sudo权限来运行代码。(AutoDL拿不到sudo权限)
Interpreter配置路径见 链接:AutoDL帮助文档
接下来我们要设置本地与远程同步的项目文件夹,他默认是放在一个/tmp/pycharm_project_283
这种路径,这个路径是临时的,将来很容易出点问题就找不到,这里需要把这个路径和刚才我们在SFTP配置中Mapping的路径(也就是映射到的服务器端的项目文件夹)设置的一样。
与之前设置一致就行,然后点OK
点击Finish,完成配置,这时我们的远程Python解释器就成功配置好了。
点击OK,这时我们整个项目就配置上了远程的Python解释器,(在这里还有一点需要注意的,见需注意的问题),就可以运行文件了,但是到这里还没有结束,几乎所有的教程到这里都结束了,说只要运行就可以了,但是实际上当你打开一个服务器的文件想要运行的时候,你会发现出现了这样的错误:
打开一个服务器的文件
报错 [Errno 2] No such file or directory
[Errno 2] No such file or directory
这时候你会很无奈,为什么按照上面的配置仔细配好了,他却找不到运行的文件呢?无奈的你去各大网站搜索教程,得到的无非是这几类答案:
- 路径不对,所设置的解释器的路径和Mapping的路径不一致。但是很显然多次检查后,这两个路径在我们的项目中是一致的。
- 设置了多个Mapping,导致冲突。在本项目中我们并没有设置多个Mapping。
- Upload 的功能配置出现问题,更改Automatic Upload选项为on explicit save,原因是修改后没有同步而导致的找不到文件。但是设置之后并没有作用。
其实真正的原因是:我们搞错了需求与实现,通过这种方法Pycharm只能实现将服务器上的文件Download下来到本地,在本地进行修改,同时修改会上传到服务器上,运行的时候是使用远程解释器运行。
使用方法
在服务器的项目中现在有一个test.py
文件,路径是/root/autodl-tmp/dyl_bysj/test.py
,文件中的内容如下图所示,注意标红的位置。
此时我们右键运行该文件,会报错[Errno 2] No such file or directory
。
这时候我们对在右侧服务器文件中找到test.py
,把他下载到本地来。
这时候我们会发现左侧本地项目文件夹下多了一个test.py
,打开这个文件,注意红圈中的不同。
文件仍然与服务器上的test.py
内容相同,只不过下载到了本地,这时候再用相同的方式运行,会发现出现结果了。
这时候如果我们对本地的test.py
更改内容,再运行的话,同样可以出来结果。我们可以注意下图中绿圈圈出来的地方,可以看出我们是成功运行了服务器上的文件,而不是运行的本地的文件
这时候我们点开服务器上的test.py
,发现内容已经同步到服务器上,本地端和服务端的两个文件一模一样。
至此我们完成了整个功能的使用流程,如果将来需要更换远程的项目或者本地的项目,重新设置一下Mapping就可以了
需要注意的问题
在添加远程Python Interpreter的时候,有一个选项来确认是否使用Sudo来运行代码,很多教程这时会无脑告诉你要把他勾选上,但是不告诉你为什么,所以记得如果你的服务器不是自己做主的话,一定不要勾选这个,因为你都获得不到Sudo权限,更何况Pycharm了,他会报错Can’t obtain python version,这时候如果你刚才设置编码格式为GBK的时候,就会出现一堆报错乱码,很不容易找到问题所在。
在成功配置好Python解释器后,在这个解释器的Configuration中,我们可以看到其实在添加这个远程Python解释器后,他是自动配置了一个SFTP的,下图中画红圈的地方其实有两个,其中一个是我们刚才配置的test,另一个是这个解释器自动配置的SFTP(这里我把那个删除了,使用的是test),其自动配置的SFTP的路径和Mapping都是默认的,还需要像我们刚才那样设置,注意这里不要用错。
总结
综上,其实我们的需求和实际的实现是有所出入的,所以才导致了各种问题的出现。我想要的需求是直接在服务器上编辑并运行代码,而不是像现在这样在本地编辑代码后上传到服务器运行,我们可以清晰的看到Pycharm的思路是这样的:
- 从服务器上下载代码到本地,在本地进行编辑
- 对本地文件点击运行
- 将修改后的本地文件自动上传到服务器上,调用远程Python解释器来运行服务器文件
所以我目前并不清楚Pycharm是否可以做到不从服务器上下载文件,直接打开服务器的代码进行编辑运行,为什么要多出来下载这一步呢?或许是为了本地与服务器项目的同步开发?印象中VSCode似乎能实现这个功能。(后面会进行实验)
可以看出,Pycharm的Deployment和解释器其实是两个分隔的模块,配置Deployment时并不会配置远程解释器,只能做到阅读和编辑远程代码,而配置解释器的时候会自动生成一个新的SFTP配置,这给第一次配置的人增添了理解难度。所以如果想将流程简单化的话,可以先不设置SFTP配置,直接添加远程Python解释器,然后使用它自动做好的SFTP配置,对其设置Root Path和Mapping。
最后还有一个问题,为什么同样是在服务器运行代码,直接点开服务器的代码运行就会找不到文件,而本地代码上传到服务器后就能找到文件呢?
我的猜想是这样:虽然同样是在服务器运行代码,但是为了简化我们自己的操作,Pycharm把寻找本地文件→上传至服务器→运行服务器代码这三步全部合成在运行这一步上,这就导致我们如果直接运行服务器代码,因为这个代码是服务器上的,所以Pycharm在本地找不到这个文件,就会报错,后面的步骤自然也执行不了了。
最后测试一下租用的3060显卡