使用HPC运算等相关知识总结

最近,在做轨迹数据的深度学习工作,在处理轨迹数据中,由于待处理的数据量非常大,用自己的PC是不可能解决的,因此考虑将作业移交到学校的超算平台(HPC)上去计算。由于第一次使用,期间调试和运行有不少的错误,记录以下自己的心得。

pbs脚本写作

由于HPC采取的是计算节点和登陆节点是分开的模式,要想充分发挥HPC的运算能力,HPC采取的是资源请求的方式。事先需要对请求多少节点,每个节点的CPU,以及内存等需要先做出说明,再提交到HPC。一般有两种方式提交资源请求:一,脚本写作的方式。二,命令行提交方式。一般来说在本地写好脚本,在提交的方式方便调试和记录,因此详细说明以下脚本的方式提交作业。

pbs脚本的主要内容

pbs脚本主要包含以下几个方面的内容:

  1. shell说明语句:用来指定用户需要的是哪种shell, 一般常用的是#!/bin/bash
  2. pbs说明语句:用于用于请求运行任务的时候所需的资源或设置相关的任务属性,后文代码详细说明
  3. 任务程序或命令:需要执行的应用程序或者系统命令。
#!/bin/bash -l
# 指定执行命令的shell

# 1. Force bash as the executing shell.
#$ -S /bin/bash

# 2. Request ten minutes of wallclock time (format hours:minutes:seconds).
#$ -l h_rt=0:40:0
#请求的时间

# 3. Request 1 gigabyte of RAM (must be an integer)
#$ -l mem=4G
#请求的内存

# 4. Request 15 gigabyte of TMPDIR space (default is 10 GB)
#$ -l tmpfs=15G
#临时计算空间大小,由于UCL的HPC 平台 Legion运算的时候是
#在名叫TMPDIR的临时空间内运算的,因此要考虑到申请临时空间的大小

# 5. Set the name of the job.
#$ -N AIS_trajectory_process
#设置计算任务的名称

# 6. Set the working directory to somewhere in your scratch space.  This is
# a necessary step with the upgraded software stack as compute nodes cannot
# write to $HOME.
#$ -wd /home/ucesxc0/Scratch/output/ais_data_process
#设置工作目录,Legion给每个用户的目录下有一个文件夹Scratch,
#这个文件夹拥有读写权限,用于任务的读写操作。
#一般在计算完成后,需要将文件转存到用户目录下。

#7. run the application
module load python3/recommended 
#程序是在python3.6环境下编写的,
#需要用module模块加载python环境,不然pandas, numpy等不可以使用,出现import error错误提示
./address_datetime.py
#这是需要运行的脚本,几个注意事项在后文说明

这样,一个pbs脚本就协作完成了,接下来就登陆HPC进行相关操作的设置了。上传pbs脚本我们使用的是qsub ais_trajectory.sh命令。
当上传完脚本后,我们可以查询现在脚本的状态,使用qstat命令。
任务上传状态1
图1 任务上传状态
图中state表示的是任务状态,qw表示任务正在排队,等待被执行。常见的任务状态列表如下:

状态 描述
B 用于任务向量,表示任务向量已经开始执行
E 任务在运行后退出
H 任务被服务器或者用户,管理员阻塞
Q 任务正在排队中,等待被调度执行
R 任务正在被执行
S 任务被服务器挂起,由于更高优先级的任务需要当前资源
T 任务被转移到其他节点执行
U 服务器繁忙,任务被挂起
W 任务在等待它所请求的执行时间到来
X 用于子任务,表示子任务执行完成

任务状态2
图2 任务状态表示正在被执行。
一般常见的状态就图片这两种情况。
任务删除使用命令qdel job_id

一些注意事项

在调试程序中经常出现如下错误提示:

  1. ImportError: No module named pandas
    主要问题在于,HPC计算节点的运行环境和登陆节点设置的运行环境不一致造成的,这种情况,一般都需要在pbs脚本中加载module load python3/recommended 模块,提示什么错误添加对应的解决模块。
  2. SyntaxError: Non-ASCII character '\xe2' in file
    在程序中存在非ASCII字符,由于我的程序中添加了中文注释等,所以会报这个错误,解决方法是在程序开头申明: # -*- coding: utf-8 -*
  3. #!/usr/bin/python3 和 #!/usr/bin/env python3
    一般在python开头需要申明使用的是什么python解释器,而这个地方在Linux中系统内置的python解释器是位于/usr/bin这个文件目录下的,而HPC中由于我们需要加载新的python环境,使用#!/usr/bin/python3会容易报错,因此我们一般使用#!/usr/bin/env python3则会从PATH环境变量中去寻找解释器的安装位置,使用这个更加灵活和避免错误。
  4. ./address_datetime.py: Permission denied
    使用chmod 777 address_datetime.py赋予更高的执行权限即可。
    经过两天的调试,也看了很多的资料,将自己遇到的坑总结一下。以及自己搜索看到相关资料链接如下,希望能帮助到大家:
    根特大学HPC使用介绍
    国家高性能计算中心(西安)-如何使用pbs提交作业
    Introduction to the Message Passing Interface (MPI)
    MPI Tutorial Introduction
    Sample PBS script for serial job
    Sample PBS Batch Script
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章