Docker GPU 显卡分配两种方式详解 别搞混了

Docker 和 NVIDIA 官方文档里,关于 GPU 的写法不一样: 一个用 deploy.resources.reservations.devices(Docker 官方), 一个用 runtime: nvidia + 环境变量(NVIDIA 官方)。

它们都能跑,但机制不同、不能混用。 以下用同一个 Whisper GPU 服务作为示例,清楚对比这两种方式。

首先别忘记安装container toolkits

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

🟢 Docker 官方写法(Compose 规范版)

📖 参考Docker Docs – GPU support in Compose

services:
  whisper_simple_api_gpu:
    image: nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04
    environment:
      - WHISPER_MODEL_NAME=large
      - WHISPER_API_PORT=7870
    ports:
      - "7870:7870"
    volumes:
      - .:/app
    command: python -u whisper_server.py
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ["4"]
              capabilities: ["gpu"]

核心部分,单卡示例

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

核心部分,多卡指定示例

    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            device_ids: ['0', '3']
            capabilities: [gpu]

✅ 特点

  • Compose 官方字段,与 CLI --gpus 参数一致。
  • 可在 device_ids 中精确指定 GPU(如 ["4"]),或用 count 表示数量。
  • 推荐用于现代 Docker/Compose 环境。

🔵 NVIDIA 官方写法(runtime + 环境变量版)

📖 参考NVIDIA Container Toolkit – Docker specialized configurations

services:
  whisper_simple_api_gpu:
    image: nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=4
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility
      - WHISPER_MODEL_NAME=large
      - WHISPER_API_PORT=7870
    ports:
      - "7870:7870"
    volumes:
      - .:/app
    command: python -u whisper_server.py
    restart: unless-stopped

核心部分(指定smi中id为4的gpu)

    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=4
      - NVIDIA_DRIVER_CAPABILITIES=compute,utility

✅ 特点

  • 使用 nvidia-container-runtime 进行 GPU 挂载。
  • 通过环境变量 NVIDIA_VISIBLE_DEVICES=4 控制可见 GPU。
  • 仍在 Jetson 或旧版 Docker 环境中常用。
  • 不属于 Compose 规范字段,不要与 Docker 官方写法混用

⚖️ 差异对比表

项目 Docker 官方方式 NVIDIA 官方方式
核心字段 deploy.resources.reservations.devices runtime: nvidia + NVIDIA_VISIBLE_DEVICES
控制主体 Docker Compose NVIDIA Runtime
GPU 选择 device_idscount 环境变量
Compose 标准支持 ✅ 是 ❌ 否
CLI 等价命令 docker run --gpus '"device=1,2"' docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=4
能否混用 🚫 否 🚫 否

🧠 结语: Docker 官方和 NVIDIA 官方的写法都能用, 但来源不同、逻辑不同只选其一使用,不要混用。


作 者:motorbottle
链 接: https://blog.motorbottle.site/archives/629
来 源:Motor's Blog
版 权 声 明:本博客所有文章除特别声明(如【转载】)外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇