我有一台配备 48 核 CPU + 4 个 NVIDIA GPU 的 GPU 工作站。我将把这台机器变成一个小型集群,其中包含:
4 个节点 12 核 +1 CPU/节点
我已经使用以下命令在这台机器上安装了 Torque:
./configure --without-tcl --enable-nvidia-gpus --prefix=/soft/torque-5.1.1 --with-nvml-include=/usr/local/cuda/gpukit/usr/include/nvidia/gdk --with-nvml-lib=/usr/local/cuda/lib64
然后我设置/etc/hosts
为:
127.0.0.1 localhost cudaC
127.0.0.1 localhost cudaC1
127.0.0.1 localhost cudaC2
127.0.0.1 localhost cudaC3
xxx.xxx.xxx.x torqueserver
之后,我添加了以下内容/var/spool/torque/server_priv/nodes
:
cudaC np=12 gpus=4
cudaC1 np=12 gpus=1
cudaC2 np=12 gpus=1
cudaC3 np=12 gpus=1
然后启动pbsserver:
#cd /soft/torque-5.1.1/sbin
#./pbs_sever
#./pbs_sched
#./ pbs_mom
使用命令 pbsnodes 检查状态:
cudaC
state = free
power_state = Running
np = 12
ntype = cluster
status = rectime=1435734456,cpuclock=Fixed,varattr=,jobs=,state=free,netload=136578103,gres=,loadave=0.00,ncpus=48,physmem=65982324kb,availmem=86084596kb,totmem=86954864kb,idletime=72,nusers=2,nsessions=5,sessions=1519 2350 6570 6781 11017,uname=Linux cudaC 3.16.7-21-desktop #1 SMP PREEMPT Tue Apr 14 07:11:37 UTC 2015 (93c1539) x86_64,opsys=linux
mom_service_port = 15002
mom_manager_port = 15003
gpus = 4
gpu_status = gpu[3]=gpu_id=0000:83:00.0;gpu_pci_device_id=398594270;gpu_pci_location_id=0000:83:00.0;gpu_product_name=Graphics Device;gpu_display=Enabled;gpu_fan_speed=22%;gpu_memory_total=12287 MB;gpu_memory_used=23 MB;gpu_mode=Default;gpu_state=Unallocated;gpu_utilization=0%;gpu_memory_utilization=0%;gpu_temperature=43 C,gpu[2]=gpu_id=0000:82:00.0;gpu_pci_device_id=398594270;gpu_pci_location_id=0000:82:00.0;gpu_product_name=Graphics Device;gpu_display=Enabled;gpu_fan_speed=22%;gpu_memory_total=12287 MB;gpu_memory_used=23 MB;gpu_mode=Default;gpu_state=Unallocated;gpu_utilization=0%;gpu_memory_utilization=0%;gpu_temperature=43 C,gpu[1]=gpu_id=0000:03:00.0;gpu_pci_device_id=398594270;gpu_pci_location_id=0000:03:00.0;gpu_product_name=Graphics Device;gpu_display=Enabled;gpu_fan_speed=22%;gpu_memory_total=12287 MB;gpu_memory_used=23 MB;gpu_mode=Default;gpu_state=Unallocated;gpu_utilization=0%;gpu_memory_utilization=0%;gpu_temperature=45 C,gpu[0]=gpu_id=0000:02:00.0;gpu_pci_device_id=398594270;gpu_pci_location_id=0000:02:00.0;gpu_product_name=Graphics Device;gpu_display=Enabled;gpu_fan_speed=22%;gpu_memory_total=12287 MB;gpu_memory_used=45 MB;gpu_mode=Default;gpu_state=Unallocated;gpu_utilization=0%;gpu_memory_utilization=1%;gpu_temperature=39 C,driver_ver=346.46,timestamp=Wed Jul 1 09:07:36 2015
cudaC1
state = down
power_state = Running
np = 12
ntype = cluster
mom_service_port = 15002
mom_manager_port = 15003
gpus = 1
cudaC2
state = down
power_state = Running
np = 12
ntype = cluster
mom_service_port = 15002
mom_manager_port = 15003
gpus = 1
cudaC3
state = down
power_state = Running
np = 12
ntype = cluster
mom_service_port = 15002
mom_manager_port = 15003
gpus = 1
似乎只有一个节点可以工作,并且所有 4 个 GPU 都分布到这个节点。
我只是想知道我们该如何解决这个问题?
答案1
我的回答可能不是直接回答你的问题,但我几年前就讨论过这个话题了,我建议你使用泥浆而不是扭矩。据我记得扭矩不使用 CUDA_VISIBLE_DEVICES用于调度进程的环境变量无需任何额外的补丁,但这就是 NVIDIA 的初衷(因此大多数应用程序都在寻找 CUDA_VISIBLE_DEVICES)。
Slurm 通过通用资源内置了 gpu 支持。在混合环境中,您甚至可以定义多种卡类型并指定应该为您的工作使用哪种卡。
除了我们的 20 张卡设置之外,我还看到了几个更大的 gpu 集群,它们都在使用 slurm。