Docker Compose调用GPU失败:runtime:nvidia无效且device_requests不被允许
解决Docker Compose GPU服务启动失败问题
问题分析
你遇到的两个错误对应不同的配置问题:
- 第一个错误
unknown or invalid runtime name: nvidia:Docker守护进程未加载nvidia runtime,通常是安装NVIDIA Toolkit后未重启Docker导致,但你无法重启共享机器,需换用其他配置方式。 - 第二个错误
Additional property device_requests is not allowed:device_requests是Docker Swarm集群部署的专属配置字段,单机Docker Compose环境不支持该字段。
可行解决方案(无需重启Docker)
方案1:使用Compose v2支持的资源预留字段
Docker Compose v2.28.1支持通过deploy.resources.reservations.devices配置GPU,无需依赖预配置的nvidia runtime,修改后的docker-compose.yml如下:
services: hello-app: image: python:3.10-slim command: python -m http.server 8000 ports: - "8000:8000" working_dir: /app volumes: - ./public:/app gpu-test: image: nvidia/cuda:12.2.0-base-ubuntu22.04 command: nvidia-smi stdin_open: true tty: true deploy: resources: reservations: devices: - driver: nvidia count: all # 可指定具体GPU数量,比如1 capabilities: [gpu]
方案2:直接挂载GPU设备文件(底层兼容方案)
如果方案1不生效,可直接将主机的GPU设备文件挂载到容器,配合环境变量让CUDA识别GPU,配置如下:
services: hello-app: image: python:3.10-slim command: python -m http.server 8000 ports: - "8000:8000" working_dir: /app volumes: - ./public:/app gpu-test: image: nvidia/cuda:12.2.0-base-ubuntu22.04 command: nvidia-smi stdin_open: true tty: true volumes: - /dev/nvidia0:/dev/nvidia0 - /dev/nvidiactl:/dev/nvidiactl - /dev/nvidia-modeset:/dev/nvidia-modeset - /dev/nvidia-uvm:/dev/nvidia-uvm - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools environment: - NVIDIA_VISIBLE_DEVICES=all
验证
运行以下命令测试GPU服务:
docker compose up gpu-test
若配置正确,会输出GPU的硬件信息。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

