ジョブスケジュールの対象に GPUs も加えることが可能だが、torqueパッケージをrebuildする必要がある

GPUs対応torque作成

rpmbuildを使います。
なので、SPRMを取得して、展開、SPECファイルを調整して、rebuildな筋書き

[root@pbs ~]# yum install yum-utils
[root@pbs ~]# yumdownloader --enablerepo=epel --source torque
[root@pbs ~]# rpm -Uvh torque-4.2.10-10.el7.src.rpm
[root@pbs ~]# vi rpmbuild/SPECS/torque.spec

torque.specの変更箇所は下記になる

--- rpmbuild/SPECS/torque.spec.orig     2016-04-09 22:31:54.000000000 +0900
+++ rpmbuild/SPECS/torque.spec  2020-12-15 23:23:28.256898137 +0900
@@ -381,7 +381,7 @@
   --with-sendmail=%{_sbindir}/sendmail --disable-static \
   --with-tcp-retry-limit=2 --without-debug \
   --enable-drmaa --enable-munge-auth --with-munge \
-  --enable-cpuset --enable-numa-support \
+  --enable-cpuset --enable-numa-support --enable-nvidia-gpus \
   %{server_nameflags} %{guiflags} %{tclflags} %{rcpflags}
 
 make %{?_smp_mflags}

*「--with-nvml-includ」「--with-nvml-lib」を付けるとGPUが認識されない....
rpmbuildに足りないパッケージをインストールして、rpmbuildします
そうして、rpmbuild を実行する

[root@pbs ~]# yum install desktop-file-utils pam-devel xauth readline-devel gperf openssl-devel hwloc-devel libxml2-devel \
                  munge-devel tcl-devel tk-devel graphviz "tex(latex)" tex-xtab tex-sectsty tex-tocloft tex-multirow
[root@pbs ~]# rpmbuild -bb rpmbuild/SPECS/torque.spec

再構築が完了すると rpmbuild/RPMS/x86_64/ に rpm ファイルが置かれる

[root@pbs ~]# ls rpmbuild/RPMS/x86_64/
torque-4.2.10-10.el7.x86_64.rpm              torque-gui-4.2.10-10.el7.x86_64.rpm
torque-client-4.2.10-10.el7.x86_64.rpm       torque-libs-4.2.10-10.el7.x86_64.rpm
torque-debuginfo-4.2.10-10.el7.x86_64.rpm    torque-mom-4.2.10-10.el7.x86_64.rpm
torque-devel-4.2.10-10.el7.x86_64.rpm        torque-pam-4.2.10-10.el7.x86_64.rpm
torque-drmaa-4.2.10-10.el7.x86_64.rpm        torque-scheduler-4.2.10-10.el7.x86_64.rpm
torque-drmaa-devel-4.2.10-10.el7.x86_64.rpm  torque-server-4.2.10-10.el7.x86_64.rpm
[root@pbs ~]#

この作ったパッケージで入れ替えてみる
*恐らく計算ノードのみ切り替えればいいのかなと思うのだが、全て切り替えました

ジョブ管理ノードへインストール

特段することはなく、作ったtorque-momをインストールするだけ。

[root@pbs ~]# yum remove "torque*" -y
[root@pbs ~]# cd rpmbuild/RPMS/x86_64/
 
[root@pbs x86_64]# yum localinstall ./torque-server-4.2.10-10.el7.x86_64.rpm \
                                    ./torque-scheduler-4.2.10-10.el7.x86_64.rpm \
                                    ./torque-libs-4.2.10-10.el7.x86_64.rpm \
                                    ./torque-client-4.2.10-10.el7.x86_64.rpm \
                                    ./torque-4.2.10-10.el7.x86_64.rpm
[root@pbs x86_64]#

とインストールを行う。
そして設定します

[root@pbs ~]# hostname > /var/lib/torque/server_name
[root@pbs ~]# pbs_server -d /var/lib/torque -t create -f -D
pbs_server is up (version - 4.2.10, port - 15001)              <-- Ctrl-Cで停止
 
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
 
[root@pbs ~]# create-munge-key

そしてデーモンを起動させます

[root@pbs ~]# systemctl start trqauthd.service pbs_server.service munge.service
[root@pbs ~]# systemctl enable trqauthd.service pbs_server.service munge.service

計算ノード

GPUs対応のパッケージを計算ノードに組み込みます
GPUノードにはGPUが2枚搭載されています

[root@s ~]# nvidia-smi  -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[root@s ~]#

まずはパッケージを転送します

[root@pbs ~]# cd rpmbuild/RPMS/x86_64/
[root@pbs x86_64]# 
[root@pbs x86_64]# scp torque-4.2.10-10.el7.x86_64.rpm torque-libs-4.2.10-10.el7.x86_64.rpm torque-mom-4.2.10-10.el7.x86_64.rpm root@s:

そしてインストール

[root@s ~]# yum localinstall ./torque-4.2.10-10.el7.x86_64.rpm ./torque-libs-4.2.10-10.el7.x86_64.rpm torque-mom-4.2.10-10.el7.x86_64.rpm
[root@s ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs
 
[root@s ~]#
[root@s ~]# systemctl enable pbs_mom.service
[root@s ~]# systemctl start pbs_mom.service

管理ノードに GPUs ノードを追加

[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
s  np=4 num_node_boards=1 numa_board_str=4 gpus=2
 
[root@pbs ~]# systemctl restart pbs_server

pbsnodeを実行すると下記になります。

[root@pbs ~]# pbsnodes
n1-0
     state = free
     np = 1
     ntype = cluster
     status = rectime=1608107709,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=1880672kb(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
s-0
     state = free
     np = 4
     ntype = cluster
     status = rectime=1608107721,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=32886236kb(略
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 2
     gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略)gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
 
[root@pbs ~]#

と稼働を確認できる
次にNUMAを利用してGPUノードを仮想的に2つに分けて片方はGPU数0、もう片方はGPU数2としてみる
まず管理ノード側で

[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
s  np=4 num_node_boards=2 numa_board_str=1,3 gpus=2 numa_gpu_node_str=0,2
 
[root@pbs ~]# systemctl restart pbs_server

GPUノード側で

[root@s ~]# vi /var/lib/torque/mom_priv/mom.layout
nodes=0
nodes=1
 
[root@s ~]# systemctl restart pbs_mom

として「pbsnode」で確認を取ると

[root@pbs ~]# pbsnodes
n1-0
     state = free
     np = 1
     ntype = cluster
     status = rectime=1608145809,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=1880672kb,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
s-0
     state = free
     np = 1
     ntype = cluster
     status = rectime=1608145819,varattr=,jobs=,state=free,netload=? 0,gres=,loadave=0.00,ncpus=0,physmem=32886236kb,(略
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 2
     gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略),gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
 
s-1
     state = free
     np = 3
     ntype = cluster
     status = rectime=1608145819,varattr=,jobs=,state=free,netload=? 15205,gres=,loadave=0.00,ncpus=0,physmem=? 15205, (略
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 2
     gpu_status = gpu[1]=gpu_id=00000000:06:00.0;gpu_product_name=GeForce GT 710;(略),gpu[0]=gpu_id=00000000:01:00.0;gpu_product_name=GeForce GT 710;(略
 
[root@pbs ~]#

と双方にGPUが2つ割り当てられてしまった
NUMAでは無理っぽいのかも...

NUMAを外してGPU対応

--- rpmbuild/SPECS/torque.spec.orig     2016-04-09 22:31:54.000000000 +0900
+++ rpmbuild/SPECS/torque.spec  2020-12-17 04:34:06.454913271 +0900
@@ -381,7 +381,7 @@
   --with-sendmail=%{_sbindir}/sendmail --disable-static \
   --with-tcp-retry-limit=2 --without-debug \
   --enable-drmaa --enable-munge-auth --with-munge \
-  --enable-cpuset --enable-numa-support \
+  --enable-cpuset --enable-nvidia-gpus \
   %{server_nameflags} %{guiflags} %{tclflags} %{rcpflags}
 
 make %{?_smp_mflags}

こうしてrpmbuildして、管理ノードと計算ノードにrpmを配布+インストールを行う。
設定はほぼ同じで、違いはnodesファイル

[root@pbs ~]# cat /var/lib/torque/server_priv/nodes
n1 np=1
s np=4 gpus=2
[root@pbs ~]#

これで利用者設定とqueueを作成、「qmgr -c "set server scheduling = True"」を実行して
インターラクティブモードで接続すると

[illya@pbs ~]$ qsub -l nodes=1:ppn=4:gpus=2 -I
qsub: waiting for job 7.pbs to start
qsub: job 7.pbs ready
 
[illya@s ~]$ ls -l /var/lib/torque/aux/
total 8
-rw-r--r-- 1 root root  8 Dec 17 04:47 7.pbs
-rw-r--r-- 1 root root 14 Dec 17 04:47 7.pbsgpu
 
 
[illya@s ~]$ cat /var/lib/torque/aux/7.pbs     <-- 利用可能なcoreが計算ノードsで4つ
s
s
s
s
 
[illya@s ~]$ cat /var/lib/torque/aux/7.pbsgpu  <-- 利用可能なGPUが、計算ノードsで2つ。
s-gpu1
s-gpu0
[illya@s ~]$

ここで一旦インターラクティブモードを終えて、次に2つのターミナルで「nodes=1:ppn=4:gpus=1」でリソースを占有してみる

[illya@pbs ~]$ qsub -l nodes=1:ppn=1:gpus=1 -I
qsub: waiting for job 13.pbs to start
qsub: job 13.pbs ready
 
[illya@s ~]$ cat /var/lib/torque/aux/13.pbsgpu
s-gpu0
[illya@s ~]$

もう片方は

[illya@pbs ~]$ qsub -l nodes=1:ppn=1:gpus=1 -I
qsub: waiting for job 14.pbs to start
qsub: job 14.pbs ready
 
[illya@s ~]$ cat /var/lib/torque/aux/14.pbsgpu
s-gpu1
[illya@s ~]$

と「s-gpu0」「s-gpu1」とGPUID毎に割り当てられる.

っが、残念なことにインターラクティブモードなのだが「nvidia-smi」と実行すると2つのデバイスが見えて
使えてしまいます。

[illya@s ~]$ nvidia-smi -L
GPU 0: GeForce GT 710 (UUID: GPU-f0753e20-06f7-695a-f325-b5b6342393ba)
GPU 1: GeForce GT 710 (UUID: GPU-34c49ab7-b79d-e341-93e2-1659e9bd9e57)
[illya@s ~]$

TorqueでGPUリソースの管理はできるのだが、制御として1枚しか使わせないとかは出来ないみたい.
またGPUIDのどれが割り当てられたかは確認できるので、アプリを調整すれば同一計算機内で同じGPUIDを被らないで使うことは可能っぽい.
っが、アプリの調整は大変そう..


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-12-17 (木) 05:03:31 (71d)