nvidia docker整体架构

1、nvidia-docker 2.0 的实现机制

        先简单介绍下nvidia-docker 2.0,nvidia-container-runtime,libnvidia-container以及runc直接的关系。

  • nvidia-docker2.0 是一个简单的包,它主要通过修改docker的配置文件/etc/docker/daemon.json来让docker使用NVIDIA Container runtime
  • nvidia-container-runtime 才是真正的核心部分,它在原有的docker容器运行时runc的基础上增加一个prestart hook,用于调用libnvidia-container库。
  • libnvidia-container 提供一个库和一个简单的CLI工具,使用这个库可以使NVIDIA GPU被Linux容器使用。
  • runc 一个命令行工具,会根据标准格式的Open Containers Initiative(OCI)创建容器。也是docker默认的容器运行时。

它们之间的关系可以通过下面这张图关联起来:

nvidia docker整体架构_第1张图片

2、libnvidia-container

        nvidia-docker 的nvidia-container-runtime将容器runC spec作为输入,将nvidia-container-runtime-hook作为Prestart hook加入到spec中,再调runc的Exec接口在运行容器。所以在容器启动之前会调用 pre-start hook(nvidia-container-runtime-hook),这个 hook 会通过 nvidia-container-cli文件,来调用libnvidia-container库,最终映射挂载宿主机上的 GPU 设备、nvid驱动的so文件、可执行文件到容器内部。

2.1 驱动挂载

        容器内部驱动的挂载映射主要分为:1. Host binary and library mounts、2. Container library mounts。

  1. 宿主机主要挂载的文件包括nvidia-smi、NVML、CUDA、OpenCL及图形显示的库
  2. 容器镜像lib文件的映射

nvidia docker的pre start hook会检查容器镜像的根文件系统目录下/usr/local/cuda是否有cuda的so库文件,并映射到容器的rootfs/usr/lib目录中。

  • The CUDA library (/usr/local/cuda/compat/libcuda.so.470.57.02) which provides runtime support for CUDA (high-performance computing on the GPU) applications.
  • The PTX JIT Compiler library (/usr/local/cuda/compat/libnvidia-ptxjitcompiler.so.1) is a JIT compiler which compiles PTX into GPU machine code and is used by the CUDA driver.

        简单总结下nvidia docker创建容器的时候会从宿主机挂载映射nvml、nvidia driver、cuda到容器根文件系统目录下,也会去挂载映射容器镜像自身的cuda lib文件。

2.2 容器Driver version和Cuda version不一致的问题

        容器内CUDA Runtime和CUDA Driver之间可能会存在不一致的问题,CUDA Libraries和CUDA Runtime API是和应用程序一起打包到镜像中的,而Driver库是在创建容器时从宿主机挂载到容器中的,容易出现Driver version和Cuda version版本不一致问题,需要保证CUDA Driver的版本不低于CUDA Runtime版本。

2.3 Debug日志

        修改nvidia runc的默认配置文件/etc/nvidia-container-runtime/config.toml ,打开hook的debug日志选项,可以看到宿主机挂载nvidia驱动、设备到容器内部的详细过程。

nvidia docker整体架构_第2张图片

 

 

参考文档

浅谈 docker 挂载 GPU 原理

深入理解 Nvidia-docker2.0

NVIDIA Docker CUDA容器化原理分析

Listing of Installed Components

你可能感兴趣的:(nvidia,gpu,docker,架构,运维)