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;
创建容器。

  1. 安装 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

如果成功则显示如下信息
在这里插入图片描述

  1. 安装 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

在这里插入图片描述

  1. 安装 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

显示如下
在这里插入图片描述

  1. 配置 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

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

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

相关文章

高密度任务下的挑战与破局:数字样机助力火箭发射提效提质

2025年4月1日12时,在酒泉卫星发射中心,长征二号丁运载火箭顺利升空,成功将一颗卫星互联网技术试验卫星送入预定轨道,发射任务圆满完成。这是长征二号丁火箭的第97次发射,也是长征系列火箭的第567次发射。 执行本次任务…

关于SQL子查询的使用策略

在 SQL 优化中,一般遵循**“非必要不使用子查询”**的原则,因为子查询可能会带来额外的计算开销,影响查询效率。但是,并不是所有子查询都需要避免,有时子查询是最优解,具体要根据实际场景选择合适的优化方式…

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…

2.pycharm保姆级安装教程

一、pycharm安装 1.官网上下载好好软,双击打开 2.下一步 3.修改路径地址 (默认也可以) 4.打勾 5.安装 不用重启电脑 二、添加解释器 1.双击软件,打开 2.projects – new project 3.指定项目名字,项目保存地址,解释器 4.右击 – …

zk基础—4.zk实现分布式功能二

大纲 1.zk实现数据发布订阅 2.zk实现负载均衡 3.zk实现分布式命名服务 4.zk实现分布式协调(Master-Worker协同) 5.zk实现分布式通信 6.zk实现Master选举 7.zk实现分布式锁 8.zk实现分布式队列和分布式屏障 4.zk实现分布式协调(Master-Worker协同) (1)Master-Worker架构…

Java 实现 字母异位词分组

在这篇博客中,我们将详细解析如何使用 Java 代码来解决 字母异位词分组这个经典的算法问题。我们会逐步分析代码逻辑,并探讨其时间复杂度及优化思路。 题目描述 给定一个字符串数组 strs,请将字母异位词组合在一起。字母异位词是指由相同字…

【Ragflow】10. 助理配置参数详细解析/模型响应加速方法

概述 Ragflow的助理配置中,有很多参数,尽管官方文档给出了一定程度的解释,但不够详细。 本文将对各项参数进行更详细的解释说明,并进一步挖掘某些参数中隐含的潜在陷阱。 助理设置 空回复 含义:输入的问题若未能在…

Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?

如何指定运行amd64架构的ubuntu Docker 下面这个docker命令如何指定运行amd64架构的ubuntu Docker? docker run -it -v $(pwd):/workspace ubuntu:20.04 bash这个命令已经非常接近正确运行一个基于 amd64 架构的 Ubuntu 容器了,但如果你想明确指定运行…

ColPali:基于视觉语言模型的高效文档检索

摘要 文档是视觉丰富的结构,不仅通过文本传递信息,还包括图表、页面布局、表格,甚至字体。然而,由于现代检索系统主要依赖从文档页面中提取的文本信息来索引文档(通常是冗长且脆弱的流程),它们…

使用C++实现HTTP服务

天天开心!!! 阅读本篇文章之前,请先阅读HTTP基础知识 传送门----> HTTP基础知识 文章目录 一、CWeb服务器(核心代码WebServer.cpp)二、静态文件结构三、编译和运行四、访问测试 一、CWeb服务器&#xff…

Reactive编程入门:Project Reactor 深度指南

文章目录 4.2.1 创建 Flux 和 MonoFlux 基础创建方式高级创建模式Mono 创建方式 4.2.2 订阅与数据处理基础订阅模式数据处理操作符 4.2.3 核心操作符深度解析flatMap 操作符zip 操作符buffer 操作符 高级组合模式复杂流处理示例背压处理策略 测试响应式流性能优化技巧 React 编…

【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案

前言 自适应进化宣言 当监控网络精准定位病灶,真正的挑战浮出水面:系统能否像生物般自主进化? 五维感知——通过设备传感器实时捕获环境指纹(如地铁隧道弱光环境自动切换省电渲染) 基因调参——150个性能参数在遗传算…

PQ以及有关索引的笔记Faiss: The Missing Manual

参考Faiss 索引结构总结: 为了加深记忆,介绍一下Inverted File Index(IVF)的名字由来: IVF索引的名字源自“倒排文件”(Inverted File)的概念。在传统的信息检索中,倒排文件是一种索…

win10彻底让图标不显示在工具栏

关闭需要不显示的软件 打开 例此时我关闭了IDEA的显示 如果说只是隐藏,鼠标拖动一个道理 例QQ 如果说全部显示不隐藏

关税核爆72小时!跨境矩阵防御战紧急打响

一、T86崩塌:全球贸易链的至暗时刻 (配图:美国海关系统深夜弹出红色警报) 5月2日凌晨2:17,杭州某光伏企业的供应链系统突然发出刺耳警报——其价值1800万美元的逆变器模块被划入34%关税清单。这场代号"黑天鹅突…

蓝桥杯Java B组省赛真题题型近6年统计分类

困难题 题号题型分值代码量难度通过率内容2024-F解答1581困难0.12最短路问题 Dijkstra 期望2024-G解答20116困难0.19模拟 暴力 搜索 DFS 剪纸 枚举2023-H解答2070困难0动态规划2022-H解答20109困难0.032022-J解答25141困难0搜索2021-H解答2041困难0.18二分 思维 规律2021-I解答…

【网络流 图论建模 最大权闭合子图】 [六省联考 2017] 寿司餐厅

题目描述: P3749 [六省联考 2017] 寿司餐厅 题目描述 Kiana 最近喜欢到一家非常美味的寿司餐厅用餐。 每天晚上,这家餐厅都会按顺序提供 n n n 种寿司,第 i i i 种寿司有一个代号 a i a_i ai​ 和美味度 d i , i d_{i, i} di,i​&…

前端面试题(三):axios有哪些常用的方法

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一些常用的方法来处理不同类型的请求。以下是 Axios 中常用的一些方法: 1. axios.get() 用于发送 GET 请求,从服务器获取数据。 axios.get(/api/d…

python match case语法

学习路线:B站 普通的if判断 def if_traffic_light(color):if color red:return Stopelif color yellow:return Slow downelif color green:return Goelse:return Invalid colorprint(if_traffic_light(red)) # Output: Stop print(if_traffic_light(yellow)) …

LLaMA-Factory大模型微调全流程指南

该文档为LLaMA-Factory大模型微调提供了完整的技术指导,涵盖了从环境搭建到模型训练、推理和合并模型的全流程,适用于需要进行大模型预训练和微调的技术人员。 一、docker 容器服务 请参考如下资料制作 docker 容器服务,其中,挂…