Microsoft AzureのMarketplaceでCentOS7のサーバーを借りてslurm(ジョブスケジューラー)とmpich(MPIの実装)とcuda(GPGPU用ツールキット)の設定方法について調査を行った。
この設定がうまくいけば、myPrestoのpsygene-G(GPU+MPIを使った分子動力学プログラム)を、ジョブスケジューラーをから実行できる。
実行環境: Microsoft Azure
インスタンスの詳細
地域: (アジア太平洋) 東日本
イメージ: CentOS 7.6 (使用開始後に7.7にアップデートして使用)
サイズ: NV6_Promo (6vcpu, 1GPU(Tesla M60),メモリ56GB)
ここでは、1ノードのみのシステムでslurmを使用・設定する。
アップデート前のバージョン確認。
uname -a
Linux bmr191104 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
アップデート手順。
sudo yum update
sudo yum install epel-release
sudo yum update
sudo reboot
アップデート後のバージョン確認。
uname -a
Linux bmr191104 3.10.0-1062.4.1.el7.x86_64 #1 SMP Fri Oct 18 17:15:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
sudo yum install munge munge-libs
sudo -i
/usr/sbin/create-munge-key
systemctl enable munge
systemctl enable munge
exit
最新版はver.10だが、今回は諸事情により9.2をインストールした。次のコマンドで使用するURLは事前に調べておく。
https://developer.nvidia.com/cuda-toolkit
にアクセスし、Dowload NOW, Legacy Releases, CUDA TOOLKIT ver. 9.2, LINUX, x86_64, CentOS 7, rpm(local)を選択していくと、以下のコマンドが表示される。
sudo rpm -i http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-9.2.148-1.x86_64.rpm
sudo yum clean all
sudo yum install cuda-9-2
(パッチがあるので、ここで当てるといいだろう。)
GPUの動作状況の確認
nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
この段階で、ドライバが正常に設定されていないので、ドライバを入れる必要がある。
次のURLのページで、GPUの型、OS、Cuda toolkit のバージョンにあったドライバのインストール用ファイルのURLを調べる。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
sudo yum install kernel-devel
curl -OL http://jp.download.nvidia.com/tesla/396.82/NVIDIA-Linux-x86_64-396.82.run
ここでは、上で調べたドライバーのインストール用ファイル(ここでは、NVIDIA-Linux-x86_64-396.82.run)のURL( http://jp.download.nvidia.com/tesla/396.82/NVIDIA-Linux-x86_64-396.82.run )を使用する。このURLは、ドライバーのインストール用ファイルのダウンロードボタンのリンク先のURLで、ダウンロードボタンの上にマウスカーソルを置いて右クリックすると、リンクをコピーするためのメニューが出てくるので、それを選択し、コマンド行にペーストすると良い。今回は、Tesla M60のGPU、Linux 64-bit、CUDA TOOLKIT 9.2のものを選択した。
ダウンロードしたファイルを使って次のコマンドでドライバーをインストールする。
sudo sh NVIDIA-Linux-x86_64-396.82.run --no-drm
以下の確認・選択画面が出てくるので、適切に選択をしてEnterを押していく。
WARNING: The nvidia-drm module will not be installed. As a result, DRM-KMS will not function with this installation of the NVIDIA driver.
OK
Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later.
Yes/No
カーソルキーでNoを選択してEnterを押す。
Install NVIDIA's 32-bit compatibility libraries?
Yes/No
カーソルキーでNoを選択してEnterを押す。
Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up.
Yes/No
カーソルキーでNoを選択してEnterを押す。
Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: 396.82) is now complete. Please update your XF86Config or xorg.conf file as appropriate; see the file
/usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.
OK
GPUの動作状況の確認
nvidia-smi
Mon Nov 4 15:25:42 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.82 Driver Version: 396.82 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla M60 Off | 00003130:00:00.0 Off | Off |
| N/A 33C P0 36W / 150W | 0MiB / 8129MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
今回は正常にGPUが正常に認識されていることを確認できた。
必要なプログラムをインストールしておく。
sudo yum install rpm-build
sudo yum install munge-devel
sudo yum install readline-devel
sudo yum install perl-ExtUtils-MakeMaker
sudo yum install pam-devel
sudo yum install mysql-devel
curl -OL https://download.schedmd.com/slurm/slurm-19.05.3-2.tar.bz2
ダウンロードするファイルのURLは、事前に調べておく。
次のURLのページで、ダウンロード用URLを確認する。
https://www.schedmd.com/downloads.php
rpmbuild -ta slurm-19.05.3-2.tar.bz2
cd rpmbuild/RPMS/x86_64
次のコマンドは1行で入力して実行する。
sudo yum localinstall slurm-19.05.3-2.el7.x86_64.rpm slurm-slurmctld-19.05.3-2.el7.x86_64.rpm slurm-slurmd-19.05.3-2.el7.x86_64.rpm slurm-torque-19.05.3-2.el7.x86_64.rpm slurm-example-configs-19.05.3-2.el7.x86_64.rpm slurm-perlapi-19.05.3-2.el7.x86_64.rpm
sudo useradd -s /sbin/nologin -M slurm
sudo mkdir -p /var/spool/slurm
sudo chown -R slurm:slurm /var/spool/slurm
echo AutoDetect=nvml | sudo tee /etc/slurm/gres.conf
sudo cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf
slurmユーザーを作成して使用する。また作業用ディレクトリー、環境設定ファイルを用意する。
/etc/slurm/slurm.confを編集する。
emacsを使用する場合にはインストールする必要がある。
sudo yum install emacs
/etc/slurm/slurm.confの編集。
事前に、ホスト名を調べる。次のコマンドでホスト名が表示される。
hostname
このコマンドで表示されたホスト名を、次の行の(hostname)の箇所に記入する。
ControlMachine=(hostname)
次に
#SelectType=
の後に次の2行を挿入する。
SelectType=select/cons_tres
SelectTypeParameters=CR_CPU
ファイル末尾の次の2行を編集して、以下に示す3行にする。
NodeName=linux[1-32] Procs=1
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
ここでは、GPUが1個ついた状況で以下のように編集する。
(修正部分の1行目) GresTypes=gpu
(修正部分の2行目) NodeName=(hostname) CPUs=6 Boards=1 SocketsPerBoard=1 CoresPerSocket=6 ThreadsPerCore=1 RealMemory=56347 Gres=gpu State=UNKNOWN
(修正部分の3行目) PartitionName=all Nodes=ALL Default=YES MaxTime=INFINITE State=UP
修正部分の2行目に記述する情報は、次のコマンドを参考にして記述する。
slurmd -C
このコマンドの出力例:
NodeName=(hostname) CPUs=6 Boards=1 SocketsPerBoard=1 CoresPerSocket=6 ThreadsPerCore=1 RealMemory=56347
この行の末尾に、Gres=gpu State=UNKNOWNを追加する。
修正部分の3行目には、キュー名を設定する。debugのままでも使えるが、ここではallに変更した。defaultという名前を使ってみたが、これはうまく動作しなかった。
sudo systemctl start slurmctld
sudo systemctl status slurmctld
sudo systemctl enable slurmctld
sudo systemctl start slurmd
sudo systemctl status slurmd
sudo systemctl enable slurmd
scontrol show node
NodeName=(hostname) Arch=x86_64 CoresPerSocket=6
CPUAlloc=0 CPUTot=6 CPULoad=0.25
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=gpu:1(S:0)
NodeAddr=(hostname) NodeHostName=(hostname)
OS=Linux 3.10.0-1062.4.1.el7.x86_64 #1 SMP Fri Oct 18 17:15:30 UTC 2019
RealMemory=56347 AllocMem=0 FreeMem=49995 Sockets=1 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=all
BootTime=2019-11-04T14:53:46 SlurmdStartTime=2019-11-04T15:41:37
CfgTRES=cpu=6,mem=56347M,billing=6
AllocTRES=
CapWatts=n/a
CurrentWatts=0 AveWatts=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
ここでState=IDLEとなっていれば、正常に動作している。
sudo yum install gcc-gfortran
wget http://www.mpich.org/static/downloads/3.3.1/mpich-3.3.1.tar.gz
tar -xzvf mpich-3.3.1.tar.gz
cd mpich-3.3.1
mkdir build
cd build
../configure --prefix=/usr/local/mpich-3.3.1 CC=gcc CXX=g++ F77=gfortran FC=gfortran
make -j8
sudo make install
.bashrcに以下の行を追加
export CUDA_HOME="/usr/local/cuda-9.2"
export PATH="${CUDA_HOME}/bin:${PATH}"
PREFIX=/usr/local/cuda-9.2
LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
export PATH LD_LIBRARY_PATH
export CPATH="/usr/local/include:$CUDA_HOME/include:$CPATH"
export INCLUDE_PATH="$CUDA_HOME/include"
MPIROOT=/usr/local/mpich-3.3.1
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPIROOT/lib
export MANPATH=$MANPATH:$MPIROOT/share/man
.bashrcの設定変更を有効にするには次のコマンドを実行する。
source ~/.bashrc
以上で、設定完了。
memo:
Marketplaceのイメージを使って設定した環境を、汎用化したイメージにすることはできないようだ。ある程度設定した環境を、再利用することができるイメージにできないのは不便。
cudaとGPUドライバーが設定済みのイメージを借りるともっと簡単にセットアップできるかも。例えば、AWSのMarketplaceで借りることができる"Amazon Linux AMI with NVIDIA TESLA GPU Driver"は、以前に使ったことがあるが、確かcudaとGPUドライバーが設定済みだったはずである。 今回は、CentOS7での設定手順を調べたかったので、CentOS7のイメージを借りて使用した。