所属技术领域:
Kubernetes
|名词定义|
GPU全称是Graphics Processing Unit,图形处理单元。它的功能最初与名字一致,是专门用于绘制图像和处理图元数据的特定芯片,后来渐渐加入了其它很多功能。
|发展历程|
1 .NV GPU发展史
以下是GPU发展节点表:
1995 – NV1
1997 – Riva 128 (NV3), DX3
1998 – Riva TNT (NV4), DX5
1999 - GeForce 256(NV10)
2001 - GeForce 3
2003 - GeForce FX系列(NV3x)
2004 - GeForce 6系列 (NV4x)
2006 - GeForce 8系列 (G8x)
2010 - GeForce 405(GF119)
2014 - GeForceGT 710(GK208)
2018 - TITAN RTX(TU102)
- NV GPU架构发展史
-
- Tesla
2010 - Fermi
2012 - Kepler
2014 - Maxwell
2016 - Pascal
2017 - Volta
2018 - Turing
|技术特点|
如何在容器环境内运行 GPU 应用。
主要分为两步:
1.构建支持 GPU 的容器镜像;
2.利用 Docker 将该镜像运行起来,并且把 GPU 设备和依赖库映射到容器中。
GPU 容器镜像原理
要了解如何构建 GPU 容器镜像,先要知道如何要在宿主机上安装 GPU 应用。
如下图左边所示,最底层是先安装 Nvidia 硬件驱动;再到上面是通用的 Cuda 工具库;最上层是 PyTorch、TensorFlow 这类的机器学习框架。
上两层的 CUDA 工具库和应用的耦合度较高,应用版本变动后,对应的 CUDA 版本大概率也要更新;而最下层的 Nvidia 驱动,通常情况下是比较稳定的,它不会像 CUDA 和应用一样,经常更新。
同时 Nvidia 驱动需要内核源码编译,如上图右侧所示,英伟达的 GPU 容器方案是:在宿主机上安装 Nvidia 驱动,而在 CUDA 以上的软件交给容器镜像来做。同时把 Nvidia 驱动里面的链接以 Mount Bind 的方式映射到容器中。
这样的一个好处是:当你安装了一个新的 Nvidia 驱动之后,你就可以在同一个机器节点上运行不同版本的 CUDA 镜像了。
4. 如何利用容器运行 GPU 程序
有了前面的基础,我们就比较容易理解 GPU 容器的工作机制。下图是一个使用 Docker 运行 GPU 容器的例子。
我们可以观察到,在运行时刻一个 GPU 容器和普通容器之间的差别,仅仅在于需要将宿主机的设备和 Nvidia 驱动库映射到容器中。
上图右侧反映了 GPU 容器启动后,容器中的 GPU 配置。右上方展示的是设备映射的结果,右下方显示的是驱动库以 Bind 方式映射到容器后,可以看到的变化。
通常大家会使用 Nvidia-docker 来运行 GPU 容器,而 Nvidia-docker 的实际工作就是来自动化做这两个工作。其中挂载设备比较简单,而真正比较复杂的是 GPU 应用依赖的驱动库。
对于深度学习,视频处理等不同场景,所使用的一些驱动库并不相同。这又需要依赖 Nvidia 的领域知识,而这些领域知识就被贯穿到了 Nvidia 的容器之中。
|资料来源|
名词定义:https://www.cnblogs.com/timlly/p/11471507.html#gpu历史
技术特点:https://www.cnblogs.com/timlly/p/11471507.html#gpu历史