Ubuntu 系统 Docker 中搭建 CUDA cuDNN 开发环境
CUDA 是 NVIDIA 推出的并行计算平台和编程模型,利用 GPU 多核心架构加速计算任务,广泛应用于深度学习、科学计算等领域。cuDNN 是基于 CUDA 的深度神经网络加速库,为深度学习框架提供高效卷积、池化等操作的优化实现,提升模型训练和推理速度。
近年来,容器技术的迅速发展使得开发者在搭建开发环境时越来越多地采用容器化方案。首先,容器可以独立配置开发环境,从而避免不同项目和技术之间的环境冲突;其次,它们能够有效保护主机环境,防止因配置错误而导致系统崩溃。因此,本文将详细介绍如何在 Ubuntu 系统中利用Docker 容器创建支持 GPU、CUDA 和 cuDNN 的环境。小编将分享自己的搭建经验和具体步骤,帮助刚入门的同学们避开常见的陷阱,更加高效地进行后续的开发工作。
搭建环境
操作系统:Ubuntu24.04

显卡:Nvidia GeForce GTX 3060

Nvidia CUDA+Docker 的软件结构
为了在主机上正常运行 NVIDIA GPU 驱动并通过 Docker 调用 CUDA 驱动,需要在 Docker 之上额外实现一层支持,以确保 GPU 能够被正确使用。在创建的 Docker 容器中,会虚拟出一个 CUDA 驱动环境,从而允许在容器内安装 CUDA Toolkit 和 cuDNN。

搭建步骤
主机安装 Nvidia GPU 驱动;
主机安装 Docker Engine 以及 Docker Compose;
安装 nvidia-docker;
创建容器。
- 安装 Nvidia GPU 驱动
1.1 使用 apt 安装
检测和列出推荐硬件驱动程序
sudo apt update
sudo ubuntu-drivers devices
sudo:以管理员权限运行命令,确保有足够的权限访问硬件信息。
ubuntu-drivers:Ubuntu 提供的工具,用于管理硬件驱动程序。
devices:指定操作,列出系统中的硬件设备及其推荐驱动程序。

选择需要的驱动程序进行安装
上图中显示 550 是推荐版本,那我们就安装 550 版本
sudo apt install nvidia-driver-550
小编之前已经安装过了,所以显示

或者使用如下命令,自动安装推荐硬件驱动程序(不推荐)
sudo ubuntu-drivers autoinstall
1.2 如想手动安装,请打开 NVIDIA 网站选择合适版本下载
链接:https://www.nvidia.cn/drivers/lookup/

安装完成并重启电脑后运行命令
nvidia-smi
如果成功则显示如下信息

- 安装 Docker
链接:https://docs.docker.com/engine/install/ubuntu/
一般我们只需要 Docker Engine(Docker Compose 可选,建议安装)
如果不是第一次安装需要先卸载旧版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
设置 Docker 库
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装最新版本 Docker 包(已包含 Docker Compose)
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
小编已安装,如下所示

运行 hello-word 镜像验证是否安装成功
sudo docker run hello-world
如下显示表示 Docker Engine 已经安装成功

检查 Docker Compose 是否成功安装
docker compose version

- 安装 NVIDIA Container Toolkit
链接:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
NVIDIA Container Toolkit 是 NVIDIA 推出的一套工具集,旨在为容器化应用提供 GPU 加速支持。它能够使用户在容器环境中高效地构建和运行 GPU 加速的应用程序,尤其适用于借助 Docker 或其他容器运行时来处理依赖 NVIDIA GPU 的任务,比如深度学习训练、科学计算模拟等场景。
Configure the production repository
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 update
安装软件包
sudo apt install -y nvidia-container-toolkit
小编已安装,如下所示

检查 NVIDIA Container Toolkit 是否正确安装
nvidia-ctk --version
显示如下

- 配置 Docker
使用 nvidia-ctk 配置 Docker 运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
运行测试容器
在
链接:https://hub.docker.com/r/nvidia/cuda/tags
中按照主机的 CUDA 版本选择合适的镜像

小编的 CUDA 版本是 12.4
所以选择了 12.4.1-base-ubuntu22.04 进行测试
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
docker run:这是Docker的核心命令,用于启动一个新的容器。
–rm:这个选项表示在容器退出后自动删除容器。这有助于避免容器在运行结束后仍然占用系统资源。
–gpus all:这个选项用于启用Docker容器对NVIDIA GPU的访问。all表示将所有可用的GPU分配给容器。这需要你的系统安装了NVIDIA Docker runtime,并且支持CUDA。
nvidia/cuda:12.4.1-base-ubuntu22.04:这是Docker镜像的名称和版本。nvidia/cuda是NVIDIA官方提供的CUDA镜像,12.4.1是CUDA的版本号,base-ubuntu22.04表示这个镜像是基于Ubuntu 22.04的操作系统。
nvidia-smi:这是容器启动后要运行的命令。nvidia-smi是NVIDIA System Management Interface的缩写,用于显示GPU的状态信息,包括GPU利用率、内存使用情况、温度等。
结果如下

创建 cuDNN 容器
上一步我们在 Docker Hub 上 nvidia/cuda Docker 镜像的标签页选择的是 base 镜像,如果需要 cuDNN 选择相应的包含 cuDNN 的镜像即可。此处小编选择 12.4.1-cudnn-devel-ubuntu22.04 镜像进行拉取
docker pull nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
-cudnn: 这个后缀表示该镜像除了包含 CUDA 工具包之外,还预装了 cuDNN (NVIDIA CUDA Deep Neural Network library)。cuDNN 是一个专门为深度学习优化的 CUDA 加速库,提供了高效的神经网络计算基本模块。
-devel: 这个后缀表明这是一个 开发 (development) 版本 的镜像。通常,带有 -devel 标签的镜像会包含编译 CUDA 和 cuDNN 程序所需的头文件、库文件以及其他开发工具(例如编译器)。这使得你可以在这个镜像内部构建你的 CUDA 和深度学习应用程序。
显示如下

运行容器
docker run --gpus all -it --name test nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04
显示如下

测试 cuDNN 是否安装成功(查看对应的文件是否存在)
find /usr/lib/x86_64-linux-gnu/ -name "libcudnn*"
显示如下

至此,Docker 的 cuDNN 环境已经搭建完毕。
参考:
https://www.nvidia.cn/drivers/lookup/
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/compose/install/
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
相关文章:
Ubuntu 系统 Docker 中搭建 CUDA cuDNN 开发环境
CUDA 是 NVIDIA 推出的并行计算平台和编程模型,利用 GPU 多核心架构加速计算任务,广泛应用于深度学习、科学计算等领域。cuDNN 是基于 CUDA 的深度神经网络加速库,为深度学习框架提供高效卷积、池化等操作的优化实现,提升模型训练…...
win10彻底让图标不显示在工具栏
关闭需要不显示的软件 打开 例此时我关闭了IDEA的显示 如果说只是隐藏,鼠标拖动一个道理 例QQ 如果说全部显示不隐藏...
Java服务端性能优化:从理论到实践的全面指南
目录 引言:性能优化的重要性 用户体验视角 性能优化的多维度 文章定位与价值 Java代码层性能优化方案 实例创建与管理优化 单例模式的合理应用 批量操作策略 并发编程优化 Future模式实现异步处理 线程池合理使用 I/O性能优化 NIO提升I/O性能 压缩传输…...
人脸识别和定位别的签到系统
1、功能 基于人脸识别及定位的宿舍考勤管理小程序 (用户:宿舍公告、宿舍考勤查询、宿舍考勤(人脸识别、gps 定 位)、考勤排行、请假申请 、个人中心 管理员:宿舍管理、宿舍公告管理 学生信息管理、请假审批、发布宿舍…...
基于YOLOv8的热力图生成与可视化:支持自定义模型与置信度阈值的多维度分析
目标检测是计算机视觉领域的重要研究方向,而YOLO(You Only Look Once)系列算法因其高效性和准确性成为该领域的代表性方法。YOLOv8作为YOLO系列的最新版本,在目标检测任务中表现出色。然而,传统的目标检测结果通常以边…...
echarts+HTML 绘制3d地图,加载散点+散点点击事件
首先,确保了解如何本地引入ECharts库。 html 文件中引入本地 echarts.min.js 和 echarts-gl.min.js。 可以通过官网下载或npm安装,但这里直接下载JS文件更简单。需要引入 echarts.js 和 echarts-gl.js,因为3D地图需要GL模块。 接下来是HTM…...
Design Compiler:库特征分析(ALIB)
相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 简介 在使用Design Compiler时,可以对目标逻辑库进行特征分析,并创建一个称为ALIB的伪库(可以被认为是缓存)&…...
便携式雷达信号模拟器 —— 打造实战化电磁环境的新利器
在现代战争中,雷达信号的侦察与干扰能力直接关系到作战的成败。为了提升雷达侦察与干扰装备的实战能力,便携式雷达信号模拟器作为一款高性能设备应运而生,为雷达装备的训练、测试和科研提供了不可或缺的支持。 核心功能 便携式雷达信号模拟…...
TypeScript工程集成
以下是关于 TypeScript 工程集成 的系统梳理,涵盖基础配置、进阶优化、开发规范及实际场景的注意事项,帮助我们构建高效可靠的企业级 TypeScript 项目: 一、基础知识点 1. 项目初始化与配置 tsconfig.json 核心配置:{"compilerOptions": {"target": &…...
《P1246 编码》
题目描述 编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。 字母表中共有 26 个字母 a,b,c,⋯,z,这些特殊的单词长度不超过 6 且字母按升序排列。把所有这样的单词放在一起,按字典…...
基于Transformer框架实现微调后Qwen/DeepSeek模型的非流式批量推理
在基于LLamaFactory微调完具备思维链的DeepSeek模型之后(详见《深入探究LLamaFactory推理DeepSeek蒸馏模型时无法展示<think>思考过程的问题》),接下来就需要针对微调好的模型或者是原始模型(注意需要有一个本地的模型文件,全量微调就是saves下面的文件夹,如果是LoRA,…...
什么是 CSSD?
文章目录 一、什么是 CSSD?CSSD 的职责 二、CSSD 是如何工作的?三、CSSD 为什么会重启节点?情况一:网络和存储都断联(失联)情况二:收到其他节点对自己的踢出通知(外部 fencing&#…...
服务器磁盘io性能监控和优化
服务器磁盘io性能监控和优化 全文-服务器磁盘io性能监控和优化 全文大纲 磁盘IO性能评价指标 IOPS:每秒IO请求次数,包括读和写吞吐量:每秒IO流量,包括读和写 磁盘IO性能监控工具 iostat:监控各磁盘IO性能,…...
CentOS Linux升级内核kernel方法
目录 一、背景 二、准备工作 三、升级内核 一、背景 某些情况需要对Linux发行版自带的内核kernel可能版本较低,需要对内核kernel进行升级。例如:CentOS 7.x 版本的系统默认内核是3.10.0,该版本的内核在Kubernetes社区有很多已知的Bug&#…...
使用MetaGPT 创建智能体(1)入门
metagpt一个多智能体框架 官网:MetaGPT | MetaGPT 智能体 在大模型领域,智能体通常指一种基于大语言模型(LLM)构建的自主决策系统,能够通过理解环境、规划任务、调用工具、迭代反馈等方式完成复杂目标。具备主动推理…...
AF3 OpenFoldMultimerDataset类解读
AlphaFold3 data_modules 模块的 OpenFoldMultimerDataset 类是 OpenFoldDataset 类的子类,专门用于 多链蛋白质(Multimer) 数据集的训练。它通过引入 AlphaFold Multimer 论文 中描述的过滤步骤,来实现多链蛋白质的训练。这个类扩展了父类的功能,特别是为了处理多链蛋白质…...
【C++】多态功能细节问题分析
多态是在不同继承关系的类对象去调用同一函数,产生了不同的行为。值得注意的是,虽然多态在功能上与隐藏是类似的,但是还是有较大区别的,本文也会进行多态和隐藏的差异分析。 在继承中要构成多态的条件 1.1必须通过基类的指针或引用…...
[CISSP] [5] 保护资产安全
数据状态 1. 数据静态存储(Data at Rest) 指存储在磁盘、数据库、存储设备上的数据,例如: 硬盘、SSD服务器、数据库备份存储、云存储 安全措施 加密(Encryption):如 AES-256 加密磁盘和数据…...
EIP-712:类型化结构化数据的哈希与签名
1. 引言 以太坊 EIP-712: 类型化结构化数据的哈希与签名,是一种用于对类型化结构化数据(而不仅仅是字节串)进行哈希和签名 的标准。 其包括: 编码函数正确性的理论框架,类似于 Solidity 结构体并兼容的结构化数据规…...
spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
对比详解 1. RedisTemplate 功能:Spring Data Redis的核心模板类,提供对Redis的通用操作(如字符串、哈希、列表、集合等)。使用场景:常规的Redis增删改查操作。特点: 支持序列化配置(如String…...
基于S函数的simulink仿真
基于S函数的simulink仿真 S函数可以用计算机语言来描述动态系统。在控制系统设计中,S函数可以用来描述控制算法、自适应算法和模型动力学方程。 S函数中使用文本方式输入公式和方程,适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真…...
每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++
P8664 [蓝桥杯 2018 省 A] 付账问题 - 洛谷 (luogu.com.cn) 思路:要使方差小,那么钱不能一下付的太多,可以让钱少的全付玩,剩下还需要的钱再让钱多的付(把钱少的补上)。 将钱排序,遍历一遍&…...
迅饶科技X2Modbus网关-GetUser信息泄露漏洞
免责声明:本号提供的网络安全信息仅供参考,不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我联系,我将尽快处理并删除相关内容。 漏洞描述 该漏洞的存在是由于GetUser接口在…...
【Pandas】pandas DataFrame values
Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于获取 DataFrame 的行索引DataFrame.columns用于获取 DataFrame 的列标签DataFrame.dtypes用于获取 DataFrame 中每一列的数据类型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…...
蓝桥杯Java B组省赛真题高频考点近6年统计分类
基础考点 考点高频难度模拟9基础枚举5基础思维4基础动态规划3基础规律2基础单位换算2基础搜索 1基础双指针1基础数学1基础哈希表1基础暴力1基础Dijkstra1基础 二分1基础 中等考点 考点高频难度动态规划6中等数学5中等枚举4中等模拟3中等思维3中等贪心3中等前缀和3中等二分2中…...
关于inode,dentry结合软链接及硬链接的实验
一、背景 在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里 2.2.3 一节里,我们讲到了file,fd,inode,dentry,super_block这几个概念,在这篇博客里,我们针对inode和dentr…...
PandasAI:当数据分析遇上自然语言处理
数据科学的新范式 在数据爆炸的时代,传统的数据分析工具正面临着前所未有的挑战。数据科学家们常常需要花费70%的时间在数据清洗和探索上,而真正的价值创造时间却被大幅压缩。PandasAI的出现,正在改变这一现状——它将生成式AI的强大能力注入…...
Unity网络开发基础 (3) Socket入门 TCP同步连接 与 简单封装练习
本文章不作任何商业用途 仅作学习与交流 教程来自Unity唐老狮 关于练习题部分是我观看教程之后自己实现 所以和老师写法可能不太一样 唐老师说掌握其基本思路即可,因为前端程序一般不需要去写后端逻辑 1.认识Socket的重要API Socket是什么 Socket(套接字࿰…...
做题记录:和为K的子数组
来自leetcode 560 前言 自己只会暴力,这里就是记录一下前缀和哈希表的做法,来自灵神的前缀和哈希表:从两次遍历到一次遍历,附变形题 正文 首先,这道题无法使用滑动窗口,因为滑动窗口需要满足单调性&am…...
VMware虚拟机卡顿、CPU利用率低、编译Linux内核慢,问题解决与实验对比
目录 一、总结在前面(节约时间就只看这里)0 环境说明1 遇到的问题:2 问题的原因:3 解决办法:4 实验验证:5 关于虚拟机内核数量设置6 关于强行指定Vm能用的CPU内核 二、管理员启动,实验对比实验1…...
