Docker容器中使用Nvidia GPU

💡 原文中文,约14500字,阅读约需35分钟。
📝

内容提要

本文介绍了在Docker容器中使用Nvidia GPU的方法,包括配置Nvidia Container Runtime和验证GPU调用。需要注意挂载设备而不是数据卷,并修改compose.yaml文件来配置容器。

🔎

延伸解读

NVIDIA容器运行时架构解析

NVIDIA Container Runtime通过钩子机制将宿主机显卡驱动映射到容器内。具体来说,nvidia-container-toolkit包含一个可执行文件,实现runC prestart hook接口。在容器创建后、启动前,runC调用该钩子,钩子读取容器的config.json,并调用nvidia-container-cli,通过特定标志将GPU设备注入容器。这一机制使得容器内可以像宿主机一样调用GPU,而无需在容器内安装完整驱动。

设备映射与数据卷映射的区别

在Docker中,-v参数用于数据卷映射,将主机目录或文件映射到容器内,实现数据共享和持久化;而--device参数用于设备映射,允许容器访问主机上的设备。例如,-v /host/path:/container/path映射目录,--device=/dev/sda:/dev/xvda映射设备。在需要调用GPU或相机等硬件时,必须使用--device挂载设备文件,而不是-v。错误使用-v可能导致权限错误,因为设备文件未被正确暴露给容器。

compose.yaml配置要点与安全建议

在compose.yaml中配置GPU支持时,需设置runtime: nvidia,并添加devices挂载设备,如/dev/:/dev/,但建议按需挂载具体设备而非整个/dev目录,以减少安全风险。同时,通过environment设置NVIDIA_VISIBLE_DEVICES和NVIDIA_DRIVER_CAPABILITIES,并在deploy.resources.reservations.devices中指定driver: nvidia和capabilities(如gpu、utility、compute),

❓

Q&A

如何在Docker容器中配置Nvidia GPU支持?

需要配置Nvidia Container Runtime,现称为nvidia-container-toolkit,并在compose.yaml文件中进行相应配置。

nvidia-container-runtime和nvidia-container-toolkit有什么区别?

nvidia-container-runtime已被废弃,现在称为nvidia-container-toolkit。

在Docker中如何正确挂载设备?

使用--device参数来挂载设备,而不是使用-v参数,这样可以允许容器访问主机上的设备。

如何验证Docker容器中GPU的调用?

可以在容器内编译并运行CUDA测试脚本,检查GPU是否能正常调用。

Docker容器中使用GPU时需要注意哪些事项?

需要确保挂载设备而不是数据卷,并在compose.yaml文件中正确配置GPU相关参数。

Docker命令中-v参数和--device参数的区别是什么?

-v参数用于数据卷映射,而--device参数用于设备映射,二者用途不同。

🏷️

标签

➡️

继续阅读