Docker 找不到 N 卡

问题描述

Docker 过一段时间找不到 N 卡,Failed to initialize NVML: Unknown Error 错误解决

解决方案

  • stop 所有已启动的 docker 算法服务,然后修改 docker 配置文件:
{
-    "exec-opts": ["native.cgroupdriver=systemd"],
+    "exec-opts": ["native.cgroupdriver=cgroupfs"],
    "log-driver": "json-file",
    "log-opts": {"max-size":"500m", "max-file":"3"},
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
  • 重启 docker 服务

  • 启动 docker 算法服务

问题原因

主机执行 daemon-reload(或类似操作)。如果容器使用systemd来管理cgroups,守护进程重新加载“会触发重新加载任何具有对NVIDIA GPU引用的单元文件”。然后,容器将失去对重新加载的GPU引用的访问权限。

nvidia - Failed to initialize NVML: Unknown Error in Docker after Few hours - Stack Overflow

Containers losing access to GPUs with error: “Failed to initialize NVML: Unknown Error” · Issue #1730 · NVIDIA/nvidia-docker (github.com)

在Linux系统中,cgroupfs(Control Groups File System)和systemd都是关于进程管理和资源控制的重要组件。

  1. cgroupfs

    • cgroupfs 是 Linux 内核提供的一种机制,用于限制、监控和分配系统资源(如 CPU、内存、磁盘 I/O 等)给进程组。它允许系统管理员将系统资源划分为多个分组,以便更精细地管理和控制进程的资源使用。
    • cgroupfs 允许管理员创建 cgroup,将进程添加到这些 cgroup 中,并为每个 cgroup 分配资源限制。这使得管理员可以限制特定进程组的资源使用量,或者确保某些进程组具有优先权。
    • cgroupfs 通常通过挂载在文件系统的方式使用,一般挂载在 /sys/fs/cgroup 下。
  2. systemd

    • systemd 是一个系统和服务管理器,旨在提供一个更加全面和统一的启动和管理系统服务的方式。它被广泛用于许多现代 Linux 发行版中,取代了传统的 init 系统。
    • systemd 不仅仅是一个简单的 init 替代品,它还提供了许多附加功能,包括服务管理、日志记录、用户会话管理、定时任务等。
    • systemd 使用了 cgroup 来跟踪和管理系统中运行的服务的资源使用情况。它能够利用 cgroup 提供的资源控制功能,确保系统中运行的服务不会超出分配的资源限制。
    • 此外,systemd 还提供了 systemd-cgtop 工具,用于监视和显示 cgroup 中各个进程组的资源使用情况。

总的来说,cgroupfs 提供了 Linux 内核级别的资源控制机制,而 systemd 则是一个更高级别的系统和服务管理器,它利用 cgroup 来管理系统中运行的服务和进程组的资源使用。

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值