AI服务器上为容器配置GPU与资源限制的ContainerOps实践

在AI服务器上做ContainerOps配置,最先要解决的不是上Kubernetes,而是让单个容器正确拿到GPU,同时用资源限制避免一个训练任务把整机内存吃光。
本文从零基础出发,讲清安装、配置和验证三个环节,适用于单机或少量GPU服务器、使用Docker运行推理或训练容器的场景。

先确认驱动和容器运行时

配置容器GPU之前,宿主机必须已经装好与GPU匹配的NVIDIA驱动,并且nvidia-smi能正常输出。
如果这一步不通过,后面安装容器工具包也不会生效。

执行检查:

nvidia-smi

预期看到GPU型号、驱动版本和显存占用表。
若提示命令不存在,先安装驱动,不要继续往下走。
接着确认Docker已安装并运行:

docker version
docker info | grep -i runtime

docker info默认不会列出nvidia运行时,这属于正常现象,安装工具包后才会出现。

安装NVIDIA Container Toolkit

NVIDIA Container Toolkit是让Docker容器访问GPU的官方组件,它会给Docker注册一个nvidia运行时。
以Ubuntu/Debian系为例,按官方仓库方式安装:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

最后两步是关键:nvidia-ctk runtime configure负责修改Docker的运行时配置,重启Docker后生效。
执行完再运行docker info | grep -i runtime,应能看到nvidia。

用参数或Compose声明GPU与资源限制

最直接的方式是在docker run中指定GPU和资源上限:

docker run --rm --gpus all \
  --memory=16g --cpus=4 \
  --shm-size=2g \
  nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

--gpus all把全部GPU暴露给容器;--memory限制容器内存,防止OOM拖垮宿主机;--shm-size对多进程训练很重要,默认64MB往往不够。
如果只想用某一张卡,可写成--gpus '"device=0"'。

生产环境更推荐用Compose文件管理,把资源限制固化下来:

services:
  inference:
    image: nvidia/cuda:12.4.0-base-ubuntu22.04
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    mem_limit: 16g
    cpus: 4.0
    shm_size: 2gb

注意deploy.resources.reservations.devices在Compose v2中用于声明GPU,mem_limit和cpus是单机Compose的资源限制写法。
保存为compose.yaml后执行docker compose up即可。

常见报错与配置避坑

遇到could not select device driver "" with capabilities:
[[gpu]]
,
通常说明NVIDIA Container Toolkit没装好或Docker没重启,
先复查docker info里是否有nvidia运行时。

容器内nvidia-smi报驱动版本不匹配,多半是宿主机驱动与CUDA镜像版本跨度太大,换一个与驱动兼容的CUDA基础镜像即可,不要盲目在容器里重装驱动。

设置了--memory后进程被系统杀掉,
先看docker inspect里的OOMKilled字段,
再结合docker stats观察实际内存曲线,
适当上调限制,
而不是直接去掉限制。

多卡训练时容器只看到一张卡,检查--gpus写法是否被shell转义破坏,以及NVIDIA_VISIBLE_DEVICES环境变量是否被镜像覆盖。

验证配置是否真正生效

配置完成后不要只看容器是否启动,要同时验证GPU可见性和资源限制:

docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
docker stats --no-stream

第一条命令应输出与宿主机一致的GPU列表;
第二条命令应看到容器内存和CPU占用被限制在设定值以内。
再进入容器执行cat /sys/fs/cgroup/memory.max(cgroup v2环境),可核对内存上限是否与--memory一致。

如果容器能启动但GPU任务报CUDA error:
no kernel image is available
,
说明镜像的CUDA架构与GPU算力不匹配,
属于镜像选择问题,
不是ContainerOps配置本身。

把以上步骤跑通后,AI服务器的容器化基础就算落地了。
后续再接入编排平台或监控时,GPU和资源限制这两项配置仍然是排错时最先要核对的地方。

分享到:
上一篇
AI服务器GitOps配置:用Argo CD把GPU推理发布管起来
下一篇
用kubectl和RBAC把AI服务器的K8s运维权限管起来
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意