1. 阿里云托管版ACK限制问题
1.1. 问题描述
想要使用腾讯云GPUManager调度ACK集群中的GPU资源,但是安装过程需要修改kube-scheduler,该怎么处理?
1.2. 问题解答
阿里云托管Pro版ACK,因为无法对kube-scheduler配置进行修改,所以无法安装腾讯云的GPUManager,只能安装阿里云的GPUShare。
想要完全自主控制K8S集群,最好还是购买专有版ACK。
2. 阿里云ACK GPU节点notready问题
2.1. 问题描述
阿里云GPU机器,安装nvidia-docker后,测试跑GPU容器正常。
但是,机器加入到阿里云托管Pro版ACK,安装了ack-ai-installer后,发现GPU节点处于notready状态,偶尔变成ready状态,也会很快再次变成notready。
2.2. 解决方案
修改/etc/docker/daemon.json,去掉"default-runtime": "nvidia"
后,GPU节点变成ready状态。
3. 阿里云ACK GPU调度失败问题
3.1. 问题描述
解决完阿里云ACK GPU节点notready问题后,开始尝试调度GPU。
GPU调度时会报错Insufficient aliyun.com/gpu-mem,而且使用kubectl inspect cgpu
也找不到GPU资源。
查看kube-system中的gpushare-device-plugin,都没有 running,应该就是这里的问题,设备插件没有正常运行。
gpushare-device-plugin报错:init nvml failed,reason: could not load NVML library
尝试在GPU节点运行GPU容器:
1 | docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi |
启动卡死,一直没有反应,而且系统重出现大量的/usr/bin/nvidia-container-toolkit prestart
进程。
kill掉docker run
,重启docker后,/usr/bin/nvidia-container-toolkit prestart
进程消失。
多次尝试运行GPU容器时,极少情况下会出现报错:
starting container process caused: exec: “nvidia-smi”: executable file not found in $PATH: unknown.
3.2. 报错排查
kubelet、docker日志中缺少有用的报错信息。
重启kubelet、docker、containerd,无效。
降级docker版本到19.03.5,无效。
重新安装nvidia-docker2和nvidia-container-runtime,无效。
修改/etc/docker/daemon.json,加回"default-runtime": "nvidia"
,无效。
而且修改后启动普通容器也会卡住,看起来大概率是runtime的问题。
最终找阿里云售后帮助解决,给出的结论是:我们手动安装的nvidia-docker,和ACK自动安装的nvidia-container-runtime冲突了,需要重新添加节点,添加时选择自动添加节点,节点的系统会被重装。
参考文档:
- 《K8S节点异常问题排查》
- 《Docker使用GPU》
- 《K8S使用GPU》
- “exec: "nvidia-smi": executable file not found in $PATH”.
- WARNING: The NVIDIA Driver was not detected. GPU functionality will not be available