跳到内容

使用Altair网格引擎与NVIDIA Docker

GPU在HPC加速从分子动力学到深度学习的应用中起着重要作用。在前面的文章中,我们讨论了如何bob电竞官方牵牛星网格引擎支持GPU资源的高效调度。我们还讨论了Altair Grid Engine对Docker和Singularity的支持。在本文中,我将把这些概念组合在一起,并解释如何组合女码头工人简化了集群环境中启用gpu的容器化应用程序的部署。bob电竞官方

NVIDIA Docker解决了什么问题?

大多数读者欣赏Docker在使应用程序可移植方面所扮演的角色。bob电竞官方提醒一下,Docker提供了一种方便的方式来打包应用程序以及依赖项,如二进制文件和库,这样它们就可以在任何运行bob电竞官方码头工人引擎.自2014年以来,主要的Linux发行版都支持Docker。Altair Grid Engine将这些功能扩展到集群环境,使用户能够像任何其他工作负载一样透明地提交、管理和监视容器化的应用程序。bob电竞官方Altair Grid Engine管理的细节包括优化作业、工作负载优先级、处理异常,以及确保所需的Docker映像在具有适当资源的主机上可用。

在容器中支持gpu的应用程序面临的一个挑战是容器与硬件无关。bob电竞官方CUDA是NVIDIA的并行计算平台和API,开发者可以很容易地构建支持gpu的应用程序。bob电竞官方支持gpu的应用程序需要bob电竞官方访问内核级设备驱动程序和用户级CUDA库,不同的应用程序可能需要不同的CUDA版本。

CUDA库示例
没有英伟达码头,CUDA版本的容器需要匹配主机上的NVIDIA驱动程序

解决这个问题的一种方法是在容器中安装NVIDIA驱动程序,并将NVIDIA的物理GPU设备映射到底层的Docker主机上(例如,/dev/nvidia0)到如上所示的容器。这种方法的问题是,驱动程序的版本和容器中的库需要精确匹配。否则应用程序将失败。这意味着用户又要担心在每台主机上安装了什么驱动程序和库来确保与容器化应用程序的兼容性。bob电竞官方

关于英伟达码头工人

为解决GPU应用集装箱化问题,Nvidia开发bob电竞官方女码头工人这是一个开源项目,提供与驱动无关的CUDA图像。NVIDIA Docker插件使运行在容器中的GPU应用程序可以共享Dockbob电竞官方er主机上的GPU设备,而不必担心库和设备驱动程序之间的版本不匹配。

下图显示了这在Altair Grid Engine环境中是如何工作的。不同的集群主机可能运行不同的GPU硬件,甚至CUDA运行时和设备驱动程序的不同版本。理想情况下,应该能够支持在同一主机上支持不同版本CUDA的容器化应用程序。

Nvidia Docker的例子:CUDA库
安装NVIDIA Docker后,不同版本的CUDA库可以共享同一台主机上的gpu

在你的祭坛上设置NVIDIA Docker格栅发动机组

现在NVIDIA Docker的价值已经很清楚了,您可能想要在Altair Grid Engine集群上利用它。一些读者可能已经安装了带有gpu的Altair Grid Engine集群。其他人可能要从零开始。下面的指南省略了一些细节,但提供了让NVIDIA Docker使用Altair Grid Engine的路线图。

确保您有一个具有GPU能力的计算主机的集群

如果您计划运行GPU应用程序,您将需要带有GPbob电竞官方U的硬件。如果您没有GPU功能的主机,您可以在云中以每小时几美元的价格租用计算机实例。为了构造下面的示例,我使用了AWSEC2 P3实例. 这些云实例支持每台计算机最多8个NVIDIA v100 GPU。相对便宜的p3.2大具有单个16GB GPU的实例可按需提供每小时3.06美元。

在AWS云中至少有三种方法可以构建Altair网格引擎集群(我可以想到):

  1. 使用AWS Web UI或AWS CLI自己安装集群主机,并手动安装Altair Grid Engine。如果你走这条路,你知道自己在做什么。
  2. 如果您正在寻找一个更简单的解决方案,您可以像我一样,使用Altair的AWS Marketplace产品部署一个Altair Grid Engine集群。
  3. 如果您正在寻找一个更简单但更定制的解决方案,请联系Altair,我们可以为您提供定制的导航启动。

AWS市场将基于Altair提供的AMI部署单个主主机。主机安装完成后,您可以通过以下方式登录到主机ssh使用Navops启动通过内置AWS资源连接器使用单个命令添加(或删除)集群主机。Altair AWS市场文档提供了一步一步的说明。

安装主主机后,但在添加计算主机之前,请使用下面来自Altair网格引擎主机的Navops启动命令,以显示如何配置AWS资源适配器。

默认情况下,将添加带有AWS适配器的Navops Launchm4.大型展开AWS群集时计算主机。您将希望将默认实例类型更改为p3.2大(因为这些实例具有NVIDIA Tesla V100 GPU),如图所示。

现在可以添加显示的一个或多个计算主机。

一定要跑步获取节点请求检查请求的状态。V100实例的可用性受到限制,可用性因区域而异,因此您将希望看到任何错误消息或异常。

在你将GPU计算节点添加到你的集群之后,你可以验证它们已经启动并运行:

p3.2大AWS上的按需计算主机将花费大约每小时10美元或每周约1500美元,因此,请小心不要让它们运行太长!

在每个Altair上安装CUDA驱动程序网格发动机主机

因为我使用的是Altair Grid Engine AMI(运行CentOS),所以我基于aws的计算主机没有NVIDIA CUDA驱动程序。您需要为您的操作系统版本安装相应的NVIDIA驱动程序。

详细说明可在此找到:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html

要安装的rpm取决于您的操作系统版本。为了简洁起见,我跳过了下面的几个步骤,但我下载了CentOS的公开可用驱动程序(列在https://www.nvidia.com/Download/Find.aspx).的p3.2大AWS实例包含如下所示的Tesla V100 GPU,并且RHEL7驱动程序用于CentOS 7。

NVIDIA驱动程序下载:RHEL 7

特斯拉驱动程序向后兼容。V100驱动程序还将支持较旧的P系列、K系列和C、M和K类GPU。

一旦你获得了rpm格式驱动程序,你可以使用以下命令在每个计算主机上安装驱动程序:

特斯拉驱动程序向后兼容。V100驱动程序还将支持较旧的P系列、K系列和C、M和K类GPU。

一旦你获得了rpm格式驱动程序,你可以使用以下命令在每个计算主机上安装驱动程序:

在集群计算主机上安装Docker

现在您有了一个带有gpu的Altair Grid Engine集群,下一步是在每个计算主机上安装Docker。我们在前一篇文章所以我不会在这里重复所有细节,但是下面的脚本(应该)在Grid Engine集群主机上安装Docker。

你可以找到在CentOS上安装Docker社区版的详细信息在这里

在群集主机上安装NVIDIA Docker插件

现在您已经有了工作的GPU集群主机,并且在每个主机上安装了Docker,下一步是在每个主机上安装NVIDIA Docker。详细安装说明可在https://github.com/nvidia/nvidia-docker/wiki/Installation-(版本2.0)

下面的脚本适用于我的CentOS 7计算主机。前几行添加了nvidia-docker存储库。接下来,yum被用来安装nvidia-docker2,我们重新启动每个主机上的docker守护进程来识别nvidia-docker插件。

接下来,我们可以通过从内部运行启用GPU的应用程序来验证nvidia docker是否工作nvidia cuda技术/码头工人容器。的nvidia cuda技术/容器(可从Docker Hub获得)包括CUDA工具包。打包的GPU应用程序通常基bob电竞官方于这个容器。

下面的命令再次运行英伟达smi,但这次在里面nvidia cuda技术/从Docker中心取出的集装箱。

运行时=英伟达打开DOCKER运行命令告诉Docker使用英伟达DOCKER插件。

如果你已经走到了这一步,恭喜你——你现在已经安装了NVIDIA Docker,并且正在您的Altair网格引擎集群上工作。

NVIDIA Docker,配备Altair网格引擎

现在Nvidia Docker正在计算主机上工作,下一步是将Nvidia Docker容器作为Altair Grid Engine作业提交。在Grid Engine下运行容器的优点是,调度器会找出运行容器的最佳位置,以便多个应用程序和用户可以共享gpu资源。bob电竞官方

Altair Grid Engine为运行NVIDIA Docker提供了特定的增强。你可以使用-xd在Altair Grid Engine开关通过运行时=英伟达参数以及需要在Docker容器中访问的任何环境变量。

下面显示了如何将NVIDIA Docker容器化应用程序提交到网格引擎集群的示例命令:bob电竞官方

  • -我switch表示我们需要在集群主机上运行,将docker资源设置为true(在安装docker时由Altair Grid Engine自动设置),并请求基于“tensorflow:18.03-py2”映像创建一个容器。我们还指出,需要一个支持GPU的主机,并且需要将CPU内核绑定到连接到请求的Tesla V100 GPU的插座上。
  • -xdSwitch用于通过运行时=英伟达参数到所选Altair Grid Engine计算主机上的docker
  • - b ySwitch表示我们不是传递一个脚本来执行,而是调用一个已经在容器内部的二进制命令。
  • 通常,在容器中启动的shell将对应于队列中定义的shell,但由于容器可能不包含/bin/bash shell,我们指定-S/bin/sh启动更标准的bourne shell而不是重生的壳(bash)。
  • 容器内的命令是一个已经驻留在容器中的脚本或二进制文件的路径,或者主机上可用的容器内挂载的路径(例如/projects/NGC/tensorflow/nvidia-examples/cnn/nvcnn.py)

有各种预打包的GPU应用程序可用bob电竞官方NGC公司(Nvidia GPU的云)。在Altair Grid Engine GPU主机上安装Docker和NVIDIA Docker后,你可以使用上面解释的方法来运行启用GPU的应用程序(当然有一些限制),而不必担心与底层设备驱动程序的兼容性。

你使用过NVIDIA Docker与Altair Grid Engine吗?我们很乐意听取你的意见和经验。您可以了解有关Altair网格引擎//www.s-emart.com/grid-engine