Linux

Slurm GPU HPC ParaView 繪圖伺服器編譯、建置教學

介紹如何編譯 EGL 版本的 ParaView 繪圖伺服器,在 Slurm 排程系統的 GPU HPC 中以 OpenMPI 執行平行 3D 繪圖。

編譯 ParaView 伺服器

下載 ParaView 5.8.0 版的原始碼,使用以下參數設定進行編譯與安裝:

#!/bin/sh
module purge
module load cmake compiler/gnu/7.3.0 openmpi3 nvidia/cuda/10.1

# 安裝目錄
PARAVIEW_INSTALL_PATH=/opt/paraview-5.8.0

cmake -DCMAKE_INSTALL_PREFIX=$PARAVIEW_INSTALL_PATH \
      -DPARAVIEW_USE_QT=OFF \
      -DPARAVIEW_USE_MPI=ON \
      -DVTK_SMP_IMPLEMENTATION_TYPE=OpenMP \
      -DVTK_OPENGL_HAS_EGL=ON \
      -DOPENGL_egl_LIBRARY=/usr/lib64/libglvnd/libEGL.so.1 \
      -DOPENGL_gl_LIBRARY=/usr/lib64/libglvnd/libGL.so.1 \
      -DOPENGL_gles2_LIBRARY=/usr/lib64/libglvnd/libGLESv2.so.2 \
      -DOPENGL_glu_LIBRARY=/usr/lib64/libGLU.so \
      -DOPENGL_glx_LIBRARY=/usr/lib64/libglvnd/libGLX.so.0 \
      -DOPENGL_opengl_LIBRARY=/usr/lib64/libglvnd/libGL.so.1 \
      -DCMAKE_BUILD_TYPE=Debug \
      -DPARAVIEW_PLUGIN_ENABLE_pvNVIDIAIndeX=ON \
      ../ParaView-v5.8.0

# 建立安裝目錄
mkdir -p $PARAVIEW_INSTALL_PATH

# 編譯與安裝
make -j64 install

Slurm 排程執行 ParaView 伺服器

若要透過 Slurm 排程系統執行平行化的 ParaView 伺服器,可以參考以下這個 Slurm 的工作指令稿:

#!/bin/bash
#SBATCH -J paraview_server          # 工作名稱
#SBATCH -o paraview_server.log.%j   # 輸出檔案名稱(%j 為 Job ID)
#SBATCH -t 00:30:00                 # 執行時間(hh:mm:ss)
#SBATCH --account=ACCOUNT           # 記帳編號
#SBATCH --nodes=2                   # 節點數量
#SBATCH --ntasks-per-node=16        # 每節點 MPI 行程數量
#SBATCH --gres=gpu:8                # 每節點 GPU 數量

echo "Start ParaView Server"

# 載入必要模組
module purge
module load cmake compiler/gnu/7.3.0 openmpi3 nvidia/cuda/10.1

PVSERVER="/opt/paraview-5.8.0/bin/pvserver --force-offscreen-rendering --disable-xdisplay-test --multi-clients"

mpirun -np 4 $PVSERVER --egl-device-index=0 :\
       -np 4 $PVSERVER --egl-device-index=1 :\
       -np 4 $PVSERVER --egl-device-index=2 :\
       -np 4 $PVSERVER --egl-device-index=3 :\
       -np 4 $PVSERVER --egl-device-index=4 :\
       -np 4 $PVSERVER --egl-device-index=5 :\
       -np 4 $PVSERVER --egl-device-index=6 :\
       -np 4 $PVSERVER --egl-device-index=7

echo "Stop ParaView Server"

將指令稿儲存為 pvjob.sh,使用 sbatch 將此指令稿送入 Slurm 排程系統執行:

# 送入 Slurm 排程系統執行
sbatch pvjob.sh

當 ParaView 工作指令稿在 Slurm 中被執行之後,就會建立一個檔案名稱為 paraview_server.log.JOB_ID 的輸出檔案,從檔案中可以得知 ParaView 伺服器的主要執行節點以及傾聽連接埠號。

由於 ParaView 伺服器位於後端計算節點中,從外部無法直接連線,因此必須透過登入節點建立一個 SSH 通道(SSH tunnel),讓外部的 ParaView client 可以連線至計算節點上的 ParaView 伺服器。

# 登入節點
HEAD_NODE=12.34.56.78

# 主計算節點
COMPUTE_NODE=192.168.0.1

# 建立 SSH Tunnel
ssh -L 11111:${COMPUTE_NODE}:11111 ${HEAD_NODE}

SSH 通道建立好之後,就可以在本機使用 ParaView client 連接 localhost:11111 透過 SSH 通道轉接至計算節點中的 ParaView 伺服器,進行平行繪圖了。

Slurm 互動執行 ParaView 伺服器

在程式開發階段,可以使用 Slurm 的互動式節點來執行 ParaView 伺服器,方便查看 ParaView 伺服器的輸出訊息以及除錯。

NVIDIA IndeX

ParaView dependencies 下載 nvidia-index-libs-2.4.20200424-linux.tar.bz2,解壓縮之後放在適當的位置,並在執行 ParaView 之前以 LD_LIBRARY_PATH 指定 NVIDIA IndeX 函式庫位置:

#!/bin/bash
#SBATCH -J paraview_server          # 工作名稱
#SBATCH -o paraview_server.log.%j   # 輸出檔案名稱(%j 為 Job ID)
#SBATCH -t 00:30:00                 # 執行時間(hh:mm:ss)
#SBATCH --account=ACCOUNT           # 記帳編號
#SBATCH --nodes=2                   # 節點數量
#SBATCH --ntasks-per-node=16        # 每節點 MPI 行程數量
#SBATCH --gres=gpu:8                # 每節點 GPU 數量

echo "Start ParaView Server"

# 載入必要模組
module purge
module load cmake compiler/gnu/7.3.0 openmpi3 nvidia/cuda/10.1

# NVIDIA IndeX 函式庫
export LD_LIBRARY_PATH=/opt/nvidia-index-libs-2.4.20200424_CUDA_101-linux/lib

PVSERVER="/opt/paraview-5.8.0/bin/pvserver --force-offscreen-rendering --disable-xdisplay-test --multi-clients"

mpirun -np 4 $PVSERVER --egl-device-index=0 :\
       -np 4 $PVSERVER --egl-device-index=1 :\
       -np 4 $PVSERVER --egl-device-index=2 :\
       -np 4 $PVSERVER --egl-device-index=3 :\
       -np 4 $PVSERVER --egl-device-index=4 :\
       -np 4 $PVSERVER --egl-device-index=5 :\
       -np 4 $PVSERVER --egl-device-index=6 :\
       -np 4 $PVSERVER --egl-device-index=7

echo "Stop ParaView Server"

參考資料

待整理資料

https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglIntro.xhtml

https://www.itread01.com/content/1541025784.html

https://secure.cci.rpi.edu/wiki/index.php?title=ParaView

https://public.kitware.com/pipermail/paraview/2012-April/024683.html

https://slurm.schedmd.com/mpi_guide.html#open_mpi
https://slurm.schedmd.com/srun.html

https://developer.download.nvidia.com/video/gputechconf/gtc/2019/presentation/s9692-nvidia-index-implementing-cloud-services-for-complex-scientific-data-visualization.pdf

http://on-demand.gputechconf.com/gtc/2018/presentation/s8689-in-situ-visualization-for-novel-earth-system-modeling-framework-using-nvidia-index-paraview-plugin-and-catalyst-v2.pdf

http://on-demand.gputechconf.com/gtc/2018/presentation/s8704-nvidia-index-advanced-large-scale-data-visualizations-on-the-nvidia-gpu-cloud.pdf

https://www.mn.uio.no/astro/english/services/it/help/visualization/paraview/nvidia-index-paraview-plugin-users-guide-5.6.pdf

https://bluewaters.ncsa.illinois.edu/pythonnotebooks

https://user.cscs.ch/tools/interactive/

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago