首页 新闻 会员 周边 捐助

docker正确使用GPU参数的问题

0
悬赏园豆:5 [待解决问题]

请教下docker挂载GPU的问题:

  1. 在x86服务器上,使用ubuntu:20.04的镜像启动容器,设置--runtime=nvidia和--gpus参数,有什么具体区别? 我测试了下,发现--runtime=nvidia参数后,容器内并没有发现任何和CUDA相关的文件,无法使用nvidia-smi命令。而使用--gpus参数后,容器内则会出现一些cuda相关的文件,也可以正常使用nvidia-smi命令;

  2. 在arm平台上(jetson板子), 同样使用ubuntu:20.04的镜像启动容器,无法单独使用--gpus参数,需要--runtime=nvidia参数配合使用。同时,--runtime=nvidia参数可以自行独立使用。 但也是类似情况,--gpus参数设置后,容器内发现额外的一些cuda文件映射,而单独使用--runtime=nvidia则未发现cuda相关文件。

  3. 在arm平台上(jetson板子),使用自制的docker镜像测试,发现另外的问题:关于是否使用--runtime=nvidia参数的。如启动容器时,未使用该参数,发现libgstreamer的文件缺失。但使用了该参数后,发现该报错解决。。这个也说明--runtime=nvidia其实是还是映射了一些环境文件到容器中。但是具体是映射什么文件呢?(libgstreamer应该与cuda无关吧,为什么增加--runtime=nvidia参数,会解决这个文件缺失的报错呢?)

老笨啊的主页 老笨啊 | 初学一级 | 园豆:6
提问于:2024-02-22 10:57
< >
分享
所有回答(2)
1

可以看一下我之前安装 nvidia-container-toolkit 遇到的问题 https://q.cnblogs.com/q/148436

dudu | 园豆:30778 (高人七级) | 2024-02-22 11:08

我的理解是 --gpus 参数会加载 NVIDIA 驱动

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2024-02-22 11:12

推荐园子里的一篇博文:浅谈 docker 挂载 GPU 原理

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2024-02-22 11:22

@dudu: 你说的这个,我理解。
主要是我想搞清楚,--runtime=nvidia参数,映射了哪些文件到容器中。。而用--gpus参数,又映射什么文件到容器中。。
这两者,按照我的测试,应该是有区别的。。网上绝大部分的文章,有的说是两者没什么区别,有的说是--gpus可以替代--runtime=nvidia。但是都是语焉不详。。
另外,我测试过,在jetson板子上(arm64架构)跑docker容器的话,是无法只用--gpus参数的,必须同时结合--runtime=nvidia参数。。

还就是,我测试一个独立的镜像(不是ubuntu20.04),是自制的镜像,如果不用--runtime=nvidia参数,会报错,提示libgstreamer.so文件找不到。。而增加了这个--runtime=nvidia参数后,却不会报这个错了。。这个runtime参数,是映射了啥目录或是文件到容器中了呢??

支持(0) 反对(0) 老笨啊 | 园豆:6 (初学一级) | 2024-02-22 15:25
1

在Docker中,--runtime=nvidia和--gpus参数都是用于启用GPU支持的参数,但它们在实现方式上有所不同,导致了一些区别。

--runtime=nvidia参数:

这个参数指定了Docker的运行时为NVIDIA的Container Runtime,它会将NVIDIA提供的驱动和运行时库挂载到容器中,从而使容器可以访问GPU资源。使用--runtime=nvidia参数启动容器后,容器内会自动加载NVIDIA的驱动和相关库,从而可以正常使用CUDA和其他GPU相关的功能。
在x86服务器上使用--runtime=nvidia参数启动容器时,确实会自动加载NVIDIA的驱动和库,因此容器内可以正常使用nvidia-smi等命令来管理GPU。
在arm平台上,--runtime=nvidia参数也是必需的,因为只有通过NVIDIA的Container Runtime才能正确地挂载NVIDIA的驱动和库。
--gpus参数:

这个参数是Docker自身的GPU支持特性,它会根据主机上的GPU设备来分配GPU资源给容器。使用--gpus参数可以直接指定要分配的GPU数量,Docker会自动处理GPU相关的设置,包括CUDA和其他GPU相关的环境。
在x86服务器上,--gpus参数似乎并没有正常挂载CUDA相关的文件,这可能是因为镜像或Docker配置的问题。但是在arm平台上,--gpus参数确实可以挂载CUDA相关的文件,这可能是因为在arm平台上使用的镜像已经预先配置了与CUDA相关的环境。
关于增加--runtime=nvidia参数解决libgstreamer文件缺失的问题,这可能是因为在某些情况下,NVIDIA的Container Runtime会提供一些额外的系统库和环境变量,可能包括libgstreamer等。因此,增加--runtime=nvidia参数后,容器内会加载这些额外的系统库,从而解决了libgstreamer文件缺失的问题。

综上所述,--runtime=nvidia参数是使用NVIDIA的Container Runtime,会挂载NVIDIA的驱动和库;而--gpus参数是Docker自身的GPU支持特性,可以自动处理GPU相关的设置,但在某些情况下可能不会挂载CUDA相关的文件。在使用GPU时,通常建议使用--runtime=nvidia参数以确保能够正常挂载NVIDIA的驱动和库。

Technologyforgood | 园豆:7541 (大侠五级) | 2024-02-25 13:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册