我尝试在系统上运行 NVIDIA GPU 支持的 Docker 容器时遇到问题。尽管通过
nvidia-smi
成功检测到 NVIDIA 驱动程序和 GPU,但尝试使用命令 docker run --rm --gpus all ubuntu:18.04 nvidia-smi
运行 Docker 容器会导致以下错误:
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy' nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown.
Here's the output of nvidia-smi, showing that the NVIDIA drivers and GPUs are correctly detected and operational:
$ nvidia-smi
Thu Feb 22 02:39:45 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| 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 RTX A5000 On | 00000000:18:00.0 Off | 0 |
| 30% 37C P8 14W / 230W | 11671MiB / 23028MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 NVIDIA RTX A5000 On | 00000000:86:00.0 Off | 0 |
| 55% 80C P2 211W / 230W | 13119MiB / 23028MiB | 79% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
为了排除故障,我运行了 nvidia-container-cli -k -d /dev/tty info,这确认了 NVIDIA 库(包括 libnvidia-ml.so.525.85.12)已被检测到。但是,Docker 错误仍然存在,表明定位 libnvidia-ml.so.1 存在问题。
到目前为止,我已经尝试过:
重新安装 NVIDIA 驱动程序和 CUDA 工具包。 重新安装 NVIDIA Container Toolkit。 确保正确配置 Docker 和 NVIDIA Container Toolkit。 设置 LD_LIBRARY_PATH 以包含 NVIDIA 库的路径。 尽管做出了这些努力,问题仍然没有得到解决。我在 Linux 系统上运行,NVIDIA 驱动程序版本为 525.85.12。
是否有人遇到过类似的问题,或者可以提供有关可能导致此错误的原因以及如何解决的见解?我将非常感谢任何建议或指导。
运行具有 NVIDIA GPU 支持的 Docker 容器:您尝试通过命令
docker run --rm --gpus all ubuntu:18.04 nvidia-smi
使用 NVIDIA GPU 启动 Docker 容器。
检查 NVIDIA 驱动程序和 GPU 检测:您使用 nvidia-smi 来确保正确检测到 NVIDIA 驱动程序和 GPU 并在您的系统上运行。
使用 NVIDIA Container Toolkit 进行诊断:您运行了 nvidia-container-cli -k -d /dev/tty info 来诊断问题,这确认了 NVIDIA 库(包括 libnvidia-ml.so.525.85.12)已被检测到你的系统。
尝试的解决方案:
容器初始化成功:您期望 Docker 容器在 NVIDIA GPU 支持下成功初始化,从而允许您在容器内使用 GPU 资源。
库检测问题的解决:您预计所采取的步骤将解决与 libnvidia-ml.so.1 检测相关的任何问题,确保 Docker 和 NVIDIA Container Toolkit 可以访问和利用必要的 NVIDIA 库。
Docker 中的操作 GPU 支持:最终,您希望这些故障排除步骤能够在 Docker 容器内启用无缝 GPU 支持,从而允许 GPU 加速的应用程序按预期运行。
预期结果与实际结果之间的差异(尽管已确认检测到 NVIDIA 驱动程序和库,但持续出现错误消息表明无法找到 libnvidia-ml.so.1)表明 Docker 和 NVIDIA 可能存在潜在问题集成设置、库路径,或者可能涉及所涉及的工具和驱动程序的特定版本。
您的主机使用什么发行版?通过 Ubuntu 的
ubuntu-drivers install
工具 安装的 NVIDIA 驱动程序也可能导致该问题。要解决此问题,您可能需要重新安装驱动程序。首先,需要卸载现有的驱动程序(特别是对于Ubuntu,对于其他发行版,请检查这里):
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
"*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
sudo apt-get autoremove
之后,强烈建议使用包管理器
apt
来重新安装驱动程序。以下是说明(仍适用于 Ubuntu 22.04,请查看here了解更多平台):
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
# To install the legacy kernel module flavor
sudo apt-get install -y cuda-drivers
# To install the open kernel module flavor of specific version
# sudo apt-get install -y nvidia-driver-550-open
请注意,NVIDIA Container Toolkit 也已被之前的
apt-get --purge
命令卸载。您可以按照这些步骤重新安装它。
最好为您的服务器切换到HWE内核:
sudo apt-get install --install-recommends linux-generic-hwe-22.04
驱动程序还会默认为您安装 x11 组件。如果不需要桌面,您可以安装headless版本的驱动程序:
sudo apt-get install nvidia-headless-550