使用Altair网格引擎管理GPU工作负载-第一部分
介绍如何在支持gpu的应用程序中使用Altair Grid Enginebob电竞官方
近二十年来,gpu(图形处理单元)一直在稳步变革高性能计算(HPC)和人工智能。bob官网 bob体育下载它最初是为游戏和图像处理等图形密集型应用而设计的,但没过多久,高性能计算专家就看到了低bob电竞官方成本、大规模并行处理器的潜力,能够每秒处理数十亿(现在是数万亿)浮点运算。手机游戏玩家将感激这种改进的图形功能-游戏停电闪电战在那些想在游戏中赚到真钱的玩家中尤其受欢迎。
在这篇分为两部分的文章中,我将讨论GPU工作负载以及如何使用Altair Grid Engine来管理它们。首先,我将提供一个简短的GPU入门,解释它们如何在HPC和AI中使用,并涵盖在共享集群上运行GPU应用程序时的一些特定挑战。bob电竞官方在第二部分中,我将重点介绍Altair Grid Engine中的一些具体创新,它们帮助GPU应用程序更容易部署和大规模管理。bob电竞官方
背景
对于并行处理大块数据的算法来说,gpu比cpu快几个数量级。没有gpu是安全的,没有Amazon Alexa,没有PS4,没有谷歌翻译,自动驾驶汽车仍然是科幻小说里的东西。
如果您现在正在部署一个HPC集群,那么您很有可能正在部署支持gpu的集群节点。gpu被用于从加速计算流体动力学计算到训练和部署深度学习模型到加速SQL数据库的所有事情。
现代GPU工作负载要求工作负载管理器更加复杂。今天的集群不是只管理由CPU组成的集群,而是由数百或数千个CPU核以及数千甚至数百万个CPU驻留核组成的集群。bob电竞官方应用程序需要这两种类型的资源,GPU作业需要配合对网络拓扑和内部CPU和总线架构的详细理解来协调,以最大限度地利用GPU支持的集群。
gpu支持HPC和AI
虽然有多个GPU制造商,如果我们排除芯片集成图形解决方案和为移动或嵌入式应用程序优化的GPU解决方案,Nvidia(与他们的bob电竞官方Nvidia Tesla和AMD(与Radeon本能)目前主导着高端通用GPU市场。
英伟达成功的一个关键原因是CUDA,这是一个流行的并行计算环境和编程模型,它使C和c++开发人员(甚至是核心的HPC Fortran类型)更容易利用gpu的能力。开发人员可以利用CUDA工具包和特定于hpc的CUDA库来运行数百个gpu优化的应用程序,而不需要了解如何在底层编写gpu。bob电竞官方CUDA的普及帮助英伟达成为许多高性能计算和深度学习应用程序的实际标准。bob电竞官方最新的英伟达gpu既有传统CUDA内核(在高性能计算和人工智能的核心领域,对大规模矩阵运算非常出色),也有更新版本张量核,专门为深度学习应用程序优化。bob电竞官方
重要的是要认识到GPU应用程序并不只在GPU上运行。bob电竞官方GPU支持的应用程序像其bob电竞官方他应用程序一样运行在传统的CPU内核上,但它们与CUDA软件库(例如用于各种线性代数函数的cuBLAS或用于深度神经网络的cuDNN)相连接,这些软件库访问GPU来加速计算的特定部分。当一个启用GPU的应用程序在主机上运行时,它需要找到CUDA运行时的正确版本、正确的库和设备驱动程序,并避免与试图访问相同GPU或GPU的其他应用程序发生冲突。bob电竞官方这就是支持gpu调度的地方。
调度GPU应用程序-那么有什么bob电竞官方问题?
表面上,调度GPU应用程序听起来很容易。如果我的工作需要GPU,为什么不简单地将GPU作为主机上的消耗性资源,并将工作负载放在一个GPU没有被使用的集群节点上。这是GPU使用早期处理工作负载的方式,但需求已经远远超出了这个简单的用例。
在大型集群中,主机的图形处理器数量可能不同,不同的图形处理器模型在内存和核配置上也不同。GPU也有不同类型的内核,可以在其中运行不同的模式取决于工作负载需求。一些应用程bob电竞官方序需要独占GPU,而其他(典型的MPI应用程序)使用Nvidia的CUDA多进程服务(MPS),用于gpu之间的协同多处理。工作负载管理器需要考虑GPU工作负载的性质,以及内存和PCIe总线拓扑、CPU-GPU亲和等问题NVLink如果存在拓扑,则可以有效地放置工作负载以获得最大性能。
工作负载管理器需要了解GPU的运行状况和负载,理想情况下,还需要与Nvidia之类的管理工具交互数据中心GPU管理器(DCGM),用于监控和管理gpu。它们还需要透明地支持容器化的GPU工作负载和设施,比如nvidia-docker和奇点,以便容器可以共享物理gpu,同时在每个容器中运行不同版本的CUDA库和其他中间件。(我将在后续的博文中介绍Nvidia Docker以及它是如何与网格引擎一起工作的)
当gpu空闲时,工作负载管理器不应该关闭它们吗?如果GPU过热,我们是不是应该另找一台主机,而不是在运行时冒着失败的风险?你懂的。为了合理调度GPU工作负载,工作负载管理人员需要对GPU基础设施和应用程序有深入的了解。bob电竞官方
在放置GPU工作负载时考虑主机配置
最先进的集群越来越多地由具有多个cpu、gpu和复杂总线拓扑的节点组成。下图所示的拓扑是用于HPC和深度学习工作负载的典型Altair Grid Engine集群节点。的日本ABCI超级计算机(绿色500列表中的第4名)在1088个节点集群上运行Altair Grid Engine,每个节点都有两个Intel Skylake处理器,384GB RAM和4个Nvidia Tesla V100 gpu。
单个计算节点的理论性能是506个AI TeraFlops(单精度通常用于人工智能工作负载)或342个双精度TeraFlops(用于科学和工程工作负载)。
调度器需要最优地放置cuda支持的应用程序,以有效利用基础设施。bob电竞官方bob电竞官方应用程序通常需要指定数量或类型的GPU、GPU内存、GPU核、处理器核或内存。
在上面的例子中,如果一个启用了gpu的进程被调度到gpu0,我希望与作业关联的CPU线程始终运行在同一组核心上cpu0最大限度地提高CPU L1/L2缓存效率,并提供最直接的路径gpu0通过本地PCIe总线。
如果GPU工作负载没有消耗主CPU上的所有处理器核,我可能希望将选择的核提供给其他GPU或非GPU任务,只要它们不影响我的其他工作负载的性能。
在其他情况下,比如运行从点对点通信中受益的深度学习TensorFlow应用程序,我可能更倾向于将带有NVLink连bob电竞官方接gpu的整个主机分配给分布式TensorFlow应用程序,而不是在多个支持gpu的集群节点上调度应用程序。
一个具体的深度学习例子有助于说明这一挑战
为了使问题更具体,考虑一个真正的深度学习工作量。幸运的是,支持gpu的示例应用程序很容易找到,因为NVIDIA在bob电竞官方Nvidia GPU的云(NGC),让容器化的GPU应用程序可以提供给任何注册免费会员的人。bob电竞官方
基于python的Tensorflow深度学习应用程序受益于多个gpu和张量核心,它是用于图像识别/分类的ResNet50残差学习模型。细节不重要,但ResNet是一个卷积神经网络,由微软的一个团队开发,可以在流行图像识别胜过人类ImageNet用于训练机器学习模型的数据集。研究中有不同深度的神经网络微软的论文, ResNet50为50层残留网络。
的官方Docker映像中可以找到一个ResNet50示例Tensorflow在NGC。通过使用容器和nvidia-docker,我们在本地集群主机上避免了许多与配置相关的麻烦。这是因为容器包括NVIDIA CUDA, NVIDIA CUDA Deep Neural Network Library (CuDNN)和NVIDIA Collection Communication Library (NCCL),为NVLink和运行模型的所有其他先决条件进行了优化。
我们可以在安装了Docker的Linux主机上以交互方式运行Docker映像,如下所示,或者我们可以像文章中描述的那样向Altair网格引擎提交Docker命令使用牵牛星网格引擎与Docker.Altair Grid Engine非常聪明,如果在本地执行主机上没有找到容器,它可以自动拉出容器。
在上面的命令中:
- -rm表示在执行完成时删除容器
- -它表示以交互模式运行容器
- -v使$HOME/projects的内容可以在/projects容器中访问
- tensorflow:18.03指的是2018年3月使用Python 2的tensorflow图像。x安装。
当你运行示例启用GPU的python脚本(nvcnn.py)来训练图像分类模型,你会看到输出如下所示:
我们的Tensorflow作业消耗主机CPU上的一些内核,并运行在同一主机上的两个gpu上,在本例中是gpu0和gpu1。
运行一个真实的模型需要做的工作比我在这里展示的要多一些,因为用户需要访问云实例,设置一个持久的SSD来存储数据集,将ImageNet数据集的副本下载到SSD上,等等。但是,这个示例向我们展示了单个应用程序的外观。
现在想象一个环境,有几十个用户,数百台主机,每个主机都有2、4或8个不同类型的gpu,以及数百甚至数千个使用不同软件框架的作业。在某些情况下,我们希望在单个主机上运行作业,而在其他情况下,我们的作业可能涉及多个主机。
数据科学家可能需要运行一个单一的深度学习任务,并需要如下资源:
- 基于tensorflow的深度学习应用需要2个参数服务器和8个工人
- 每个参数服务需要一个单独的CPU,至少有四个可用的核心和8GB的RAM
- 每个worker都需要一个CPU,一个Nvidia V100型号的GPU,至少32GB内存,每个worker至少6GB内存可用
- 每个worker需要绑定到一个特定的CPU核心,CPU- gpu对需要驻留在同一个socket上
- 分配的节点应该位于单个机架和相同的机架顶交换机上,以减少网络延迟
- 当从NGC部署时,部署的工人应该自动拉出Tensorflow图像,并使用Tensorflow 18.03运行Python 2。
现在想象成百上千个类似上面的工作,每个工作都有其独特的资源需求和软件依赖关系。我相信你明白了,除非你是许多问我怎么做的人之一卖掉我的gpu?那你可能来错地方了。
在第二部分在本文中,我将介绍Altair Grid Engine,以及它如何提供重要功能来帮助组织解决这些问题以及在共享gpu支持的HPC和AI集群上的其他实际调度挑战。
你在使用gpu和网格引擎吗?如果是这样,联系我们并分享你的经验。您可以在这里了解更多关于牵牛星网格引擎和相关解决方案altair.com/grid-engine.