文档首页/ 云容器引擎 CCE/ 常见问题/ 工作负载/ 调度策略/ 创建使用GPU虚拟化多卡均分调度功能的工作负载之后,大量Pod执行失败
更新时间:2025-05-28 GMT+08:00
分享

创建使用GPU虚拟化多卡均分调度功能的工作负载之后,大量Pod执行失败

问题现象

创建使用GPU虚拟化多卡均分调度功能的工作负载之后,大量的GPU Pod执行失败。具体示例如下:

kubectl get pods

回显结果如下:

NAME                         READY   STATUS                     RESTARTS   AGE
test-586cf9464c-54g4s        0/1     UnexpectedAdmissionError    0         57s
test-586cf9464c-58n6d        0/1     UnexpectedAdmissionError    0         10s
test1-689cf9462f-5bzcv       0/1     UnexpectedAdmissionError    0         58s
...

问题原因

使用GPU虚拟化多卡均分调度功能,集群版本与CCE AI套件(NVIDIA GPU)插件版本需要适配,具体如下:
  • 插件版本在2.1.41及以上时:集群版本在1.27.16-r20、1.28.15-r10、1.29.10-r10、1.30.6-r10、v1.31.4-r0及以上。
  • 插件版本在2.7.57及以上时:集群版本在1.28.15-r10、1.29.10-r10、1.30.6-r10、v1.31.4-r0及以上。

当集群版本不兼容时,若节点的GPU虚拟化资源未耗尽,则Pod可以正常调度。但在资源耗尽后,当前版本的kubelet无法正确处理多卡均分调度请求,导致持续调度失败的Pod堆积,引发内存泄漏,最终造成批量Pod执行失败。

解决方案

  • 如果需要继续使用GPU虚拟化多卡均分调度功能,则需要先将执行失败的工作负载删除,再将集群升级至适配版本,升级的具体步骤请参见集群升级流程。集群升级成功后,重新创建对应工作负载,即可正常调度。
  • 如果不需要使用GPU虚拟化多卡均分调度功能,则需要依次重启对应节点的kubelet组件,以恢复其性能。具体步骤如下:
    1. 执行以下命令,查看问题Pod的所在节点,记录所有节点IP,后续需要根据节点IP依次恢复节点kubelet组件。
      kubectl get pod -l volcano.sh/gpu-num  -owide

      回显结果如下:

      NAME                        READY   STATUS                      RESTARTS   AGE      IP              NODE
      test-586cf9464c-54g4s       0/1     UnexpectedAdmissionError    0          5m57s    <none>          11.84.252.4
      test-586cf9464c-58n6d       0/1     UnexpectedAdmissionError    0          5m10s    172.19.0.24     11.84.252.4
      test-586cf9464c-5bzcv       0/1     UnexpectedAdmissionError    0          5m58s    <none>          11.84.252.4
      test-586cf9464c-6bb5d       0/1     UnexpectedAdmissionError    0          6m15s    <none>          11.84.252.4
      test-586cf9464c-6r2bq       0/1     UnexpectedAdmissionError    0          5m11s    <none>          11.84.252.4
      test-586cf9464c-6rcpl       0/1     UnexpectedAdmissionError    0          6m11s    172.19.0.21     11.84.252.4
      ...
    2. 执行以下命令,删除使用GPU虚拟化多卡均分调度的工作负载,deployment请替换为对应的工作负载类型,test请替换成对应的工作负载名称。
      kubectl delete deployment test  # 删除无状态工作负载test

      回显结果如下:

      deployment.apps/test deleted
    3. 依次登录1中涉及的节点,执行以下命令,重启kubelet服务。
      systemctl restart kubelet

      在回显中输入节点密码,无错误提示则说明重启成功。重启成功后,之前执行失败的非多卡均分调度的Pod将正常调度。

相关文档