lmw0320 2024-02-22 10:49 采纳率: 75%
浏览 12
已结题

关于docker启动时调用GPU操作的疑问

请教下docker挂载GPU的问题:

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

img

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

img

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

img

img

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 Java领域优质创作者 2024-02-22 16:09
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    问题描述: 此问题主要在于在x86和arm平台上使用docker挂载GPU时,使用--runtime=nvidia和--gpus参数有何不同。同时,在arm平台上使用自制docker镜像测试时,发现关于是否使用--runtime=nvidia参数的影响和使用该参数后映射的文件不清楚。 解答:
    1. 在x86服务器上,使用ubuntu:20.04的镜像启动容器,设置--runtime=nvidia和--gpus参数,有什么具体区别? --runtime=nvidia是使用NVIDIA容器运行时(nvidia-docker),它会将GPU驱动和CUDA库挂载到镜像中,以便在容器内使用GPU和CUDA。而--gpus参数是docker18.09版本后提供的GPU资源管理参数,可以控制容器访问哪些GPU,并自动为容器安装GPU驱动程序和CUDA(如果未安装)。 在x86服务器上运行时,--runtime=nvidia会在容器中映射nvidia的相应库文件,以便容器中使用nvidia-smi等NVIDIA GPU管理和监视命令。 举例:
    docker run --runtime=nvidia -it nvidia/cuda:11.0-base nvidia-smi
    docker run --gpus all -it nvidia/cuda:11.0-base nvidia-smi
    
    1. 在arm平台上(jetson板子),同样使用ubuntu:20.04的镜像启动容器,无法单独使用--gpus参数,需要--runtime=nvidia参数配合使用。同时,--runtime=nvidia参数可以自行独立使用。 在arm平台上运行时,--gpus需要显式设置--gpus all参数来启用,因为显卡资源使用方式与x86服务器不同。而--runtime=nvidia参数仍然可以自行独立使用,因为NVIDIA容器运行时已经集成了GPU管理支持。 举例:
    docker run --runtime=nvidia -it arm64v8/ubuntu:20.04 nvidia-smi
    docker run --gpus all -it --rm arm64v8/ubuntu:20.04 nvidia-smi
    
    1. 在arm平台上(jetson板子),使用自制的docker镜像测试,发现另外的问题:关于是否使用--runtime=nvidia参数的。如启动容器时,未使用该参数,发现libgstreamer的文件缺失。但使用了该参数后,发现该报错解决。 如果在自制的Docker镜像中,需要支持GPU和CUDA,则需要启用--runtime=nvidia参数并确保CUDA库已安装(可以在Dockerfile中安装)。 另外,libgstreamer是Ubuntu上的一种多媒体处理库,不是与CUDA相关。使用--runtime=nvidia参数可能会解决该问题,是因为NVIDIA容器运行时已经提供了标准的CUDA库和其他GPU相关库。 举例:
    FROM arm64v8/ubuntu:20.04
    # 安装CUDA和其他GPU相关库
    RUN apt-get update && apt-get install -y --no-install-recommends \
            cuda \
            libcudnn8 \
            libgstreamer1.0-0 \
            libgstreamer1.0-dev \
        && rm -rf /var/lib/apt/lists/*
        
    # 使用--runtime=nvidia参数运行容器
    CMD ["nvidia-smi"]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月28日
  • 创建了问题 2月22日