改造你的AI服务器——AI容器化简明教程(二)基本知识介绍

这一篇介绍一下NVIDIA GPU服务器的一些架构和偏底层原理的一些知识,更好的帮助快速的掌握GPU服务器上使用Docker容器运行AI任务的一些架构上的内容,理解配置环境的原理与目的。这里介绍的是Linux平台上的只是。

首先是对CUDA的介绍,CUDA是NVIDIA在自己的GPU设备上推出的并行计算编程平台,基于C++。CUDA主要分为三个层次的内容:1. 最底层的是CUDA Driver API,这层是和GPU的Hardware进行深度结合的内容,是驱动层的API,目前业界很多GPU共享的方案就是基于这层做API劫持和转发进行实现的;2. CUDA Runtime API,在驱动的API上增加了一些用户更友好的封装,如果将第一层看作和GPU打交道的机器码的存在,这一层可以说是汇编层的定位,这里不是说它的写法或者编译原理就是汇编和机器码的关系,只是一个层次关系的类比而已;3. CUDA Library,是上层用户的 CUDA Application大多数会直接接触的层,对下层进行了更好的封装供用户使用。

对于上面的CUDA的三层架构,CUDA Driver API是由我们安装的NVIDIA Driver提供的,通常我们执行nvidia-smi出现的CUDA版本就是CUDA Driver API的Version,而其他两层是由CUDA Tookit所提供的。我们所执行的nvcc就是CUDA Tookit的内容。一般来说,这三层架构是从底层开始,对上层的版本逐层进行的向下兼容,也就是说上层的版本必须要低于或等于下层的版本。

我们需要使用的容器架构,CUDA Driver API在宿主机上进行部署,而CUDA Tookit则在Docker容器中运行,直接根据自己的需要基于对应的镜像就可以使用对应的环境了。

img

在有Docker和NVIDIA Driver的GPU服务器上,为了在Docker中使用NVIDIA GPU我们还需要安装NVIDIA-Container-Runtime。这是一个面向于挂载GPU设备到容器中使用的工作Runtime,提供了在容器中使用GPU的方案。

Architecture Overview — NVIDIA Cloud Native Technologies documentation

在整个Docker容器中使用NVIDIA GPU的方案中,共有三个组件起了很重要的作用,下面分别介绍一下他们各自的作用。

  1. libnvidia-container,提供了一个Library和nvidia-container-cli工具,它的主要作用是将GPU Driver和一些需要进行依赖的组件和库文件挂载到容器中,主要还是以Host挂载的形式存在;
  2. nvidia-container-toolkit,由于我们的容器最终都会落到runC到容器进程中去,为了将NVIDIA GPU相关的环境变量以及一些配置文件给到runC去启动,这里实现了runC prestart hook的接口,读取的相关配置文件config.json去将NVIDIA相关的转换为libnvidia-container的nvidia-container-cli的启动参数;
  3. nvidia-container-runtime,在runC的hook配置文件里面把上述的操作加入配置中,使得hook文件生效。

整体来说,安装了NVIDIA-Container-Runtime之后上述组件就都有了,完成了上述的流程之后,NVIDIA GPU在容器中就处于可见状态了,上述就是大概的容器中NVIDIA GPU的基本知识介绍了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值