安装 Docker GPU 版本的过程及碰到的坑

打印 上一主题 下一主题

主题 1710|帖子 1710|积分 5130

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先,安装的 Docker 版本并不支持 GPU,因此需要安装支持 GPU 的 Docker 版本。然而,在安装和设置过程中,碰到了一系列问题和挑衅。
错误的安装步调

以下是我在实验安装 GPU 版本时,执行的错误操作:
  1. # 安装 NVIDIA 驱动
  2. sudo apt-get update
  3. sudo apt-get install -y nvidia-driver-460
  4. # 添加 NVIDIA 运行时配置
  5. sudo mkdir -p /etc/systemd/system/docker.service.d
  6. sudo tee /etc/systemd/system/docker.service.d/override.conf <<EOF
  7. [Service]
  8. ExecStart=
  9. ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=/usr/bin/nvidia
  10. EOF
  11. # 重新启动 Docker 服务
  12. sudo systemctl daemon-reload
  13. sudo systemctl restart docker
复制代码
这段脚本是根据 GPT 提供的方案执行的,但我没有注意到它可能会导致一些问题。最终我发现,在执行完该脚本后,Docker 无法启动,而且出现了以下错误:
  1. xtx@dell-PowerEdge-R750:~$ nvidia-docker --version
  2. nvidia-docker: command not found
复制代码
发现问题:NVIDIA 驱动安装冲突

接下来,我发现 nvidia-smi 无法执行,也无法找到 NVIDIA 相关的命令。通过检查 NVIDIA 驱动,发现系统中安装了多个版本的 NVIDIA 驱动。
  1. dpkg -l | grep nvidia
复制代码
于是,我实验卸载了 nvidia-driver-460,但问题依旧存在:
  1. sudo apt-get remove --purge nvidia-driver-460
复制代码
多次实验卸载仍然没有解决问题,驱动仍然有冲突。于是决定彻底清算全部 NVIDIA 驱动,并重新安装:
  1. # 清除所有 NVIDIA 驱动
  2. sudo apt-get purge nvidia*
  3. # 更新包管理器
  4. sudo apt-get update
  5. # 安装正确版本的 NVIDIA 驱动
  6. sudo apt-get install nvidia-driver-470 nvidia-utils-470
复制代码
重新安装驱动后,虽然成功安装了 NVIDIA 驱动,但执行 nvcc -V 命令时没有任何输出。这时我猜疑问题可能与 CUDA Toolkit 无关,由于在安装驱动时并没有安装 CUDA。
权限问题及解决

接下来,我检查了 ~/.bashrc 文件,确认路径没有问题。然而,考虑到权限问题,我以 root 用户身份举行检查,发现没有问题。这一步解决了驱动的问题。
安装 Docker GPU 版本及其问题

接下来,我按照官方教程安装 Docker 的 GPU 版本,并设置了相应的 NVIDIA 运行时。但在启动 Docker 时,碰到了如下错误:
  1. (tx) xtx@dell-PowerEdge-R750:/data/xtx/nnUNet/nnunetv2/inference$ systemctl status docker.service
  2. Warning: The unit file, source configuration file or drop-ins of docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
  3. × docker.service - Docker Application Container Engine
  4.      Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
  5.     Drop-In: /etc/systemd/system/docker.service.d
  6.              └─override.conf
  7.      Active: failed (Result: exit-code) since Thu 2025-01-16 13:39:52 CST; 7min ago
  8. TriggeredBy: × docker.socket
  9.        Docs: https://docs.docker.com
  10.     Process: 113728 ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=/usr/bin/nvidia (code=exited, status=1/FAILURE)
  11.    Main PID: 113728 (code=exited, status=1/FAILURE)
  12.         CPU: 92ms
复制代码
解决问题的过程

一开始,我实验按照网上的建议修改 /etc/docker/daemon.json 文件,切换到国内镜像源。然而,修改后仍然报错。接着,我打开了 override.conf 文件,发现最初设置中使用了 ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=/usr/bin/nvidia 这一行,而这一行实际上导致了启动失败。
最终,我删除了这行设置,并重新加载并重启了 Docker 服务:
  1. # 重新加载 systemd 配置
  2. sudo systemctl daemon-reload
  3. # 重启 Docker 服务
  4. sudo systemctl restart docker
复制代码
此时,Docker 成功启动,问题得到解决。
简单总结一下

寻常使用GPT习惯了,感觉简单问题直接按照它的命令行输入就行,没有仔细理解该指令背后的含义,从而导致版本冲突。别的,发生问题太依赖GPT和教程了,缺少本身的反思。
再面对类似的问题时,应该从头渐渐排除法,从系统设置到详细服务的每一步都要仔细检查。解决问题的关键往往是细致入微的排查和多角度的分析。即便是看似简单的操作,背后也可能隐蔽着复杂的系统交互和设置依赖。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表