使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章