# 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