【Docker】在容器中使用 NVIDIA GPU

news2025/4/22 19:34:52

解决容器 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.coloradmin.cn/o/2340306.html

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

相关文章

机器人进阶---视觉算法(五)仿射变换和投影变换有什么区别

仿射变换和投影变换有什么区别 1. 定义2. 几何特性3. 变换矩阵4. 应用场景5. Python代码示例仿射变换投影变换6. 总结仿射变换和投影变换都是图像处理中常用的几何变换方法,但它们在变换性质、应用场景和变换矩阵等方面存在一些关键区别。 1. 定义 仿射变换 (Affine Transform…

如何在 Amazon EC2 上部署 Java(Spring Boot 版)

让我们学习如何将 Java Spring Boot Web 服务器部署到 Amazon EC2。每月只需 3 美元。 使用 Azure,您可能不知道要花费多少钱。 Spring Boot 项目示例 在本教程中,我们将重点介绍如何将 Java Spring Boot 服务器部署到 Amazon EC2,因此我们不…

IDEA打不开、打开报错

目录 场景异常原因解决 场景 1、本机已经安装了IDEA 2、再次安装另外一个版本的IDEA后打不开、打开报错 异常 这里忘记截图了。。。 原因 情况1-打不开:在同一台电脑安装多个IDEA是需要对idea的配置文件进行调整的,否则打不开 情况2-打开报错&#…

【React】项目的搭建

create-react-app 搭建vite 搭建相关下载 在Vue中搭建项目的步骤:1.首先安装脚手架的环境,2.通过脚手架的指令创建项目 在React中有两种方式去搭建项目:1.和Vue一样,先安装脚手架然后通过脚手架指令搭建;2.npx create-…

CSS例子 > 图片瀑布流布局(vue2)

<template><div class"container"><!-- 临时容器用于计算高度 --><div v-if"!isLayoutReady" class"temp-container"><divv-for"(item, index) in list":key"temp- index":ref"(el) > …

1.2软考系统架构设计师:系统架构的定义与作用 - 练习题附答案及超详细解析

系统架构定义与作用综合知识单选题 题目覆盖核心概念、发展历程、设计原则、评估标准及易混淆点&#xff0c;附答案解析&#xff1a; 1. 系统架构的标准定义源自于以下哪个标准&#xff1f; A. ISO/IEC 9126 B. IEEE 1471-2000 C. TOGAF 9.2 D. ITIL v4 答案&#xff1a;B 简…

关于springmvc的404问题的一种猜测解决方案

本文是记录关于在学习动力结点老杜的springmvc时候遇到的404报错的一种解决方式&#xff1b; 由于本人之前学过老杜的springmvc&#xff0c;且运行成功&#xff0c;当时使用的是tomcat10.1.19版本。 idea使用2023.3.2版本。 而这次进行回顾的时候&#xff0c;使用tomcat10.0.1…

使用Postman调测“获取IAM用户Token”接口实际操作

概述 Postman是网页调试与辅助接口调用的工具&#xff0c;具有界面简洁清晰、操作方便快捷的特性&#xff0c;可以处理用户发送的HTTP请求&#xff0c;例如&#xff1a;GET&#xff0c;PUT、POST&#xff0c;DELETE等&#xff0c;支持用户修改HTTP请求中的参数并返回响应数据。…

如何测试雷达与相机是否时间同步?

在多传感器融合系统中&#xff0c;相机与雷达的协同感知已成为环境理解的关键。相机通过捕捉纹理信息识别物体类别&#xff0c;而雷达利用激光或毫米波实现全天候精确测距。两者的数据融合既能避免单一传感器缺陷&#xff08;如相机受光照影响、雷达缺乏语义信息&#xff09;&a…

爆肝整理!Stable Diffusion的完全使用手册(二)

继续介绍Stable Diffusion的文生图界面功能。 往期文章详见: 爆肝整理&#xff01;Stable Diffusion的完全使用手册&#xff08;一&#xff09; 下面接着对SD的文生图界面的进行详细的介绍。本期介绍文生图界面的截图2&#xff0c;主要包含生成模块下的采用方法、调度类型、迭…

OpenCV day5

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 目录 9.cv2.adaptiveThreshold(): 10.cv2.split()&#xff1a; 11.cv2.merge()&#xff1a; 12.cv2.add()&#xff1a; 13.cv2.subtract()&#xff1a; 14.cv2.multiply()&#xff1a; 15.cv2.divide()&#xff1a; 1…

基于Spring Boot+微信小程序的智慧农蔬微团购平台-项目分享

基于Spring Boot微信小程序的智慧农蔬微团购平台-项目分享 项目介绍项目摘要目录系统功能图管理员E-R图用户E-R图项目预览登录页面商品管理统计分析用户地址添加 最后 项目介绍 使用者&#xff1a;管理员、用户 开发技术&#xff1a;MySQLSpringBoot微信小程序 项目摘要 随着…

WPF的发展历程

文章目录 WPF的发展历程引言起源与背景&#xff08;2001-2006&#xff09;从Avalon到WPF设计目标与创新理念 WPF核心技术特点与架构基础架构与渲染模型关键技术特点MVVM架构模式 WPF在现代Windows开发中的地位与前景当前市场定位与其他微软UI技术的关系未来发展前景 社区贡献与…

Franka机器人ROS 2来袭:解锁机器人多元应用新可能

前言&#xff1a; 在机器人技术蓬勃发展的当下&#xff0c;每一次创新都可能为行业带来新的变革。2025年3月12日&#xff0c;Franka Robotics发布的Franka ROS 2软件包首次版本0.1.0&#xff0c;将著名的franka_ros软件包引入当前的ROS 2 LTS Humble Hawksbill&#xff0c;这一…

树莓派5+Vosk+python实现语音识别

简介 Vosk是语音识别开源框架&#xff0c;支持二十种语言 - 中文&#xff0c;英语&#xff0c;印度英语&#xff0c;德语&#xff0c;法语&#xff0c;西班牙语&#xff0c;葡萄牙语&#xff0c;俄语&#xff0c;土耳其语&#xff0c;越南语&#xff0c;意大利语&#xff0c;荷…

数据结构——顺序表(C语言实现)

1.顺序表的概述 1.1 顺序表的概念及结构 在了解顺序表之前&#xff0c;我们要先知道线性表的概念&#xff0c;线性表&#xff0c;顾名思义&#xff0c;就是一个线性的且具有n个相同类型的数据元素的有限序列&#xff0c;常见的线性表有顺序表、链表、栈、队列、字符串等等。线…

STP原理与配置以及广播风暴实验STP实验

学习目标 环路引起的问题 掌握STP的工作原理 掌握STP的基本配置 STP的配置 环路引起的问题 一、广播风暴&#xff08;Broadcast Storm&#xff09; 问题原理&#xff1a; 交换机对广播帧&#xff08;如 ARP 请求、DHCP 发现报文&#xff09;的处理方式是洪泛&#xff0…

网络不可达network unreachable问题解决过程

问题&#xff1a;访问一个环境中的路由器172.16.1.1&#xff0c;发现ssh无法访问&#xff0c;ping发现回网络不可达 C:\Windows\System32>ping 172.16.1.1 正在 Ping 172.16.1.1 具有 32 字节的数据: 来自 172.16.81.1 的回复: 无法访问目标网。 来自 172.16.81.1 的回复:…

力扣经典拓扑排序

207. 课程表&#xff08;Course Schedule&#xff09; 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表…

【第16届蓝桥杯C++C组】--- 2025

hello呀&#xff0c;小伙伴们&#xff0c;这是第16届蓝桥杯第二道填空题&#xff0c;和第一道填空题一样也是十分基础的题目&#xff0c;有C语言基础基本都可以解&#xff0c;下面我讲讲我当时自己的思路和想法&#xff0c;如果你们有更优化的代码和思路&#xff0c;也可以分享…