#author("2020-12-16T19:31:23+00:00","default:sysosa","sysosa") #author("2020-12-16T20:03:31+00:00","default:sysosa","sysosa") ジョブスケジュールの対象に GPUs も加えることが可能だが、torqueパッケージをrebuildする必要がある ***GPUs対応torque作成 [#zcfa7faf] rpmbuildを使います。 なので、SPRMを取得して、展開、SPECファイルを調整して、rebuildな筋書き #code(nonumber){{ [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の変更箇所は下記になる #code(diff,nonumber){{ --- 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} }} &color(red){*};&size(10){「--with-nvml-includ」「--with-nvml-lib」を付けるとGPUが認識されない....}; rpmbuildに足りないパッケージをインストールして、rpmbuildします そうして、rpmbuild を実行する #code(nonumber){{ [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 ファイルが置かれる #code(nonumber){{ [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 ~]# }} この作ったパッケージで入れ替えてみる &color(red){*};&size(10){恐らく計算ノードのみ切り替えればいいのかなと思うのだが、全て切り替えました}; ***ジョブ管理ノードへインストール [#x1e1e381] 特段することはなく、作ったtorque-momをインストールするだけ。 #code(nonumber){{ [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]# }} とインストールを行う。 そして設定します #code(nonumber){{ [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 }} そしてデーモンを起動させます #code(nonumber){{ [root@pbs ~]# systemctl start trqauthd.service pbs_server.service munge.service [root@pbs ~]# systemctl enable trqauthd.service pbs_server.service munge.service }} ***計算ノード [#p0934d82] GPUs対応のパッケージを計算ノードに組み込みます GPUノードにはGPUが2枚搭載されています #code(nonumber){{ [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 ~]# }} まずはパッケージを転送します #code(nonumber){{ [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: }} そしてインストール #code(nonumber){{ [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 ~]# }} #code(nonumber){{ [root@s ~]# systemctl enable pbs_mom.service [root@s ~]# systemctl start pbs_mom.service }} ***管理ノードに GPUs ノードを追加 [#nd2b85d4] #code(nonumber){{ [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を実行すると下記になります。 #code(nonumber){{ [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としてみる まず管理ノード側で #code(nonumber){{ [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ノード側で #code(nonumber){{ [root@s ~]# vi /var/lib/torque/mom_priv/mom.layout nodes=0 nodes=1 [root@s ~]# systemctl restart pbs_mom }} として「pbsnode」で確認を取ると #code(nonumber){{ [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対応 [#t6d51fd6] #code(nonumber){{ --- 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ファイル #code(nonumber){{ [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"」を実行して インターラクティブモードで接続すると #code(nonumber){{ [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」でリソースを占有してみる #code(nonumber){{ [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 ~]$ }} もう片方は #code(nonumber){{ [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つのデバイスが見えて 使えてしまいます。 #code(nonumber){{ [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を被らないで使うことは可能っぽい. っが、アプリの調整は大変そう..