PBSProを普通に使う場合にはcpu coreの空き数、メモリ搭載量とかでジョブの配送先が決まる。

ただ最近ではGPUの空き枚数でジョブの配送が決まってほしい場合もあり、基本のままでは不十分になりつつある。
例えば64coreなマシンで4枚GPUを搭載しているノードにジョブを入れたい場合、
64coreすべてを使用するような形でジョブを投げる必要がある
もし16coreで投げると、そのマシンはまだまだジョブを受け付けられる状態にあり、その他のジョブがGPUを使うようなら
4枚のGPUはその計算リソースを供給され遅くなるか、最悪ジョブが停止されてしまう。

2020y02m16d_200727527.png

ここではGPUの枚数で計算ノードが決定され(resource定義)、かつそのGPUがそのジョブにしか使われないようにしてみる(hook定義)。

resource

既定ではGPUを定義する項目がないので、その定義項目をジョブ管理ノードに追加します。

[root@pbspro ~]# qmgr
Qmgr: create resource ngpus type=long, flag=nh   <--「create resource ngpus type=long, flag=nh」を実行
Qmgr: list resource                              <--「list resource」で確認
#
# Create resources and set their properties.
#
Resource ngpus
    type = long
    flag = hn
 
Qmgr: quit
[root@pbspro ~]#

その後、pds機能を一旦停止させ、新たなリソース名として「ngpus(数値型)」を追加
「sched_config」を修正してpbsを再起動

[root@pbspro ~]# systemctl stop pbs
[root@pbspro ~]# vi /var/lib/pbs/sched_priv/sched_config
- resources: "ncpus, mem, arch, host, vnode, netwins, aoe"
+ resources: "ncpus, mem, arch, host, vnode, netwins, aoe, ngpus"     <--- 280行目、「ngpus」を追加
 
[root@pbspro ~]# systemctl start pbs

この後に、計算ノードにGPUを定義します

[root@pbspro ~]# qmgr -c "set node s resources_available.ngpus=1"

確認

[root@pbspro ~]# pbsnodes -S s
vnode           state           OS       hardware host            queue        mem     ncpus   nmics   ngpus  comment
--------------- --------------- -------- -------- --------------- ---------- -------- ------- ------- ------- ---------
s               free            --       --       s               --             31gb       8       0       1 --
[root@pbspro ~]#
[root@pbspro ~]# pbsnodes s
s
     Mom = s
     Port = 15002
     pbs_version = 19.1.3
     ntype = PBS
     state = free
     pcpus = 8
     resources_available.arch = linux
     resources_available.host = s
     resources_available.mem = 32886420kb
     resources_available.ncpus = 8
     resources_available.ngpus = 1
     resources_available.vnode = s
     resources_assigned.accelerator_memory = 0kb
     resources_assigned.hbmem = 0kb
     resources_assigned.mem = 0kb
     resources_assigned.naccelerators = 0
     resources_assigned.ncpus = 0
     resources_assigned.vmem = 0kb
     resv_enable = True
     sharing = default_shared
     last_state_change_time = Sun Feb 16 20:19:50 2020
 
[root@pbspro ~]#

hook

[root@pbspro ~]# qmgr
Qmgr: export hook pbs_cgroups application/x-config default" > pbs_cgroups.json
Qmgr: quit
[root@pbspro ~]#

「pbs_cgroups.json」の中身

{
    "cgroup_prefix"         : "pbspro",
    "exclude_hosts"         : [],
    "exclude_vntypes"       : ["no_cgroups"],
    "run_only_on_hosts"     : [],
    "periodic_resc_update"  : true,
    "vnode_per_numa_node"   : false,
    "online_offlined_nodes" : true,
    "use_hyperthreads"      : false,
    "ncpus_are_cores"       : false,
    "cgroup" : {
        "cpuacct" : {
            "enabled"            : true,
            "exclude_hosts"      : [],
            "exclude_vntypes"    : []
        },
        "cpuset" : {
            "enabled"            : true,
            "exclude_cpus"       : [],
            "exclude_hosts"      : [],
            "exclude_vntypes"    : [],
            "mem_fences"         : true,
            "mem_hardwall"       : false,
            "memory_spread_page" : false
        },
        "devices" : {
            "enabled"            : false,     <--ここを「false」から「true」に変更
            "exclude_hosts"      : [],
            "exclude_vntypes"    : [],
            "allow"              : [
                "b *:* rwm",
                "c *:* rwm"
            ]
        },
        "hugetlb" : {
            "enabled"            : false,
            "exclude_hosts"      : [],
            "exclude_vntypes"    : [],
            "default"            : "0MB",
            "reserve_percent"    : "0",
            "reserve_amount"     : "0MB"
        },
        "memory" : {
            "enabled"            : true,
            "exclude_hosts"      : [],
            "exclude_vntypes"    : [],
            "soft_limit"         : false,
            "default"            : "256MB",
            "reserve_percent"    : "0",
            "reserve_amount"     : "64MB"
        },
        "memsw" : {
            "enabled"            : true,
            "exclude_hosts"      : [],
            "exclude_vntypes"    : [],
            "default"            : "256MB",
            "reserve_percent"    : "0",
            "reserve_amount"     : "64MB"
        }
    }
}

修正したのを反映させる

[root@pbspro ~]# qmgr
Qmgr: import hook pbs_cgroups application/x-config default pbs_cgroups.json
Qmgr: quit
[root@pbspro ~]#

pbs_cgroup hookを有効にする

[root@pbspro ~]# qmgr
Qmgr: list hook
Hook pbs_cgroups
    type = site
    enabled = false
    event = execjob_begin,execjob_epilogue,execjob_end,execjob_launch,
        execjob_attach,
        execjob_resize,
        exechost_periodic,
        exechost_startup
    user = pbsadmin
    alarm = 90
    freq = 120
    order = 100
    debug = false
    fail_action = offline_vnodes
 
Qmgr: set hook pbs_cgroups enabled = true
Qmgr: list hook
Hook pbs_cgroups
    type = site
    enabled = true   <-- trueに代わる
    event = execjob_begin,execjob_epilogue,execjob_end,execjob_launch,
        execjob_attach,
        execjob_resize,
        exechost_periodic,
        exechost_startup
    user = pbsadmin
    alarm = 90
    freq = 120
    order = 100
    debug = false
    fail_action = offline_vnodes
 
Qmgr:
[root@pbspro ~]#

参照先: https://www.altair.com/resource/altair-pbs-professional-support-on-nvidia-dgx-systems


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-02-16 (日) 21:38:55 (141d)