【Docker】在容器中使用 NVIDIA GPU

解决容器 GPU 设备映射问题,实现 AI 应用加速
🔗 官方文档:NVIDIA Container Toolkit GitHub


常见错误排查

若在运行测试容器时遇到以下错误:

docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
或
docker: Error response from daemon: unknown or invalid runtime name: nvidia

请按本教程完成 NVIDIA Container Toolkit 的安装与配置。


一、环境准备

1.1 验证 NVIDIA 驱动状态

nvidia-smi

预期输出(注意右上角显示的 CUDA 版本):

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15    Driver Version: 550.54.15    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+

问题处理

  • 若命令未找到或提示驱动未安装,请访问 NVIDIA 驱动下载中心

  • Ubuntu 快速安装驱动命令:

    sudo apt install nvidia-driver-550-server
    

二、安装 NVIDIA Container Toolkit

2.1 添加官方软件源

# 安装必要工具
sudo apt-get update
sudo apt-get install -y curl gnupg# 导入 NVIDIA GPG 密钥
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg# 添加软件源(适配 Ubuntu 24.04)
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

2.2 安装 Toolkit 组件

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

📘 官方安装指南:NVIDIA Container Toolkit Installation Docs


三、配置 Docker 运行时

3.1 生成运行时配置

sudo nvidia-ctk runtime configure --runtime=docker

该命令会自动修改 Docker 配置文件 /etc/docker/daemon.json,添加以下内容:

{"runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}
}

3.2 重启 Docker 服务

sudo systemctl restart docker

四、功能验证

4.1 运行 GPU 测试容器

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

关键验证点

  1. 容器内输出的 GPU 信息与宿主机 nvidia-smi 一致
  2. 无任何错误提示

成功输出示例

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15    Driver Version: 550.54.15    CUDA Version: 12.4     |
|-------------------------------+----------------------+----------------------+

五、高级配置技巧

5.1 指定 GPU 数量

# 仅使用 2 块 GPU
docker run --rm --gpus 2 nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi# 按设备序列号指定
docker run --rm --gpus '"device=0,1"' nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

5.2 持久化模式设置

# 启用持久化模式(防止 GPU 休眠)
sudo nvidia-smi -pm 1

🔧 GPU 管理工具:nvidia-smi 官方文档


六、使用场景

NVIDIA Container Toolkit 适用于以下典型容器化 AI 应用场景:

  • 大模型推理部署:如部署 LLaMA、ChatGLM、BERT 等模型,使用 GPU 显著提升响应速度与并发处理能力。

  • 深度学习训练任务:如使用 PyTorch、TensorFlow、JAX 等框架在容器中进行分布式训练,便于复现实验环境。

  • 多模型并行服务:结合 --gpus 参数可以精确分配 GPU 资源,实现在单机多服务并行部署,提升资源利用率。

  • 视频处理与 AI 编解码:结合 FFmpeg + CUDA / TensorRT 加速视频转码、超分辨率、目标检测等任务。

  • 开发调试环境隔离:避免主机污染、实现多人多项目的 GPU 环境解耦,提升研发效率与可维护性。


七、总结

  • Docker 原生不支持 GPU,需要借助 NVIDIA Container Toolkit 提供的运行时扩展 nvidia-container-runtime 实现 GPU 透传。

  • 容器运行时可获得 几乎无性能损耗的 GPU 使用能力,适用于从研发到生产的多种场景。

  • 配置过程主要包括三步:安装驱动 → 安装 Toolkit → 配置 Docker,每一步都可通过 nvidia-smi 验证效果。

  • 支持灵活的 GPU 指定方式,便于构建资源隔离的 AI 工作负载。

💡 提示:Toolkit 安装后,docker run --gpus all 成为使用 GPU 容器的标准入口,请确保测试成功后再部署正式任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过Quartus II实现Nios II编程

目录 一、认识Nios II二、使用Quartus II 18.0Lite搭建Nios II硬件部分三、软件部分四、运行项目 一、认识Nios II Nios II软核处理器简介 Nios II是Altera公司推出的一款32位RISC嵌入式处理器,专门设计用于在FPGA上运行。作为软核处理器,Nios II可以通…

JAVA设计模式——(三)桥接模式

JAVA设计模式——(三)桥接模式(Bridge Pattern) 介绍理解实现武器抽象类武器实现类涂装颜色的行为接口具体颜色的行为实现让行为影响武器修改武器抽象类修改实现类 测试 适用性 介绍 将抽象和实现解耦,使两者可以独立…

k8s 证书相关问题

1.重新生成新证书 kubeadm init phase certs apiserver-etcd-client --config ~/kubeadm.yaml这个命令表示生成 kube-apiserver 连接 etcd 使用的证书,生成后如下 -rw------- 1 root root 1.7K Apr 23 16:35 apiserver-etcd-client.key -rw-r--r-- 1 root root 1.2K Apr 23 …

比较:AWS VPC peering与 AWS Transit Gateway

简述: VPC 对等连接和 Transit Gateway 用于连接多个 VPC。VPC 对等连接提供全网状架构,而 Transit Gateway 提供中心辐射型架构。Transit Gateway 提供大规模 VPC 连接,并简化了 VPC 间通信管理,相比 VPC 对等连接,支持大量 VPC 的 VPC 间通信管理。 VPC 对等连接 AWS V…

制造企业PLM深度应用:2025年基于PDCA循环的7项持续改进指标

制造企业的产品生命周期管理(PLM)在数字化转型的浪潮中扮演着至关重要的角色。PLM深度应用不仅能够提升产品研发效率、保证产品质量,还能增强企业在市场中的竞争力。随着2025年智能制造目标的推进,基于PDCA循环的持续改进对于PLM的…

极狐GitLab 的压缩和合并是什么?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 压缩和合并 (BASIC ALL) 在你处理一个特性分支时,通常会创建一些小的、独立的提交。这些小提交帮助描述构建特性…

解耦旧系统的利器:Java 中的适配器模式(Adapter Pattern)实战解析

在现代软件开发中,我们经常需要与旧系统、第三方库或不一致接口打交道。这时候,如果能优雅地整合这些不兼容组件,又不破坏原有结构,就需要一位“翻译官” —— 适配器模式。本文将通过 Java 实例,详细讲解适配器模式的…

03-谷粒商城笔记

一个插件的install和生命周期的报错是不一样的 Maven找不到ojdbc6和sqljdbc4依赖包 这时候我找到了jar包,然后我就先找到一个jar安装到了本地仓库。 在终端上进行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …

黑马点评redis改 part 5

达人探店 发布探店笔记 那第一张表block表它里边的结构呢是这个 首先呢第一个字段是i d,就是主键,第二个呢是shop id,就是商户你发的这个比例啊,它是跟哪个商户有关系的。第三个呢用户id就是谁发的这篇笔记,第四个呢标…

【PCB工艺】运放电路中的负反馈机制

通过运算方法器电路设计详细解释负反馈机制(Negative Feedback) 负反馈 是控制系统、电子电路、神经系统等多个领域中非常核心的概念。特别在运算放大器(Op-Amp)电路中,负反馈是实现精确控制和高稳定性的关键机制。 …

声纹振动传感器在电力监测领域的应用

声纹振动传感器在电力监测领域有多种应用,主要包括以下几个方面: 变压器监测 故障诊断:变压器在运行过程中会产生特定的声纹和振动信号,当变压器内部出现故障,如绕组短路、铁芯松动、局部放电等,其声纹和振…

7、sentinel

控制台访问地址&#xff1a;http://localhost:8080/ 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>配置文件 spring:cloud:sentinel:transpo…

线程封装

目录 makefile Thread.hpp main.cc 以面向对象的方式造轮子 #ifndef _THREAD_HPP__ // 如果没有定义过 _THREAD_HPP__ #define _THREAD_HPP__ // 则定义 _THREAD_HPP__// 这里是头文件的实际内容&#xff08;类、函数声明等&#xff09;#endif // 结束条件…

【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性

在Maven项目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置&#xff0c;并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…

极狐GitLab 的合并请求部件能干什么?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并请求部件 (BASIC ALL) 合并请求的 概述 页面显示了来自服务的状态更新&#xff0c;这些服务会对您的合并请求执行操作。…

26、C# 中是否可以继承String类?为什么?

在 C# 中&#xff0c;不能直接继承 String 类&#xff08;System.String&#xff09;。这是由于以下几个原因&#xff1a; 1、String 类是 sealed 的 String 类在 .NET 中被标记为 sealed&#xff0c;这意味着它是一个密封类&#xff0c;不能被继承。 sealed 关键字的作用是防…

deeplab语义分割训练自定数据集

链接&#xff1a;https://pan.baidu.com/s/1KkkM1rLfyiMPtYLycpnxmg?pwdj2rd 提取码&#xff1a;j2rd --来自百度网盘超级会员V2的分享 采用数据集&#xff1a; https://aistudio.baidu.com/datasetdetail/130647 采用代码&#xff1a; https://github.com/jfzhang95/pyt…

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…

12、高阶组件:魔法增幅器——React 19 HOC模式

一、魔法增幅器的本质 "高阶组件是魔法师用咒语叠加的炼金术&#xff0c;"霍格沃茨魔咒研究院院长凝视着发光的增幅器&#xff0c;"通过函数式能量场的嵌套&#xff0c;让基础组件获得预言家日报式的逻辑继承&#xff01;" ——以神秘事务司的「维度叠加理…

Qt creator 16.0.1 语言家失效解决方法

一、在菜单“工具-->外部”里面没有语言家、更新翻译、发布翻译工具。 二、解决方法 手工添加 1、添加目录 2、添加工具 更新翻译 (lupdate) %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate %{CurrentDocument:Project:FilePath} %{CurrentDocument:Project:Path}…