简介
Docker
镜像一般仅保留轻量的操作系统及个人程序文件,创建容器的时候会共享宿主机的内核,但缺少用于与GPU
交互的驱动程序,这里的驱动程序指容器与N卡(nvidia显卡
)之间的交互。在建立了容器与N卡之间的连接之后再创建容器,如果容器内系统没有显卡驱动会直接复制宿主机的显卡驱动。默认情况下,Docker
不会向容器添加GPU
,因此docker run
也无法指定N卡硬件。而 NVIDIA Container Toolkit
是英伟达专为 CUDA 和 Docker Engine 而设计的工具箱,可以便捷的解决这个问题。相关信息参考英伟达容器工具官网。
一、安装 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
-
从库中更新包列表。
sudo apt-get update (较旧的指令) 或者 sudo apt update (更新的指令)
-
安装英伟达容器工具包。
sudo apt-get install -y nvidia-container-toolkit
-
重启docker服务。
sudo systemctl restart docker
-
如果不重启服务,在创建容器的时候使用
--gpus all
选项加载显卡,会提示如下信息。docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]] Run 'docker run --help' for more information
二、创建容器加载显卡
-
拉取
ubuntu
镜像,默认会从Docker Hub
上拉取,但可能因为网络问题导致镜像拉取失败,这里默认可以正常拉取镜像。docker pull ubuntu:22.04
-
创建容器,通过
--gpus all
选项指定加载所有显卡。docker run -it --name ubuntu --gpus all ubuntu:22.04 /bin/bash
-
进入创建的容器环境,使用指令
nvidia-smi
查看显卡信息,正常打印则显卡加载成功。
-
如果创建容器的时候没有直接进入容器中,使用如下指令进入容器环境。
docker exec -it ubuntu bash
小结
以上内容来自英伟达官网及日常使用经验,如有其他问题,欢迎在评论区讨论!!