NYCU CSIT HPC service

Access login node

ssh <username>@hpclogin[01-03].cs.nycu.edu.tw

Setup environment

Note

  • 若課程有任何軟體需求,請助教來信告知
  • 建議使用 bash

若助教有先告知課程軟體需求,會根據需求產生對應套件環境。

Example

以「平行程式設計」課程作範例,課程環境名稱為 pp

本 HPC 服務使用 lmod 來管理軟體環境,使用者可以透過 module 指令來載入課程環境。

$ module load pp

想退出環境可以使用:

$ module unload pp

重新登入之後,本來啟用的環境不會保留,如果想要每次登入都自動載入環境,可以將 module load pp 加入到 .bashrc 中。

Submit job

Caution

  • 無法直接使用 srun 指令是正常的,請使用 sbatch 指令用腳本發送 job
  • 須確保程式中讀寫的檔案以及程式本身在 NFS 中,否則會執行異常或看不到結果

To simply put, just prepare your job script, then use sbatch <script name>.sh to submit job

Examples

Submit a MPI job

  1. 準備好程式
  • mpi.cpp
#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
    MPI_Init(NULL, NULL);

    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);

    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);

    printf("Hello world from processor %s, rank %d out of %d processors\n",
           processor_name, world_rank, world_size);

    MPI_Finalize();
}
  1. 在 Login node 上編譯
user@login01:~$ mpic++ mpi.cpp
  1. 準備好 sbatch script,在 Login node 上發 job
user@login01:~$ sbatch test.sh
  • test.sh
#!/bin/bash
#SBATCH -A general              # Account name (可透過 sshare 查看)
#SBATCH -p class_nodes          # Partition name (可透過 sinfo 查看 partition)
#SBATCH -n 3                   # Number of MPI tasks (i.e. processes)
#SBATCH -c 1                     # Number of cores per MPI task
#SBATCH -N 3                     # Maximum number of nodes to be allocated
#SBATCH -t 00:05:00             # (--time) Wall time limit (days-hrs:min:sec)
# 還有很多其他參數,可參考官方文件(https://slurm.schedmd.com/sbatch.html)

export PMIX_MCA_psec="^munge"

srun --mpi=pmix ./a.out
  1. 可以透過 squeue 查看 job 排隊/運行狀況,或是用 sacct 查看以往的 job (包含剛剛發出的)

  2. 完成後,可以在家目錄看到 slurm-<job id>.out 的文字檔,可以直接查看結果

user@login01:~$ cat slurm-74.out
Hello world from processor cmpt001.hpc.cc.cs.nctu.edu.tw, rank 0 out of 3 processors
Hello world from processor cmpt002.hpc.cc.cs.nctu.edu.tw, rank 1 out of 3 processors
Hello world from processor cmpt003.hpc.cc.cs.nctu.edu.tw, rank 2 out of 3 processors

Submit a job using GPU

Take cuda-samples for example.

  1. Prepare your code
    user@login01:~$ git clone https://github.com/NVIDIA/cuda-samples.git

  2. Compile it
    cd cuda-samples/Samples/1_Utilities/deviceQuery && cmake . && make

  3. Prepare sbatch script test.sh

#!/bin/bash
#SBATCH -A general              # Account name (可透過 sshare 查看)
#SBATCH -p class_nodes           # Partition name (可透過 sinfo 查看 partition)
#SBATCH -N 1                     # Maximum number of nodes to be allocated
#SBATCH --gres=gpu:1            # specify GPU number
# 還有很多其他參數,可參考官方文件(https://slurm.schedmd.com/sbatch.html)

export LD_PRELOAD=/lib/x86_64-linux-gnu/libcuda.so.1 # for CUDA driver API

./deviceQuery
  1. 透過 sbatch 發送 job
user@login01:~/cuda-samples/Samples/1_Utilities/deviceQuery$ sbatch test.sh

之後一樣會在當前目錄看到 slurm-<job id>.out 的文字檔,可以直接查看結果

Cancel job

為避免一個使用者發出大量 job 佔據大多資源,所以有限制一個使用者同時就只能發一個 job。若上個 job 發錯,想要發新的 job 就需要 cancel 上個 job

scancel -u <your username>

Reference