955 字
5 分钟
使用HPC遇到的问题
2023-09-09

​为了使用 HPC,即学校的服务器跑代码,我遇到了诸多困难,在这个过程中,感谢友人 C 的帮助,最终得以成功,下面讲简单阐述这个过程中遇到的问题。(注意我使用的是 Windows11 系统)

1 Linux 基本命令及理解#

​ 简单来说,Linux 指令基本是通过可执行文件 + 参数这种形式构成。

​ 而第一个可执行文件通常情况下,是需要告诉 shell 可执行文件在哪里,因此需要加上相应的路径。而如果我们配置了环境变量,那么 shell 首先会在当前目录下查找可执行文件,然后会依次在环境变量的路径下查找可执行文件。

2 连接远程服务器#

2.1 通过 ssh 命令连接远程服务器#

​ 这是第一步。首先需要连接上相应的服务器。

​ 在 Windows11 系统下,由于自带了 OpenSSH,所以我们可以直接在 Power Shell 中采用ssh username@target_ip进行连接。

​ 正常情况下,这样连接需要输入密码,反复这样操作是相当麻烦的。因此,我们可以通过配置密钥文件实现免密连接。具体操作如下:

  1. 在命令行中输入ssh-keygen -t rsa。这样会在C:/Users/username/.ssh/目录下生成id_rsa以及id_rsa.pub文件,第一个文件是我们的私钥,第二个是公钥。

  2. 将公钥拷贝到目标服务器~/.ssh/authorized_keys/目录(用户目录)下。采用scp c:/users/…/.ssh/id_rsa.pub username@target_ip:/~/.ssh/authorized_keys命令。

  3. 直接采用 ssh 命令连接目标服务器即可。

2.2 设置跳板机#

​ 由于连接该服务器需要先进入内网,所以需要先连接跳板机,然后再连接该服务器才行。

​ 常见的方式是 ssh -J username@jump_ip username@target_ip

​ 不过这样连接会很麻烦,因此需要设置配置文件。

​ 找到C:/Users/username/.ssh/config用记事本打开(没有就新建)。然后可以采用如下格式设置。

Host JumpProxy
  HostName
  User
  Port

Host targetServer
  HostName
  User
  Port
  ProxyJumpy JumpProxy

​ 然后直接采用ssh targetServer即可。

2.3 ssh 连接超时中断#

​ 最后,还有一个问题:ssh 超时,连接中断。即连接上目标服务器后,如果一段时间没有操作,那么连接就会中断。关于这点,我们直接在上面config配置文件中,targetProxy 后加上ServerAliveInterval 60即可。这样 ssh 会每 60 秒发送一个 KeepAlive 请求,保证终端不会因为超时空闲而断开连接。

3 提交任务#

​ 该服务器上使用 TorquePBS 命令进行提交任务。

​ 对于用时较短的任务,可以使用交互式操作。通过qsub -I再加上其他参数,例如-l walltime=30:00-l nodes=1:vortex:ppn=8等,然后就可以分配到相应的节点直接操作即可。

​ 对于用时较长的任务,需要使用 batch system。此时,需要编写相应的脚本。相关操作命令如下

touch script #创建一个新的脚本
vim script #进行编辑,内容如下
cat script #可查看脚本的内容

qsub script #提交脚本
qstat #查询所有job
qsu #查询当前用户job
qdel job_ID #移除job

​ 脚本内容如下所示:

#!/bin/tcsh
#PBS -N job_name
#PBS -l nodes=1:vortex:ppn=12
#PBS -l walltime=1:00:00
#PBS -j oe
cd #PBS_O_WORKDIR
module add anaconda3
conda activate pytorch
python ~.py

此处需要注意,#PBS -l nodes=1:vortex:ppn=12中 vortex 指定节点类型,此处应设置与 ssh 连接的服务器节点类型一致,否则会存在添加 module 失败的问题;cd #PBS_O_WORKDIR可以让服务器 cd 到用户提交 job 的路径;而module add anaconda3添加模块后,环境变量中才会有 anaconda,在第 8 行中才可以直接使用 conda 命令,否则需要采用绝对路径。

使用HPC遇到的问题
https://fuwari.vercel.app/posts/hpc/
作者
pride7
发布于
2023-09-09
许可协议
CC BY-NC-SA 4.0