elastic-gpu-scheduler
elastic-gpu-scheduler copied to clipboard
gpu-core分配策略
对于gpu-core分配策略的设计有不解之处
阅读scheduler和agent的代码后发现在agent中通过这段代码把pod获得的设备传入:
if len(devicesIDs) > 100 {
for i := 0; i < len(devicesIDs)/100; i++ {
devices = append(devices, &pluginapi.DeviceSpec{
ContainerPath: fmt.Sprintf("/host/dev/elastic-gpu-%s-%d", faker, i),
HostPath: fmt.Sprintf("/dev/elastic-gpu-%s-%d", faker, i),
Permissions: "rwm",
})
}
}
在当前设计下,如果某节点有3张GPU,有2个elasticgpu.io/gpu-core为150的pod都被调度到该节点,那么调度器会给这两个pod都只挂载一张显卡。此时该节点的gpu-core资源已经是300/300,不会再有其他需要gpu-core资源的pod会被调度到该节点,但该节点上只有两张显卡被挂载利用起来,还有一张显卡处于空置状态。
我想了解一下这是设计的Bug还是特意设计成这样的呢?
100 后是转变为整卡分配模式,也即需要指定为 100 的整数倍。150代表1张卡,剩余50确实是被调度器占了。我在下个版本加个 validation 判断。