写点什么

深入理解 nvidia-docker 2.0

  • 2019-11-19
  • 本文字数:1714 字

    阅读完需:约 6 分钟

深入理解 nvidia-docker 2.0

上篇推送我们介绍了 nvidia-docker 2.0 在我司大规模 Kubernetes 集群上的实践,本篇文章就将介绍相较于旧版本,nvidia-docker 2.0 的设计优势及其实现机制,希望能对大家有所帮助。本文首发于 OpsDev.cn,转载已获取作者授权。


NVIDIA 于 2016 年开始设计 NVIDIA-Docker 已便于容器使用 NVIDIA GPUs。 第一代 nvidia-docker1.0 实现了对 docker client 的封装,并在容器启动时,将必要的 GPU device 和 libraries 挂载到容器中。

1 nvidia-docker 存在的问题

但是这种设计的方式高度的与 docker 运行时耦合,缺乏灵活性。存在的缺陷具体如下:


  • 设计高度与 docker 耦合,不支持其它的容器运行时。如: LXC, CRI-O 及未来可能会增加的容器运行时。

  • 不能更好的利用 docker 生态的其它工具。如: docker compose。

  • 不能将 GPU 作为调度系统的一种资源来进行灵活的调度。

  • 完善容器运行时对 GPU 的支持。如: 自动的获取用户层面的 NVIDIA Driver libraries, NVIDIA kernel modules, device ordering 等。


基于上面描述的这些弊端,NVIDIA 开始了对下一代容器运行时的设计: nvidia-docker2.0。

2 nvidia-docker 2.0 的实现机制

基础知识

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


实现机制

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


上面已经介绍了各个组件的作用以及它们之间的关系,接下来详细的描述下这张图:


正常创建一个容器的流程

docker --> dockerd --> docker-containerd-shm -->runc --> container-process
复制代码


docker 客户端将创建容器的请求发送给 dockerd, 当 dockerd 收到请求任务之后将请求发送给 docker-containerd-shm


(其实就是 containerd)。


前面没有介绍到 containerd。这里简单的介绍下,containerd,它主要负责的工作是:


  • 管理容器的生命周期(从容器的创建到销毁)

  • 拉取/推送容器镜像

  • 存储管理(管理镜像及容器数据的存储)

  • 调用 runc 运行容器

  • 管理容器的网络接口及网络


containerd 的定位是:


containerd 被设计成嵌入到一个大系统中,而不是给开发人员和终端的设备使用。


关于 containerd 的详细说明,请查看 containerd (https://github.com/containerd/containerd)。


当 containerd 接收到请求之后,做好相关的准备工作,会去调用 runc,而 runc 基于 OCI 文件对容器进行创建。这是容器创建的整体流程。

创建一个使用 GPU 容器的流程

docker--> dockerd --> docker-containerd-shim-->nvidia-container-runtime -- > container-process
复制代码


基本流程和普通不使用 GPU 的容器差不多,只是把 docker 默认的运行时替换成了 NVIDIA 自家的 nvidia-container-runtime。 这样当 nvidia-container-runtime 创建容器时,先执行 nvidia-container-runtime-hook 这个 hook 去检查容器是否需要使用 GPU(通过环境变量 NVIDIA_VISIBLE_DEVICES 来判断)。如果需要则调用 libnvidia-container 来暴露 GPU 给容器使用。否则则走默认的 runc 逻辑。

3 总结

说到这里 nvidia-docker2.0 的大体机制基本就通了。但是涉及到的 nvidia-container-runtime, libnvidia-container, containerd,runc 这些项目, 这本篇文章里面就不一一介绍了。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/UKwbNKlEYLq_s2tbx-ZV0g


2019-11-19 23:581373

评论

发布
暂无评论
发现更多内容

Navicat Charts Creator for Mac(Navicat图表创建器)v1.2.14激活版

iMac小白

软件开发外包风险如何避免,参考如下安全低风险的开发合作模式

软件开发-梦幻运营部

CopyQueue for Mac(管理文件传输工具)v3.1免激活版

iMac小白

MatrixOne 1.1.0 Release

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

手把手入门 MO | 如何使用 DolphinScheduler 连接 MatrixOne

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

知识图谱企业图谱怎么做

悦数图数据库

知识图谱

Acrobat Pro DC 2023 for Mac(PDF编辑器) 2023.006.20380永久激活版

mac

苹果mac Windows软件 PDF编辑和管理软件 Acrobat Pro DC

前后端开发的可视化编辑器

互联网工科生

软件开发 低代码 JNPF 前后端软件

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

飞桨PaddlePaddle

飞桨 文心一言 文心大模型

聚道云软件连接器带给服装行业客户的业务革新

聚道云软件连接器

Archicad 27 for Mac(3D建模软件)v27.1.1 (4030)激活版

iMac小白

Navicat Data Modeler Ess for Mac v3.3.14中文激活版

iMac小白

利用虚拟线程重写自定义异步功能

FunTester

每日一题:LeetCode-695. 岛屿的最大面积

Geek_4z9ami

Go 面试 算法 矩阵 LeetCode

一文读懂Kubernetes部署策略

高端章鱼哥

Kubernetes 部署

科兴未来|中国北京 · HICOOL 2024全球创业大赛招募启动

科兴未来News

MO 2023 年度回顾

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

智能连接,助力餐饮品牌实现商城订单自动同步

聚道云软件连接器

案例分享

PHP服务器监控与维护:确保长期稳定运行的方法

一只扑棱蛾子

服务器 PHP服务器

手撕Vuex-vuex实现原理分析

快乐非自愿限量之名

架构 Vue

软件测试/测试开发丨软件测试基础概念 学习笔记

测试人

软件测试 测试开发

MatrixOne 完成与飞腾处理器的兼容互认

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

拼多多商品详情数据接口(Pinduoduo.item_get)丨拼多多API接口

tbapi

拼多多API接口 拼多多商品详情数据接口 拼多多商品API接口 拼多多优惠券接口 拼多多到手价接口

Boxy SVG for Mac(矢量图编辑器)v4.20.0免激活版

iMac小白

自编码器AE全方位探析:构建、训练、推理与多平台部署

不在线第一只蜗牛

代码 模型优化 AE 自编码

Navicat Charts Viewer for Mac(Navicat图表查看器)v1.2.14激活版

iMac小白

深入理解 nvidia-docker 2.0_文化 & 方法_王希刚_InfoQ精选文章