这篇文章主要和大家一起学习如何在AutoDL平台租服务器以及使用它的流程。
需要的工具:
Pycharm(专业版): 用于开发(注意一定要专业版)
Xshell: 用于操作服务器
AutoDL官网
在算力广场选择你需要的卡,然后选择环境,我这里选择的是pytorch1.1.0。
(学生党可以先申请学生认证),我已经租了一块2081Ti,进入到控制台,如图所示。红色区域是我们主要使用到的信息。
对于一个新服务器,ssh连接方式为:
ssh -p port user@hostname
其中:
port是端口号
user是你用户名
hostname是你要登录服务器的IP地址或者域名
如果每次都输入user@hostname有点太麻烦了,所以可以给服务器起一个别名,如server1,这样可以使用如下命令登录服务器:
ssh server1
此外,每次登录服务器我们还要输入密码,这也有点麻烦,我们可以配置免密登录,可以理解为让服务器记住密码。
创建文件 ~/.ssh/config
vim ~/.ssh/config
在config文件中配置服务器别名,如图所示,HostName你租的服务器的地址, User是用户,AutoDL默认给的是root用户, Host后是你想起的别名,我这里起的是autodl
配置好以后,输入
ssh -p 24640 autodl
就可以登录服务器了,注意端口号要使用你自己的。但是还是需要输入密码,接下来配置免密登录。
1 .创建密钥
ssh-keygen
回车回车回车…,执行结束后,~/.ssh/目录下会多两个文件:
id_rsa:私钥
id_rsa.pub:公钥
之后想免密码登录哪个服务器,就将公钥传给哪个服务器。
2. 复制公钥
cat ~/.ssh/id_rsa.pub
如图所示,复制公钥(ctrl+insert复制)。
3. 将该公钥复制到我们租的服务器的~/.ssh/authorized_keys文件中。
首先使用密码登录到服务器里,然后执行
vim ~/.ssh/authorized_keys
然后将你的公钥复制进去(shift+insert键)。
保存退出,然后退出服务器,这时我们只需要在本地输入
ssh -p 24640 autodl
就能连接到我们租的服务器中了。
打开Xshell 7,在会话管理器处右键新建一个新会话,将我们租的服务器参数填入。
如图所示,名称是你准备给这个会话起的名称,主机填入你租的服务器的地址,填入端口号。
然后一路确定即可,中间需要你输入一次密码。会话新建完成后,双击就可以自动连接入服务器。
ps: Xshell在windows还是比较方便的,但ubuntu里没有Xshell。
这是我们的最终目的,对吧,在本地开发,使用服务器执行程序。
首先Pycharm只有专业版支持SSH连接,所以,一定要下载专业版本的Pycharm。
本次我们以一个项目为例来讲解。
地址:https://pan.baidu.com/s/1c9UDWQWkebuZzen8Z6OF1Q(3n58)
这里面只有一个文件,实现了一个简单的GAN,可以生成MNIST数据集。
1 .配置该项目的解释器为服务器端
文件→设置→项目→Project Interpreter→add
选择SSH Interpreter,在右边的窗口中配置你的服务器名,端口名和用户名,然后next,
如果你没有配置步骤2免密登录的话,可能会提示让你输入一次密码,我这里配置了免密登录,所以直接跳到了这里:
选择你要使用服务器的哪个python解释器,可以和我的一样。Sync folders是配置你的本地项目文件夹对应到服务器的哪个文件夹,我直接使用的默认。红色区域是选择是否将本地项目的文件自动上传到服务器端,也就是你每次改了本地的代码,Pycharm就会自动将这些修改添加到服务器端。我的建议是先不选择,这个是后续可以再设置的,你如果要选择,建议先检查一下项目里有没有放数据集,因为有大型数据集的话,Pycharm也会上传到服务器端,这非常浪费时间。建议将数据集和项目文件代码分离,数据集用scp代码上传。
点击确定后,等待pycharm连接服务器,连接成功后,去服务器的tmp/文件夹,看是否将项目映射到了tmp/pycharm_project_303处。
使用Xshell 7连接服务器
cd /tmp/
ls
如图所示,我这里已经有了pycharm_project_303项目,接下来我们运行该项目,看是否pycharm会使用服务器端的python解释器
可以看到,pycharm使用了服务器端的python,配置成功。
我们更多的时候不会直接点击run按钮,因为我们要配置许多输入参数。一般是使用python main.py方式运行。
我们可以使用X shell7或者pycharm的terminal端ssh登录服务器。我上文已经说明了X shell7如何连接,这里我再以pycharm说明一下。
我们在pycharm下方的terminal处,输入:
ssh -p 24640 autodl
登录服务器
然后切到/tmp/pycharm_project_303处
cd /tmp/pycharm_peoject_303
最后使用命令python main.py执行项目
python main.py
通过前面的配置,我们已经实现了在本地端写代码,然后在服务器端执行代码。现在我们需要学习一下如何同步本地端与服务器端的代码,确保在本地端修改代码后,服务器端也能得到修改。
首先,我们在本地端新建一个test.py文件,然后里面输入两行python程序
import torch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)
然后我们点击运行test.py文件,会发现,服务器端会报错,提示没有这个文件。我们需要手动上传这个文件,待会儿会讲解如何配置pycharm自动上传文件。
右键项目名→Deployment→Upload to→选择我们的服务器即可
如果只想上传某个文件,就右键某个文件。这时我们再执行test.py文件,可以发现已经执行成功。
这个方式能免于每次修改文件后的手动上传文件方式,但是我建议这样做的话一定要把数据和项目分离,即
├── your project
├── your data
│ ├── data1
│ │ ├── Annotations
│ │ └── JPEGImages
│ └── data2
│ │ ├── Annotations
│ │ └── JPEGImages
确保你的项目里只有代码文件和少量的图像文件,而不是几十个G的数据,对于大型数据,不建议使用pycharm自动上传,而应该先把数据压缩,再使用scp命令上传。
配置pycharm自动上传文件方式:
文件→设置→(构建、执行、部署)deployment→Deplotment→Options→将upload changed files automatically to the default server 设置为Always