Ubuntu18.04报错解决方案:could not select device driver ““ with capabilities: [[gpu]]

Docker容器:

Docker容器将一个软件包在一个完整的文件系统中,该文件系统包含运行所需要的一切:代码,运行时,系统工具,系统库等任何可以安装在服务器上的东西。这保证了软件无论其环境如何,都将始终运行相同的程序。

Nvidia-Docker设计初衷:

Docker容器与平台无关,但也与硬件无关。当使用特殊的硬件,如NVIDIA GPUs时,这就产生了一个问题,这些硬件需要的内核模块和用户级库来操作。因此,Docker本机不支持容器中的NVIDIA GPUs

nvidia-docker本质上是围绕docker命令的包装器,它透明地为容器提供了在GPU上执行代码所需的组件。只有在使用nvidia-docker run来执行使用GPUs的容器时才是绝对必要的。nvidia-docker实现了对docker client的封装,并在容器启动时,将必要的GPU device和libraries挂载到容器中。

参考文档:nvidia-docker工具介绍

Nvidia-Docker1.0和Nvidia-Docker2.0的区别

Nvidia-docker1.0存在的问题:

  • 设计高度与docker耦合,不支持其它的容器运行时。如: LXC, CRI-O及未来可能会增加的容器运行时。
  • 不能更好的利用docker生态的其它工具。如: docker compose。
  • 不能将GPU作为调度系统的一种资源来进行灵活的调度。
  • 完善容器运行时对GPU的支持。如: 自动的获取用户层面的NVIDIA Driver libraries, NVIDIA kernel modules, device ordering等。

Nvidia-docker2.0的实现机制:

其核心组建包括:nvidia-docker 2.0containerdnvidia-container-runtimelibnvidia-container以及runc直接的关系。

  • nvidia-docker2.0

    它是一个简单的包,主要通过修改docker的配置文件/etc/docker/daemon.json来让docker使用NVIDIA Container runtime

  • nvidia-container-runtime

    真正的核心部分,它在原有的docker容器运行时runc的基础上增加一个prestart hook,用于调用libnvidia-container库。

  • libnvidia-container

    提供一个库和一个简单的CLI工具,使用这个库可以使NVIDIA GPU被Linux容器使用。

  • Containerd

    主要负责的工作是:

    • 管理容器的生命周期(从容器的创建到销毁)
    • 拉取/推送容器镜像
    • 存储管理(管理镜像及容器数据的存储)
    • 调用runc 运行容器
    • 管理容器的网络接口及网络
  • RunC

    一个轻量级的工具,用来运行容器。

参考文档nvidia-docker2.0介绍

问题描述

环境:Ubuntu 18.04.1

启动容器:

docker start containerID

抛出错误:

Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
Error: failed to start containers: 94b85ba86c95

出现该错误的原因在于没有安装nvidia-docker

解决方案:

  1. 更新apt库,加载nvidia-docker2

    $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
    $ curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu18.04/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
    $ sudo apt-get update
    
  2. 安装nvidia-docker2软件包并重新加载docker守护程序配置

    $ sudo apt-get install nvidia-docker2
    $ sudo pkill -SIGHUP dockerd
    $ sudo systemctl restart docker
    

参考文档:安装nvidia-docker2.0

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值