You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为已运行的nvidia-docker容器追加第二个GPU设备

运行中NVIDIA Docker容器追加第二块GPU的实现说明

核心前提

正在运行的Docker容器不支持通过标准命令热追加新的GPU设备挂载。GPU的设备节点映射、CUDA运行时环境注入是由NVIDIA Container Runtime在容器启动阶段完成的初始化流程,运行中强行修改cgroup权限、添加设备节点的操作无法让CUDA框架正常识别新GPU,大概率会出现设备初始化失败、显存访问错误的问题。

可落地的操作方案

  • 快照迁移(生产场景推荐)
    基于原有运行中容器的文件系统生成快照,用更新后的GPU参数启动新容器,全程无驱动兼容问题
    1. 对原容器的运行状态做持久化提交:docker commit <原容器ID/名称> container-snapshot:v1
    2. 启动新容器,对齐原容器所有的目录挂载、端口映射、环境变量、启动命令配置,仅将GPU参数调整为需要的配置:docker run --gpus='"device=0,1"' <原有全量启动参数> container-snapshot:v1
    3. 验证新容器内服务、CUDA环境正常后,删除旧的废弃容器即可
      注意:提交快照前尽量暂停容器内正在执行大量磁盘写入的进程,避免文件系统状态不一致。
  • 动态设备透传(仅测试场景使用)
    如果不希望中断容器内正在运行的关键任务,可手动完成设备透传,但稳定性无保障
    1. 确认宿主机上第二块GPU对应的所有关联设备节点路径,包括/dev/nvidia1、/dev/nvidia-uvm、/dev/nvidia-uvm-tools等
    2. 通过nsenter工具进入原容器的设备命名空间,将上述设备节点映射到容器对应的设备目录下,同时调整容器的cgroup设备权限列表,放开对应设备的读写访问限制
    3. 在容器内手动重载CUDA用户态驱动组件,尝试让运行时识别新增GPU
      注意:该操作跳过了NVIDIA Container Runtime的标准初始化流程,大概率会出现CUDA上下文初始化失败、显存分配异常的问题,不适合生产业务场景。
  • 元数据修改(需短暂停止容器)
    如果愿意短暂中断容器运行,可直接修改容器的持久化配置后重启,无需重新打快照
    1. 停止原运行中的容器
    2. 编辑宿主机上对应容器的元数据配置文件/var/lib/docker/containers/<容器ID>/config.v2.json,将原有GPU配置参数替换为device=0,1
    3. 启动修改后的容器即可生效
      注意:容器处于运行状态时修改该配置文件,会直接导致容器元数据损坏,无法正常启动。

常见误区提醒:直接在运行中的容器上执行docker update命令修改GPU参数是没有效果的,docker update本身不支持调整设备挂载类的配置项。

内容的提问来源于stack exchange,提问作者samusa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 22:27:08