7. フリーウェア¶
フリーウェアの一覧表を以下に示します。
ソフトウェア名 | 概要 |
---|---|
GAMESS | ソルバ・シミュレータ |
Tinker | ソルバ・シミュレータ |
GROMACS | ソルバ・シミュレータ |
LAMMPS | ソルバ・シミュレータ |
NAMMD | ソルバ・シミュレータ |
CP2K | ソルバ・シミュレータ |
OpenFOAM | ソルバ・シミュレータ、可視化 |
CuDNN | GPUライブラリ |
NCCL | GPUライブラリ |
Caffe | DeepLearningフレームワーク |
Chainer | DeepLearningフレームワーク |
TensorFlow | DeepLearningフレームワーク |
R | インタプリタ(Rmpi,rpudに対応) |
clang | コンパイラ |
Apache Hadoop | 分散データ処理ツール |
POV-Ray | 可視化 |
ParaView | 可視化 |
VisIt | 可視化 |
turbovnc | リモートGUI(X11) 表示 |
gnuplot | データ可視化 |
Tgif | 画像表示・編集 |
GIMP | 画像表示・編集 |
ImageMagick | 画像表示・編集 |
TeX Live | TeX ディストリビューション |
Java SDK | 開発環境 |
PETSc | リニアシステムソルバ、ライブラリ |
FFTW | 高速フーリエ変換ライブラリ |
DMTCP | チェックポイント・リスタート |
Singularity | Linux container for HPC |
7.1. 量子化学/MD関連ソフトウェア¶
7.1.1. GAMESS¶
GAMESSはオープンソースの第一原理分子量子化学計算アプリケーションです。
バッチキューシステムを利用したGAMESSの利用方法の例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 |
|
詳細な説明は以下に記載されています。
http://www.msg.ameslab.gov/gamess/index.html
7.1.2. Tinker¶
Tinkerはバイオポリマーの為の特別な機能を備えた、分子動力学の為のモデリングソフトウェアです。
バッチキューシステムを利用したTinkerの利用方法の例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
詳細な説明は以下に記載されています。
https://dasher.wustl.edu/tinker/
7.1.3. GROMACS¶
GROMACSは分子動力学しミュレーションとエネルギー最小化を行う為のエンジンです。
バッチキューシステムを利用したGROMACSの利用方法の例を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
詳細な説明は以下に記載されています。
7.1.4. LAMMPS¶
LAMMPSは液状、固体状、気体状の粒子の集団をモデル化する古典分子動力学コードです。
バッチキューシステムを利用したLAMMPSの利用方法の例を以下に記します。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
詳細な説明は以下に記載されています。
7.1.5. NAMD¶
NAMDは、大規模な生体分子システムの高性能シミュレーション用にデザインされたオブジェクト指向の並列分子動力学コードです。
バッチキューシステムを利用したNAMDの利用方法の例を以下に記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
詳細な説明は以下に記載されています。
http://www.ks.uiuc.edu/Research/namd/2.13/ug/
7.1.6. CP2K¶
CP2Kは固体、液体、分子、周期的、物質、結晶、生物系の原子シミュレーションを実行できる量子化学、固体物理ソフトウェアパッケージです。
バッチキューシステムを利用したCP2Kの利用方法の例を以下に記します。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
詳細な説明は、以下に記載されています。
7.2. CFD関連ソフトウェア¶
7.2.1. OpenFOAM¶
OpenFOAMはオープンソースの流体/連続体シミュレーションコードです。
Foudation版(openfoam)とESI版(openfoam-esi)の2種類がインストールされています。
バッチキューシステムを利用したOpenFOAMの利用方法の例を以下に記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
ESI版OpenFOAMをご利用の場合は上記のmodule load
の箇所をmodule load cuda openmpi openfoam-esi
として下さい。
詳細な説明は以下に記載されています。
https://openfoam.org/resources/
http://www.openfoam.com/documentation/
7.3. GPU用数値計算ライブラリ¶
7.3.1. cuBLAS¶
cuBLASはGPUで動作するBLAS(Basic Linear Algebra Subprograms)ライブラリです。
利用方法
$ module load cuda
$ nvcc -gencode arch=compute_60,code=sm_60 -o sample sample.cu -lcublas
通常のC言語のプログラム中で、cuBLASを呼び出す場合、コンパイル時に-I、-L、-lで指定する必要があります。
$ module load cuda
$ gcc -o blas blas.c -I${CUDA_HOME}/include -L${CUDA_HOME}/lib64 -lcublas
7.3.2. cuSPARSE¶
cuSPARSEはNVIDIA GPU上で疎行列計算を行うためのライブラリです。
利用方法
$ module load cuda
$ nvcc -gencode arch=compute_60,code=sm_60 sample.cu -lcusparse -o sample
通常のC言語のプログラム中で、cuSPARSEを呼び出す場合、コンパイル時に-I、-L、-lで指定する必要があります。
$ module load cuda
$ g++ sample.c -lcusparse_static -I${CUDA_HOME}/include -L${CUDA_HOME}/lib64 -lculibos -lcudart_static -lpthread -ldl -o sample
7.3.3. cuFFT¶
cuFFTはNVIDIA GPU上で並列FFT(高速フーリエ変換)を行うためのライブラリです。
利用方法
$ module load cuda
$ nvcc -gencode arch=compute_60,code=sm_60 -o sample sample.cu -lcufft
通常のC言語のプログラム中で、cuFFTを呼び出す場合、コンパイル時に-I、-L、-lで指定する必要があります。
$ module load cuda
$ gcc -o blas blas.c -I${CUDA_HOME}/include -L${CUDA_HOME}/lib64 -lcufft
7.4. 機械学習、ビックデータ解析関連ソフトウェア¶
7.4.1. CuDNN¶
CuDNNはGPUを用いたDeep Neural Networkの為のライブラリです。
CuDNNの利用方法を以下に記します。
$ module load cuda cudnn
7.4.2. NCCL¶
NCCLは複数GPUの為の集団通信ライブラリです。
NCCLの利用方法の例を以下に記します。
$ module load cuda nccl
7.4.3. Caffe¶
CaffeはオープンソースのDeepLearningフレームワークです。
Caffeの利用方法の例を以下に記します。
$ module load cuda nccl cudnn/6.0 intel caffe/1.0
詳細な説明は以下に記載されています。
http://caffe.berkeleyvision.org/
MKLを利用する際はコードの前段に#define USE_MKL
を追記し、$MKLROOT
以下にある計算ライブラリを呼び出してください。
7.4.4. Chainer¶
Chainerはフレキシブルなニューラルネットワークのフレームワークです。
Chainerの利用方法の例を以下に記します。
$ module load intel cuda nccl/2.2.13 cudnn/7.1 openmpi/2.1.2 chainer/4.3.0
詳細な説明は以下に記載されています。
https://docs.chainer.org/en/stable/
7.4.5. TensorFlow¶
TensorFlowはデータフローグラフを用いた機械学習・AIのオープンソースのライブラリです。
TensorFlowの利用方法の例を以下に記します。
Python2.7の場合
$ module load python-extension
Python3.4の場合
$ module load intel cuda/9.0.176 nccl/2.2.13 cudnn/7.1 tensorflow/1.9.0
詳細な説明は以下に記載されています。
7.4.6. R¶
Rはデータ解析とグラフィックスの為のインタプリタ型プログラミング言語です。
並列処理用にRmpi、GPU用にrpudがインストールされています。
Rの利用方法の例を以下に記します。
$ module load intel cuda openmpi r
$ mpirun -stdin all -np 2 R --slave --vanilla < test.R
7.4.7. clang¶
clangはLLVMバックエンドのC/C++コンパイラです。
clangでGPU offloadするバイナリを生成する例を以下に示します。
$ module load cuda clang
$ clang -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda --cuda-path=$CUDA_HOME -Xopenmp-target -march=sm_60 test.c
詳細な説明は以下に記載されています。
7.4.8. Apache Hadoop¶
Apache Hadoopソフトウェアライブラリは単純なプログラミングモデルを用いて大きなデータセットを分散処理する為のフレームワークです。
Apache Hadoopの利用方法の例を以下に記します。
$ module load jdk hadoop
$ mkdir input
$ cp -p $HADOOP_HOME/etc/hadoop/*.xml input
$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar grep input output 'dfs[a-z.]+'
$ cat output/part-r-00000
1 dfsadmin
バッチキューシステムの場合の利用手順を以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
7.5. 可視化関連ソフトウェア¶
7.5.1. POV-Ray¶
POV-Rayはフリーの光線追跡ソフトです。
POV-Rayの利用方法の例を以下に記します。
$ module load pov-ray
$ povray -benchmark
詳細な説明は以下に記載されています。
7.5.2. ParaView¶
ParaViewはオープンソース、マルチプラットフォームのデータ解析と可視化アプリケーションです。
ParaViewの利用方法の例をを以下に記します。
$ module load cuda openmpi paraview
$ paraview
7.5.2.1. 複数GPUを用いて可視化する場合¶
paraview/5.8.0
、paraview/5.8.0-egl
を用いて複数ノードで複数GPUを用いて可視化することができます。
paraview/5.8.0-egl
にはparaview
コマンドが含まれていないことにご注意ください。
以下はf_node=2
で8GPUを使う例です。
- wrap.sh
#!/bin/sh
num_gpus_per_node=4
mod=$((OMPI_COMM_WORLD_RANK%num_gpus_per_node))
if [ $mod -eq 0 ];then
export VTK_DEFAULT_EGL_DEVICE_INDEX=0
elif [ $mod -eq 1 ];then
export VTK_DEFAULT_EGL_DEVICE_INDEX=1
elif [ $mod -eq 2 ];then
export VTK_DEFAULT_EGL_DEVICE_INDEX=2
elif [ $mod -eq 3 ];then
export VTK_DEFAULT_EGL_DEVICE_INDEX=3
fi
$*
- job.sh
#!/bin/sh
#$ -cwd
#$ -V
#$ -l h_rt=8:0:0
#$ -l f_node=2
. /etc/profile.d/modules.sh
module purge
module load cuda openmpi paraview/5.8.0-egl
mpirun -x PATH -x LD_LIBRARY_PATH -npernode 4 -np 8 ./wrap.sh pvserver
wrap.sh
に実行権限を忘れずに付与して下さい。(chmod 755 wrap.sh
)
上記のジョブスクリプトで
qsub -g <グループ名> job.sh
を行い、ジョブを投入します。
qstat
でジョブが流れているのを確認します。
yyyyyyyy@login0:~> qstat
job-ID prior name user state submit/start at queue jclass slots ja-task-ID
------------------------------------------------------------------------------------------------------------------------------------------------
xxxxxxx 0.55354 job.sh yyyyyyyy r 05/31/2020 09:24:19 all.q@rXiYnZ 56
ジョブが流れているノードにX転送でsshし、paraviewを起動します。
yyyyyyyy@login0:~> ssh -CY rXiYnZ
yyyyyyyy@rXiYnZ:~> module load cuda paraview/5.8.0
paraview
※turbovncを用いても可能です。
起動後、「File」->「Connect」をクリックし、「Add Server」をクリックします。
「Name」を適当に入力し(ここでは"test"とします)、「Configure」をクリックします。
その後、「Connect」をクリックします。
接続されると、「Pipeline Browser」の項目にtest(cs://localhost:11111)
が表示されます。
paraviewのサンプルデータはここからダウンロードすることができます。
詳細な説明は以下に記載されています。
7.5.3. VisIt¶
VisItはオープンソースの可視化アプリケーションです。
VisItの利用方法の例を以下に記します。
$ module load cuda openmpi vtk visit
$ visit
詳細な説明は以下に記載されています。
https://wci.llnl.gov/simulation/computer-codes/visit/
7.6. その他フリーウェア¶
7.6.1. turbovnc¶
turbovncはオープンソースのVNCソフトウェアです。
turbovncの使用方法の例を以下に記します。
※qrshで計算ノードを確保し計算ノード上で実行して下さい。
- 計算ノードを確保する
$ qrsh -g <グループ名> -l <資源タイプ>=<個数> -l h_rt=<時間>
- 確保した計算ノード上で以下を実行し、vncserverを起動する
$ module load turbovnc
$ vncserver
You will require a password to access your desktops.
Password: # <-- パスワードを聞かれるので設定する
Verify:
Would you like to enter a view-only password (y/n)? n
Desktop 'TurboVNC: rXiYnZ:1 ()' started on display rXiYnZ:1 # <-- ここのVNCのディスプレイ番号:1を覚えておく
Creating default startup script /home/n/xxxx/.vnc/xstartup.turbovnc
Starting applications specified in /home/n/xxxx/.vnc/xstartup.turbovnc
Log file is /home/n/xxxx/.vnc/rXiYnZ:1.log
画面サイズを大きくしたい場合はvncserver -geometry <WIDTH>x<HEIGHT>
としてサイズを指定します。
- その後https://sourceforge.net/projects/turbovnc/files/から自分のPC用のインストーラをダウンロードし、turbovnc viewerをインストールする
- 計算ノードに接続したターミナルソフトからSSHポート転送の設定でローカルのポート5901を計算ノードのポート5901にポート転送するように設定する(もしディスプレイ番号がrXiYnZ:nだった場合、ポート転送のポート番号は5900+nに設定する)
- 自分のPCからturbovnc viewerを起動し、localhost:5901に接続して設定したパスワードを入力する
7.6.1.1. MobaXtermからVNCクライアントを利用する方法¶
MobaXtermにはVNCクライアントが内蔵されておりますので、VNCクライアントをインストールしなくてもVNC接続がご利用できます。
- qrshでノードを確保後、MobaXtermから「Sessions」->「New session」->「VNC」を選択する。
- その後、「Basic Vnc settings」の「Remote hostname or IP address」に確保した計算ノードのホスト名、「Port」を5900+nを入力し、「Network settings」の「Connect through SSH gateway(jump host)」をクリックし「Gateway SSH server」にlogin.t3.gsic.titech.ac.jpを入力、「Port」は22のまま、「User」に自分のTSUBAMEのログイン名を入力、「Use private key」にチェックを入れ自分の秘密鍵を入力する。
OKをクリックするとVNCクライアントが起動します。
7.6.1.2. turbovnc + VirtualGL¶
turbovnc用時に、GPUを1つ以上確保する資源タイプ(s_gpu, q_node, h_node, f_node)を用いている場合、VirtualGLを使用してGPUを用いて可視化することができます。
一部のアプリケーションではX転送でも通常のVNCでも描画に失敗するものがあります(例えばGpuTestやUNIGINE等)が、そのようなアプリケーションを実行したい場合はVirtualGLをお試し下さい。
例として、s_gpuの場合のVirtualGLの使用例を以下に示します。
$ qrsh ... -l s_gpu=1
$ . /etc/profile.d/modules.sh
$ module load turbovnc
$ Xorg -config xorg_vgl.conf :99 & # :99はVirtualGL用の任意のディスプレイ番号
$ vncserver
Warning
VirtualGLに使うディスプレイ番号はVNCで割り当てられたディスプレイ番号とは異なるので注意してください。
もし既に選択したディスプレイ番号が他のユーザに使われてしまっている場合、Xorg
の実行で以下のようなエラーになります。
user@r7i7n7:~> Xorg -config xorg_vgl.conf :99 &
user@r7i7n7:~> (EE)
Fatal server error:
(EE) Server is already active for display 99
If this server is no longer running, remove /tmp/.X99-lock
and start again.
(EE)
(EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
(EE)
この場合は、:99を:100にするなどして他のユーザに使われていないディスプレイ番号を割り当てる用にしてください。
- VNCクライアントで接続し、以下を実行
$ vglrun -d :99 <OpenGLアプリケーション> # :99は上のXorgで設定したVirtualGL用のディスプレイ番号
複数GPUを確保していて、2番目以降のGPUを使用したい場合はディスプレイ番号にスクリーン番号を追加します。
$ vglrun -d :99.1 <OpenGLアプリケーション> # :99は上のXorgで設定したVirtualGL用のディスプレイ番号、 .1はスクリーン番号
上記でスクリーン番号を.2にするとGPU3番、.3にするとGPU4番が使われます。
- GpuTestをVirtualGLを用いて実行する例
vglrun -d :99 ./start_pixmark_piano_benchmark_fullscreen_1920x1080.sh
7.6.2. gnuplot¶
gnuplotはコマンドラインのインタラクティブなグラフ描画プログラムです。
標準機能に加え、X11、latex、PDFlib-lite、Qt4に対応するようにビルドされています。
gnuplotの利用方法の例を以下に記します。
$ module load gnuplot
$ gnuplot
7.6.3. Tgif¶
tgifはオープンソースの描画ツールです。
tgifの利用方法を以下に記します。
$ module load tgif
$ tgif
※Cannot open the Default(Msg) Font '--courier-medium-r-normal--14-----*-iso8859-1'.というエラーが出て起動しない場合は、 ~/.Xdefaultsに以下の行を追加して下さい。
Tgif.DefFixedWidthFont: -*-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*
Tgif.DefFixedWidthRulerFont: -*-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*
Tgif.MenuFont: -*-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*
Tgif.BoldMsgFont: -*-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*
Tgif.MsgFont: -*-fixed-medium-r-semicondensed--13-*-*-*-*-*-*-*
7.6.4. GIMP¶
GIMPはオープンソースの画像操作プログラムです。
GIMPの利用方法の例を以下に記します。
$ module load gimp
$ gimp
7.6.5. ImageMagick¶
ImageMagickは画像処理ツールです。
標準機能に加え、X11、HDRI、libwmf、jpegに対応するようにビルドされています。
ImageMagickの利用方法の例を以下に記します。
$ module load imagemagick
$ convert -size 48x1024 -colorspace RGB 'gradient:#000000-#ffffff' -rotate 90 -gamma 0.5 -gamma 2.0 result.jpg
7.6.6. pLaTeX2e¶
pLaTeX2eは日本語化されたLaTex2eの一つです。
pLaTeX2eの利用方法の例を以下に記します。
$ module load texlive
$ platex test.tex
$ dvipdfmx test.dvi
※pdfの作成にはdvipdfmxをご利用ください。dvipdfでは日本語が正常に変換されません。
7.6.7. Java SDK¶
Java SDKとして、Oracle JDK 1.8がインストールされています。
Java SDKの利用方法の例を以下に記します。
$ module load jdk
$ javac Test.java
$ java Test
7.6.8. PETSc¶
PETScはオープンソースの並列数値計算ライブラリです。線型方程式の求解等を行うことができます。
実数用、複素数用の2種類がインストールされています。
PETScの利用方法の例を以下に記します。
$ module load intel intel-mpi
$ module load petsc/3.7.6/real ← 実数用
又は
$ module load petsc/3.7.6/complex ← 複素数用
$ mpiifort test.F -lpetsc
7.6.9. FFTW¶
FFTWはオープンソースの高速フーリエ変換用ライブラリです。
FFTW 2x系列と3x系列は非互換な為、バージョン2系と3系の2種類がインストールされております。
FFTWの利用方法の例を以下に記します。
$ module load intel intel-mpi fftw ← Intel MPIの場合
又は
$ module load intel cuda openmpi fftw ← Open MPIの場合
$ ifort test.f90 -lfftw3
7.6.10. DMTCP¶
DMTCPはマルチノード・マルチスレッド対応のチェックポイントツールです。
DMTCPの利用方法の例を以下に記します。
- チェックポイントを作成する場合
1 2 3 4 5 6 7 8 |
|
- 作成されたチェックポイントからリスタートする場合
1 2 3 4 5 6 7 8 9 |
|
DMTCPについては以下のページを参照ください。
http://dmtcp.sourceforge.net/
7.6.11. Singularity¶
SingularityはHPC向けLinuxコンテナです。
Singularityの使い方の例を以下に記します。
※qrshでノードを確保した後に実行して下さい。
シェルを起動する場合
$ module load singularity
$ cp -p $SINGULARITY_DIR/image_samples/centos/centos7.6-opa10.9.sif .
$ singularity shell --nv -B /gs -B /apps -B /scr centos7.6-opa10.9.sif
コンテナ内のコマンドを実行する場合
$ module load singularity
$ cp -p $SINGULARITY_DIR/image_samples/centos/centos7.6-opa10.9.sif .
$ singularity exec --nv -B /gs -B /apps -B /scr centos7.6-opa10.9.sif <コマンド>
MPIを実行する場合
$ module load singularity cuda openmpi
$ cp -p $SINGULARITY_DIR/image_samples/centos/centos7.6-opa10.9.sif .
$ mpirun -x LD_LIBRARY_PATH -x SINGULARITYENV_LD_LIBRARY_PATH=$LD_LIBRARY_PATH -x SINGULARITYENV_PATH=$PATH -x <環境変数> -npernode <プロセス数/ノード> -np <プロセス数> singularity exec --nv -B /apps -B /gs -B /scr/ centos7.6-opa10.9.sif <MPI実行バイナリ>
singularity/3.4.2以降では、fakeroot
オプションを使ってユーザ権限でコンテナを編集することができます。
Info
Singularityがfakerootオプションに対応したのは3.3.0ですが、TSUBAMEの環境に起因する問題があり、3.4.1までのSingularityでは同オプションが正常に動作しません。
fakerootオプションでイメージを編集するには計算ノードにて$T3TMPDIR
上で実行する必要があります。
以下にcentosのイメージにvimをインストールする例を記します。
$ cd $T3TMPDIR
$ module load singularity
$ singularity build -s centos/ docker://centos:latest
INFO: Starting build...
Getting image source signatures
...
$ singularity shell -f -w centos # -f がfakerootオプションです
Singularity> id
uid=0(root) gid=0(root) groups=0(root)
Singularity> unset TMPDIR # "Cannot create temporary file - mkstemp: No such file or directory"のエラーの回避策です
Singularity> yum install -y vim
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream 6.6 MB/s | 5.8 MB 00:00
CentOS-8 - Base 5.0 MB/s | 2.2 MB 00:00
CentOS-8 - Extras
...
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-13.el8.x86_64 vim-enhanced-2:8.0.1763-13.el8.x86_64
vim-filesystem-2:8.0.1763-13.el8.noarch which-2.21-12.el8.x86_64
Complete!
Singularity> which vim
/usr/bin/vim
Singularity> exit
$ singularity build -f centos.sif centos/
INFO: Starting build...
INFO: Creating SIF file...
INFO: Build complete: centos.sif
$ singularity shell centos.sif
Singularity> which vim
/usr/bin/vim # <--- vimがインストールされています
コンテナイメージにCUDA版OPAドライバライブラリをインストールする方法(centos7.5にCUDA版OPA10.9.0.1.2をインストールする場合)
※システムメンテナンスによってOPAが更新されることがございますので、新しいバージョンのOPAに更新された場合はは適時バージョンを変更して下さい。
OPAのバージョンは以下で確認が可能です。
$ rpm -qa |grep opaconfig
opaconfig-10.9.0.1-2.x86_64
このリンクから対応するOSのOPAのインストーラをダウンロードしてください
$ module load singularity/3.4.2
$ cp -p IntelOPA-IFS.RHEL75-x86_64.10.9.0.1.2.tgz ~
$ singularity build -s centos7.5/ docker://centos:centos7.5.1804
$ find centos7.5/usr/ -mindepth 1 -maxdepth 1 -perm 555 -print0 |xargs -0 chmod 755 # イメージ内の一部のファイル/ディレクトリに書き込み権限がないので追加します
$ singularity shell -f -w centos7.5
Singularity centos:~> tar xf IntelOPA-IFS.RHEL75-x86_64.10.9.0.1.2.tgz
Singularity centos:~> cd IntelOPA-IFS.RHEL75-x86_64.10.9.0.1.2/IntelOPA-OFA_DELTA.RHEL75-x86_64.10.9.0.1.2/RPMS/redhat-ES75/CUDA/
Singularity centos:~> yum install -y numactl-libs hwloc-libs libfabric libibverbs infinipath-psm
Singularity centos:~> rpm --force -ivh libpsm2-*.rpm
Singularity centos:~> exit
$ find centos7.5/usr/bin -perm 000 -print0 |xargs -0 chmod 755 # 上記yum install後、なぜかパーミッションが000のファイルが/usr/binにインストールされていますので変更します
$ singularity build centos7.5.sif centos7.5/
上記ではIFS版を用いていますが、BASIC版をダウンロードしても構いません。
詳細な説明は以下に記載されています。