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

检测和列出推荐硬件驱动程序

bash 复制代码
sudo apt update
sudo ubuntu-drivers devices

sudo:以管理员权限运行命令,确保有足够的权限访问硬件信息。

ubuntu-drivers:Ubuntu 提供的工具,用于管理硬件驱动程序。

devices:指定操作,列出系统中的硬件设备及其推荐驱动程序。

选择需要的驱动程序进行安装

上图中显示 550 是推荐版本,那我们就安装 550 版本

bash 复制代码
sudo apt install nvidia-driver-550

小编之前已经安装过了,所以显示

或者使用如下命令,自动安装推荐硬件驱动程序(不推荐)

bash 复制代码
sudo ubuntu-drivers autoinstall

1.2 如想手动安装,请打开 NVIDIA 网站选择合适版本下载

链接:https://www.nvidia.cn/drivers/lookup/

安装完成并重启电脑后运行命令

bash 复制代码
nvidia-smi

如果成功则显示如下信息

  1. 安装 Docker
    链接:https://docs.docker.com/engine/install/ubuntu/
    一般我们只需要 Docker Engine(Docker Compose 可选,建议安装)
    如果不是第一次安装需要先卸载旧版本
bash 复制代码
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

设置 Docker 库

bash 复制代码
# 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)

bash 复制代码
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

小编已安装,如下所示

运行 hello-word 镜像验证是否安装成功

bash 复制代码
sudo docker run hello-world

如下显示表示 Docker Engine 已经安装成功

检查 Docker Compose 是否成功安装

bash 复制代码
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

bash 复制代码
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

从存储库更新包列表

bash 复制代码
sudo apt update

安装软件包

bash 复制代码
sudo apt install -y nvidia-container-toolkit

小编已安装,如下所示

检查 NVIDIA Container Toolkit 是否正确安装

bash 复制代码
nvidia-ctk --version

显示如下

  1. 配置 Docker
    使用 nvidia-ctk 配置 Docker 运行时
bash 复制代码
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 进行测试

bash 复制代码
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 镜像进行拉取

bash 复制代码
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 和深度学习应用程序。

显示如下

运行容器

bash 复制代码
docker run --gpus all -it --name test nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04

显示如下

测试 cuDNN 是否安装成功(查看对应的文件是否存在)

bash 复制代码
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

相关推荐
FoldWinCard7 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计9 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1239 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质9 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX9 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.9 小时前
Linux系统管理
linux·运维
阿龙的工作记录10 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手10 小时前
Linux的基本指令
linux·运维·服务器
hkj880810 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动12 小时前
Linux编程笔记3【个人用】
linux·笔记