linux下 N卡驱动 适配docker容器

linux系统 和英伟达显卡的适配

Ubuntu系统 + N卡 黑屏

通常原因 是 linux 加载了自己开源的显卡驱动配置
解决办法是 在开机的时候 跳过显卡驱动的加载, 仅使用 BIOS的显卡驱动即可。
又因为 系统启动引导方式的不同,安全启动和传统启动 修改的过程略有不同。

能够进入系统后,修改系统文件,永久禁用 Nouveau 开源驱动加入黑名单。然后 安装N卡官方给出的驱动。

最后 祈祷 开源社区完善驱动。


官方文档
https://docs.nvidia.com/
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html

当前运行的内核的内核头文件和开发包可以通过以下方式安装:

# apt install linux-headers-$(uname -r)
安装与当前 Linux 内核版本匹配的内核头文件,用于编译内核模块(如 NVIDIA 驱动)。




1、显卡的的硬件 闭源驱动安装  
   https://www.nvidia.cn/drivers/unix/
   NVIDIA-Linux-x86_64-570.133.07.run
NVIDIA 官方提供的独立运行脚本(.run 文件),需要手动下载并执行。
安装过程通常涉及编译内核模块,依赖于系统中的内核头文件(如 kernel-headers)和开发工具(如 gcc)。安装前需禁用 Nouveau 开源驱动还需要停止 X 服务器

Linux 版 NVIDIA CUDA 安装指南
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/


------------------ 安装包手动安装 ---------------------------

包管理器 安装
linux   驱动版本
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html


--------------------------------
通过第三方ppa 安装 N卡驱动
先把系统的源更新成阿里的
https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.6a491b11OguW7P

sudo add-apt-repository ppa:graphics-drivers/ppa
向Ubuntu系统的软件源列表中添加一个PPA(Personal Package Archive,个人软件包存档),具体是 graphics-drivers 团队维护的PPA。这个PPA提供最新的NVIDIA显卡驱动和其他相关软件包,方便用户安装和更新。

vim graphics-drivers-ubuntu-ppa-noble.sources 
# 修改成 中国科技大学的镜像站 速度更快
URIs: https://launchpad.proxy.ustclug.org/graphics-drivers/ppa/ubuntu/

apt update 更新软件仓库源的索引

ubuntu-drivers devices
使用以下命令查找适合你显卡的推荐驱动版本:
apt install nvidia-driver-570 -y
或者,使用以下命令自动安装推荐的驱动:
sudo ubuntu-drivers autoinstall

重启后,
检查驱动是否正确加载:
nvidia-smi  # 显示输出代表 驱动安装完成

输出的内容cuda version 是当前NVIDIA驱动支持的最高CUDA版本。
注意:这只表示驱动支持的CUDA版本,不代表CUDA toolkit已安装


2、通用显卡计算平台的安装  cuda的版本的适配    安装包路径都在ppa 的软件源
apt install nvidia-cuda-toolkit -y

nvcc 是CUDA的编译器,如果CUDA toolkit已安装,可以通过以下命令检查版本:
nvcc --version
   
在docker环境中,主机安装 nvidia-cuda-toolkit,但这不是必需的,因为CUDA runtime通常由容器镜像提供。

N卡驱动和容器

root@123:~# docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
##  容器调用 硬件的gpu 的话,docker server 和 gpu 驱动之间要有一个插件或者说是 json形式的数据互通桥梁。
    nvidia 前期使用 docker2 不过已弃用
 # docker 调用 gpu的时候涉及 docker server用户权限  资源识别 资源调用策略 资源分配模式 是否和已存在的有相关冲突!!!!



NVIDIA Container Toolkit支持的任何 GPU均可使用

NVIDIA 容器工具包
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/index.html
作用:NVIDIA Container Toolkit 是一个工具集,允许Docker容器直接使用主机的NVIDIA GPU和驱动,无需在容器内安装完整的NVIDIA驱动或 nvidia-cuda-toolkit。

# 添加 NVIDIA Container Toolkit 仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/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=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Ubuntu 24.04(代号 noble)的仓库可能重定向到 ubuntu22.04 或 ubuntu18.04 的包,这是正常现象(NVIDIA 统一兼容性包



# 更新软件包索引
sudo apt update

# 安装 NVIDIA Container Toolkit
sudo apt install -y nvidia-container-toolkit         #  nvidia-docker2




# 配置 Docker 使用 NVIDIA 运行时 确保 Docker 能够识别 NVIDIA GPU 设备,并在运行容器时通过 --gpus 参数或环境变量(如 NVIDIA_VISIBLE_DEVICES)启用 GPU 加速。
sudo nvidia-ctk runtime configure --runtime=docker
会写入配置配置文件/etc/docker/daemon.json


# 加载腾讯云的镜像站 要添加下面的不要把 nvidia-ctk的配置 删除喽
/etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.aliyuncs.com"
  ]
}

sudo systemctl restart docker

# 验证安装
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi




##容器报错 failed to initialize NVML 

NVIDIA 容器运行时使用 cgroups 来管理 GPU 资源。
cgroups 确保容器只能访问分配给它的 GPU 设备(例如通过 --gpus 或 NVIDIA_VISIBLE_DEVICES 指定)。
这种配置适合需要资源隔离的生产环境,

临时修改
vim /etc/nvidia-container-runtime/config.toml
no-cgroups = false 改一下

sudo systemctl restart docker

永久修改
---  cat  /etc/docker/daemon.json -- docker 禁用 cgroupfs

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    },
    "exec-opts": ["native.cgroupdriver=cgroupfs"]

}


  Docker的--rm参是指在运行Docker容器时,添加--rm参数可以让容器在退出或任务完成后自动删除。这个功能特别适用于临时任务、测试环境或批处理作业,因为它可以自动清理不再需要的容器,避免手动删除的麻
  
  
  --gpus all 是 Docker 运行容器时的一个选项,用于启用 GPU 支持并允许容器访问主机上的所有 GPU 设备。具体含义如下:

    启用 GPU 访问:它告诉 Docker 容器可以使用主机上的 NVIDIA GPU,通常需要 NVIDIA 容器工具包(NVIDIA Container Toolkit)支持。
    "all" 的作用:表示容器可以访问主机上的所有 GPU 设备(例如,如果主机有多个 GPU,容器都能使用)。也可以指定特定 GPU,例如 --gpus '"device=0,1"' 来限制使用 GPU 0 和 GPU 1。
    使用场景:常用于需要 GPU 加速的任务,如机器学习、深度学习或科学计算。
    
    
    
    
    



glxinfo -B 是一个快速查看系统 OpenGL 和 GLX 配置的命令



如果是页面的话   可以通过这个网站  看看 游览器 有没有调用 gpu

https://webglsamples.org/aquarium/aquarium.html




posted @ 2025-04-18 10:15  mmszxc  阅读(100)  评论(0)    收藏  举报