在docker容器中使用显卡

参考问题:

cuda - Using GPU from a docker container? - Stack Overflow

目录

指定显卡硬件名

nvidia-docker

Docker 19.03


指定显卡硬件名

最初的容器中使用显卡,需要指定硬件名。经历了两种方式

1. 使用lxc驱动程序运行docker守护进程,以便能够修改配置并让容器访问显卡设备(非常麻烦,参考链接中最久远的回答)

2. Docker 0.9中放弃了lxc作为默认执行上下文,但是依然需要指定显卡的名字

(1)找到你的显卡设备

ls -la /dev | grep nvidia

crw-rw-rw-  1 root root    195,   0 Oct 25 19:37 nvidia0 
crw-rw-rw-  1 root root    195, 255 Oct 25 19:37 nvidiactl
crw-rw-rw-  1 root root    251,   0 Oct 25 19:37 nvidia-uvm

(2)启动容器时,指定显卡设备

 sudo docker run -ti --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm tleyden5iwx/ubuntu-cuda /bin/bash

nvidia-docker

英伟达公司开发了nvidia-docker,该软件是对docker的包装,使得容器能够看到并使用宿主机的nvidia显卡.

本质上,他们找到了一种方法来避免在容器中安装CUDA/GPU驱动程序,并让它与主机内核模块匹配。

测试:

# Install nvidia-docker and nvidia-docker-plugin
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# Test nvidia-smi
nvidia-docker run --rm nvidia/cuda nvidia-smi

指定使用两张卡:

docker run --rm --gpus 2 nvidia/cuda nvidia-smi

更详细得得用法见:User Guide — NVIDIA Cloud Native Technologies documentation

另外要注意nvidia-docker包括nvidia-docker1 和 nvidia-docker2,两者命令有一定差异

Docker 19.03

从Docker 19.03开始,安装好docker之后,只需要使用 --gpus 即可指定容器使用显卡。

所有显卡都对容器可见:

docker run --gpus all --name 容器名 -d -t 镜像id

只有显卡1对容器可见:

docker run --gpus="1" --name 容器名 -d -t 镜像id

如果不指定 --gpus ,运行nvidia-smi 会提示Command not found

注意:

1. 显卡驱动在所有方式中,都要先安装好,容器是不会有显卡驱动的,一台物理机的显卡只对应一个显卡驱动,当显卡驱动安装好后(即使未安装cuda),也可以使用命令nvidia-smi

2. nvidia-smi显示的是显卡驱动对应的cuda版本,nvcc -V 显示的运行是cuda的版本

### 如何配置 Docker 容器以支持 GPU 使用 为了使 Docker 容器能够利用宿主机上的 NVIDIA GPU 资源,可以采用 `nvidia-docker` 工具或其他相关方法完成配置。以下是具体实现方式: #### 1. 确认环境准备 在使用 `nvidia-docker` 前,需确认已安装以下组件: - **Docker**:作为基础容器化平台,必须先正确安装并运行于宿主机上[^1]。 - **NVIDIA 驱动程序**:确保宿主机已经安装适合的 NVIDIA 显卡驱动版本。 可以通过以下命令验证 NVIDIA 驱动是否正常工作: ```bash nvidia-smi ``` 如果显示显卡信息,则说明驱动安装成功。 --- #### 2. 安装 Nvidia-Docker 插件 通过官方推荐的方式安装 `nvidia-container-toolkit` 和其插件 `nvidia-docker-plugin` 来管理 GPU 的访问权限[^2]。以下是安装步骤: ##### (a) 添加 NVIDIA 官方仓库 对于基于 Debian/Ubuntu 的系统,执行如下命令添加仓库: ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update ``` ##### (b) 安装必要的包 接着安装 `nvidia-container-toolkit` 及依赖项: ```bash sudo apt-get install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker ``` 此时,Docker 将自动识别 NVIDIA 运行时,并允许创建带有 GPU 支持的容器。 --- #### 3. 创建启用了 GPU 的容器 当上述准备工作完成后,可通过指定参数启动具有 GPU 访问权的容器。例如,使用以下命令运行一个测试容器: ```bash docker run --gpus all nvidia/cuda:11.0-base nvidia-smi ``` 此命令会分配所有可用 GPU 给新创建的容器,并展示当前 GPU 列表及其状态。 另外也可以仅分配部分设备给特定应用负载,比如只提供第一个 GPU: ```bash docker run --gpus '"device=0"' nvidia/cuda:11.0-base nvidia-smi ``` --- #### 4. 验证功能有效性 最后一步是检验整个流程设置无误。进入任意带 GPU 功能的镜像内部后尝试调用 CUDA 函数库或者训练机器学习模型等方式进一步检测实际性能表现情况。 --- ### 总结 综上所述,在 Docker 中启用 GPU 主要涉及三个阶段操作——前期软硬件条件核查、中间层工具链搭建以及最终实践环节中的资源调度控制[^3]。只要按照以上指导逐步实施即可顺利完成目标需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺棒棒冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值