天天看點

使用HPC運算等相關知識總結pbs腳本寫作一些注意事項

最近,在做軌迹資料的深度學習工作,在處理軌迹資料中,由于待處理的資料量非常大,用自己的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

指令。

使用HPC運算等相關知識總結pbs腳本寫作一些注意事項

圖1 任務上傳狀态

圖中state表示的是任務狀态,qw表示任務正在排隊,等待被執行。常見的任務狀态清單如下:

狀态 描述
B 用于任務向量,表示任務向量已經開始執行
E 任務在運作後退出
H 任務被伺服器或者使用者,管理者阻塞
Q 任務正在排隊中,等待被排程執行
R 任務正在被執行
S 任務被伺服器挂起,由于更高優先級的任務需要目前資源
T 任務被轉移到其他節點執行
U 伺服器繁忙,任務被挂起
W 任務在等待它所請求的執行時間到來
X 用于子任務,表示子任務執行完成

關于lustre系統的qstat查詢狀态的具體解釋如下圖所示:

使用HPC運算等相關知識總結pbs腳本寫作一些注意事項
使用HPC運算等相關知識總結pbs腳本寫作一些注意事項

圖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

繼續閱讀