找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3276

积分

0

好友

422

主题
发表于 21 小时前 | 查看: 1| 回复: 0

为什么要在容器里搭建开发环境呢?主要出于两个实际考虑:一来可以为不同的项目配置独立、纯净的环境,避免不同技术栈或版本之间的冲突;二来也能有效保护宿主机系统,即使容器内的环境配置出了问题,也不会影响到主机本身的稳定。

本文将详细介绍在 Ubuntu 系统中,利用 Docker 创建并配置一个能够调用 GPU、并包含 CUDA ToolkitCUDNN 的完整开发环境的步骤。其核心原理是,宿主机需安装好 NVIDIA GPU 驱动,然后通过特殊的 Docker 运行时(如 nvidia-docker)来调用宿主的 CUDA Driver,进而在容器内虚拟出 CUDA 环境以供使用。

1 搭建步骤

1.1 宿主机环境:安装 NVIDIA GPU 驱动

首先,确认你的显卡型号:

lspci | grep -i vga

然后,使用 apt 包管理器来安装推荐驱动:

sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall

安装完成后,请重启电脑。重启后,在终端运行 nvidia-smi 命令。如果能看到驱动版本和显卡信息,说明驱动安装成功。

1.2 安装 Docker

在 Ubuntu 上,可以通过 apt 直接安装 Docker:

sudo apt update
sudo apt-get install docker.io

1.3 安装 NVIDIA Container Toolkit

为了让 Docker 容器能够访问宿主机的 GPU,我们需要安装 NVIDIA Container Toolkit(过去也叫 nvidia-docker2)。安装后它会为 Docker 建立 GPU 运行时支持。

sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

安装并重启 Docker 服务后,运行以下命令来验证安装是否成功。这个命令会启动一个临时容器并运行 nvidia-smi

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

如果成功,你将看到与宿主机运行 nvidia-smi 时类似的显卡信息输出。

1.4 拉取镜像并创建容器

至此,宿主机和 Docker 的基础环境已准备完毕。接下来,我们将在容器内部署具体的 CUDA 开发环境。

NVIDIA 官方提供了预置了不同版本 CUDA 和 CUDNN 的 Docker 镜像,其标签(tag)命名非常有规律。例如,我们以 11.4.2-cudnn8-devel-ubuntu20.04 这个标签为例进行说明:

  • 11.4.2: 表示 CUDA Toolkit 的版本号。
  • cudnn8: 表示镜像中包含了 cuDNN 8 库。
  • devel: 非常重要。如果你想在容器内使用 nvcc 编译器以及完整的头文件、库文件进行开发,必须选择 devel 版本,而不是 runtime 版本。
  • ubuntu20.04: 表示镜像基于的操作系统版本。

请根据你宿主机驱动支持的 CUDA 版本,选择合适的镜像标签。这里我们拉取示例镜像:

docker pull nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04

镜像拉取成功后,即可创建我们自己的开发容器。创建时务必使用 --gpus all 参数来启用 GPU 支持。

docker run -itd -v ~/work:/work --name=Ubuntu20.04-CUDA --gpus all nvidia/cuda:11.4.2-cudnn8-devel-ubuntu20.04

这个命令创建了一个名为 Ubuntu20.04-CUDA 的守护态容器,并将宿主机的 ~/work 目录挂载到容器的 /work 目录,方便文件交换。

容器创建并运行后,可以通过以下命令进入容器并进行验证:

docker exec -it Ubuntu20.04-CUDA bash

在容器内部,分别运行 nvidia-sminvcc -V。如果前者能正常显示GPU信息,后者能正确输出 CUDA 编译器版本,那么恭喜你,一个基于 Docker 的、支持 GPU 加速的 CUDA 开发环境就已经搭建完成了!你可以在这个隔离的环境里安心地进行你的AI模型开发或高性能计算项目了。

希望这篇步骤清晰的指南能帮你顺利避坑。如果在搭建过程中遇到其他问题,或想分享你的容器化开发心得,欢迎来 云栈社区 与大家一起交流探讨。




上一篇:Windows系统如何隔离CPU实现线程独占?注册表与SetThreadAffinityMask详解
下一篇:SpringCloud LoadBalancer源码解析:微服务负载均衡核心机制剖析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-23 22:06 , Processed in 0.335186 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表