优化NVIDIA DGX系统
使用Altair网格引擎构建未来的HPC和AI集群环境
在上一篇文章中,充分利用Altair网格引擎的NVIDIA DGX系统,我们讨论了gpu对HPC和深度学习工作负载的重要性,并解释了Altair Grid Engine如何帮助用户充分利用NVIDIA DGX系统。随着用户越来越多地利用GPU、容器和云资源来实现高性能应用,对GPU工作负载的有效管理比以往任何时候都更加重要。bob电竞官方随着年度NVIDIA GPU技术大会(现在是一个在线活动)的临近,现在似乎是重新讨论这个话题的好时机。
资源管理和DGX系统
DGX用户中的常见问题是如何在多个用户或组之间共享系统。很少有组织可以为特定用户专用大规模系统,应用环境越来越复杂。幸运的是,对于HPC和深度学习的广泛学科,NVIDIA在NVIDIA GPU云(NGC)中提供了验证的容器,以简化GPU应用。bob电竞官方1
例如,如果您正在构建图像分类的型号,则可能从A开始TensorFlow集装箱图片。此图像包含数十个软件包,包括OS,NVIDIA软件(CUDA,CUDNN,NCCL),OpenMPI和Horovod(用于并行训练),Jupyter等组件。这示例脚本使用Horovod运行多GPU模型,分配GPU对应于MPI任务的等级。2虽然这使示例保持简单,但在生产中会造成问题。例如,如果四个用户试图运行一个4路DGX-2相同主机上培训工作,第一份工作将会分配gpu 0到3和随后的三份工作都将失败,试图重新分配相同的gpu,而75%的gpu闲置着。用户可以修改脚本或调整MPI命令行来手动指定主机和GPU设备,但这是繁琐和容易出错的。在共享DGX系统时,支持gpu的资源管理器是一种更实用的解决方案。
运行GPU应用程序的更好方法bob电竞官方
GPU系统的资源管理至关重要,原因有三:
- 它避免使用GPU作业通过在不可用时自动排队失败。
- 它通过在运行时动态分配GPU来最大限度地提高资源使用和效率,提高整体生产率。
- 它通过考虑机器架构和工作负载的几何形状来调度工作负载的主机和GPU部分,从而实现性能最大化。这包括NUMA、CPU-GPU亲和和平衡内存通道、总线、交换机和网络接口流量的放置策略等细节。
除了这些gpu支持的调度功能外,其他策略也很有用。例如,当多个用户共享一个DGX集群时,公平共享策略可以保证不同的用户、部门或项目在一段时间内被分配到特定的GPU资源。用户经常混合运行CPU和GPU工作负载,在某些情况下,CPU任务可能会消耗资源并阻止GPU任务运行。与其让有价值的gpu闲置,不如自动抢占低优先级的CPU工作负载,以避免有价值的DGX资产闲置。
资源管理器如何优化展示位置
在DGX环境中,Altair网格引擎等资源管理器可以控制完整的群集环境。资源管理器在GPU中强制执行CGroups隔离,阻止作业彼此冲突。3.
当DGX主机处于Workload Manager的控制时,MPI运行时通常驻留在每个集群主机(外部应用程序容器)上,并且是资源管理器感知。当提交需要GPU的并行作业时,用户指示MPI排名的总数,每个主机的等级数(GPU),并将其留给资源管理器以优化放置。
虽然资源管理器知道主机和作业,但它通常不会知道GPU。这是NVIDIA的数据中心GPU管理器(DCGM)进入。与DCGM集成的资源管理器具有对CPU-GPU亲和力,GPU存储器,温度,错误率等的详细信息具有实时可见性。通过利用DCGM的信息,调度程序可以提高吞吐量,效率和可靠性。资源管理器中的报告和监视解决方案可以聚合和报告这些和其他与GPU相关的指标。
面向面向未来的GPU基础设施
除了支持gpu之外,资源管理器还需要在DGX硬件上无缝地运行来自NGC和其他注册中心的容器。资源管理器应该支持多个容器管理器,包括Docker和Singularity,并透明地将容器与其他支持异构应用程序和多机器架构的工作负载混合在一起。bob电竞官方虽然DGX系统提供了足够的能力来运行本地的HPC和深度学习工作负载,但一些用户会希望利用他们喜欢的云提供商提供的gpu和其他资源。
牵牛星网格引擎是一个领先的分布式资源管理器,可优化工作负载和资源。Altair网格引擎与NVIDIA DGX系统集成,提供高级集装箱管理,复杂的云爆发和云自动化功能Navops发射并与NGC图像无缝工作。Altair最近宣布支持基于ARM的系统的NVIDIA GPU。
/您可以了解有关Altair网格引擎的更多信息这里或者将DGX系统扩展为混合云GPU这里。
参考文献
- 请参阅NVIDIA深度学习框架,作为一个例子 -https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html
- rank是指在并行MPI作业中分配给每个进程的数字指示符。Horovod提供一个hvd.rank()方法来检索分布式MPI作业中任务的总排名,并提供一个hvd.local_rank()方法来检索每个服务器上从“0”开始的本地排名。这里提供了一个解释https://horovod.readthedocs.io/en/latest/tensorflow.html.
- Cgroups(控制组)是Linux内核的一个特性,它限制、统计和隔离资源使用,控制哪些进程可以访问哪些设备。