# Docker 运行支持 GPU 的容器
本文档仅提供一个容器下使用GPU参考案例,实际生产场景建议使用物理机,可跳过前面虚拟机的设置部分(从安装GPU驱动开始)
# 环境
- 服务器:Dell R730
- 显卡:GeForce GTX 1060 6GB
- 宿主机系统:VMware ESXi 6.7
- PCI设备:GPU Passthrough (直通)模式
- 虚拟机兼容性: ESXi 6.7 Update 2 及更高办版本
- 虚拟机系统:Ubuntu 22.04.5 LTS
# 虚拟机设置
内存:预留所有客户机内存
虚拟机设置,配置参数:
pciPassthru.use64bitMMIO=TRUE pciPassthru.64bitMMIOSizeGB=64 hypervisor.cpuid.v0=FALSE
引导选项:EFI (非安全引导)
添加PCI设备:GeForce GTX 1060 6GB
# 安装GPU驱动
安装前可通过以下命令检查是否能读取到GPU
lspci |grep VGA
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
03:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1060 6GB] (rev a1)
# 依赖安装
# 安装编译依赖和当前运行的 Linux 内核版本对应的头文件
apt install build-essential linux-headers-$(uname -r)
apt install pkg-config libglvnd-dev
# 查看gcc版本
gcc --version
# 版本:gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
# 驱动下载
官方地址: https://www.nvidia.cn/drivers/unix/
点击:最新的产品分支版本 - 570.133.07
驱动下载链接: https://cn.download.nvidia.com/XFree86/Linux-x86_64/570.133.07/NVIDIA-Linux-x86_64-570.133.07.run
# 配置调整
# (可选)启用对未正式支持的 GPU 的支持(针对某些使用消费类型显卡的场景可能需要开启)
cat >> /etc/modprobe.d/nvidia.conf << EOF
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
EOF
# Nouveau 是一个开源的 NVIDIA 显卡驱动程序,默认在许多 Linux 发行版中使用
# 禁用 Nouveau 驱动程序
cat >> /etc/modprobe.d/blacklist-nouveau.conf << EOF
blacklist nouveau
options nouveau modeset=0
EOF
# 更新初始 RAM 文件系统(initramfs)
update-initramfs -u
# initramfs 是在系统启动时加载的初始根文件系统,包含了启动所需的驱动程序和工具
# 通过更新 initramfs,确保 Nouveau 驱动程序的黑名单设置在系统启动时生效
# 安装驱动
# 添加执行权限
chmod u+x NVIDIA-Linux-x86_64-570.133.07.run
# 静默安装驱动
./NVIDIA-Linux-x86_64-570.133.07.run --no-x-check --silent --no-nouveau-check --install-libglvnd
安装完成后,会生成一个日志文件 /var/log/nvidia-installer.log ,如果失败注意检查日志分析原因。
# 查看显卡信息
# 查看GPU状态
nvidia-smi
Fri Mar 28 02:08:55 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.07 Driver Version: 570.133.07 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1060 6GB Off | 00000000:03:00.0 Off | N/A |
| 22% 27C P0 26W / 180W | 0MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
# 如果执行 nvidia-smi 输出 no devices were found. 注意检查message日志中的详细报错信息
dmesg
# 安装 nvidia-container-toolkit
# 配置软件仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/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=/etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# 从存储库更新软件包列表
sudo apt-get update
# 安装
sudo apt-get install -y nvidia-container-toolkit
# 配置容器运行时(docker)
sudo nvidia-ctk runtime configure --runtime=docker
# 重载配置及重启docker
systemctl daemon-reload
sudo systemctl restart docker
# 运行支持 GPU 的容器:
使用 --gpus 选项来指定容器可以使用的 GPU:
docker run -d --gpus all --privileged --restart=always --name ocr -p 12841:12841 -e worknum=1 harbor-chengdu.seeyoncloud.com/ai/ocr:prod
# 查看GPU状态
nvidia-smi
Fri Mar 28 05:21:35 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.07 Driver Version: 570.133.07 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1060 6GB Off | 00000000:03:00.0 Off | N/A |
| 35% 25C P8 6W / 180W | 573MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 3838 C python3.10 114MiB |
| 0 N/A N/A 4496 C /usr/local/bin/python3.10 114MiB |
| 0 N/A N/A 4497 C /usr/local/bin/python3.10 114MiB |
| 0 N/A N/A 4498 C /usr/local/bin/python3.10 114MiB |
| 0 N/A N/A 4499 C /usr/local/bin/python3.10 114MiB |
+-----------------------------------------------------------------------------------------+
编撰人:wangyxyf
快速跳转
