云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

分布式数据库_香港大宽带服务器_限时特惠

小七 141 0

使用HashiCorp Nomad调度GPU工作负载

Chris Baker在学术界、工业界和政府部门担任高级软件开发人员已有20多年的历史。他曾是美国能源部的科学家,曾为世界上最大的超级计算机开发软件,并在国际知名期刊上发表研究成果。他目前是HashiCorp Nomad团队的软件工程师。Renaud Gaubert自2017年以来一直致力于使GPU应用程序更易于在数据中心部署和管理。他专注于在容器编排系统(如Kubernetes、Docker swarm和Nomad)中支持GPU加速机器学习框架。HashiCorp nomad0.9引入了设备插件,支持一组可扩展的设备来调度和部署工作负载。设备插件允许对物理硬件设备进行检测、指纹识别,并提供给Nomad作业调度器使用。0.9版本包含了一个用于NVIDIA gpu的设备插件。一些示例用例包括:使用诸如gpu或tpu之类的加速器的计算密集型工作负载用于保护应用程序和基础设施的硬件安全模块附加可编程器件这篇文章描述了设备插件系统,介绍了NVIDIA GPU支持,并给出了一个使用此功能的GPU加速机器学习工作流的例子。»设备插件设备插件代表nomad0.9中的一个新特性。它们允许Nomad客户机除了现有的内置资源(如CPU、内存和磁盘)之外,还可以发现可用的硬件资源。设备插件检测设备并对其属性进行指纹识别。当使用与设备插件相关联的资源调度任务时,该插件还帮助Nomad客户机使分配的设备对任务可用。在指纹识别过程中,设备插件报告检测到的设备数量、每个设备的一般信息(供应商、类型和型号)和设备特定属性(例如可用内存、硬件功能)。插件返回的信息从客户端传递到服务器,并在调度作业时使用任务资源节中的设备节,例如:资源{设备"供应商/类型/型号"{计数=2约束{。。。}相关性{。。。}}}此节允许选择自定义设备。用户可以根据不同的具体程度来指示他们的需求。例如,用户可以指定nvidia/gpu来获得任何nvidia gpu,也可以指定所需的确切型号,例如nvidia/gpu/1080ti。除了指定一些必要的设备之外,device节还支持设备资源的亲和力和约束。它们允许使用设备插件指纹识别的任何设备属性来指定设备首选项和/或约束。为了符合Nomad轻松部署集群的目标,注册这些插件不需要重新编译Nomad。只需要将它们放在Nomad二进制文件旁边的客户机节点上。»NVIDIA GPU设备插件虽然图形处理单元(gpu)最初致力于计算机图形计算,但它已成为工作负载的关键计算资源,从高性能科学计算到机器学习再到加密货币挖掘。我们将NVIDIA GPU设备插件绑定为nomad0.9二进制文件的一部分,以便在Nomad集群上协调GPU加速的工作负载。NVIDIA设备插件首先扫描客户机节点,寻找合适的NVIDIA gpu,然后对其硬件和功能进行指纹识别,包括时钟速度、驱动程序版本和内存大小。插件最终将发现的设备报告为节点的NVIDIA资源。例如,以下节点状态表示NVIDIA设备插件发现的GPU设备,以及该设备的所有指纹属性:$nomad节点状态-详细1d6...主机资源利用率CPU存储盘181/24000兆赫955兆比特/60吉比特4.6吉比特/97吉比特设备资源利用率nvidia/gpu/Tesla V100-SXM2-16GB[…]0/16130 MiB...设备组属性设备组=nvidia/gpu/Tesla V100-SXM2-16GBbar1=16384兆字节核心时钟=1530 MHz显示状态=启用驱动程序版本=418.39_U时钟MHz内存=16130MiB pci_带宽=15760 MB/s持续模式=启用功率=300 WNomad作业规范的资源节适用于任何检测到的可用设备。下面的示例显示了一个请求2个NVIDIA gpu的资源节。标签"nvidia/gpu"表示对供应商"nvidia"的"gpu"类型的设备的要求。约束节表示使用人类可读单元的内存需求,而关联节表示对具有Tesla型号的设备的可选偏好。调度器过滤没有至少两个设备匹配约束的节点,然后根据任何相似性的满足程度进行排序。当任务被调度到某个节点时,调度程序将该任务可用的gpu标记为已分配,并且在该任务的生命周期内不可用于其他作业。资源{设备"nvidia/gpu"{计数=2约束{属性="${设备属性内存}"操作员=">="value="4吉布"}亲和力{属性="${设备.型号}"operator="regexp"value="特斯拉"}}}视频演示了使用支持GPU的Nomad集群来调度NVIDIA TensorRT推理服务器平台。要在AWS中自己运行演示,您可以使用这个Terraform配置配置Nomad基础设施并运行TensorRT示例作业。»与Nomad集成图1显示了libnvidia容器如何与Nomad客户机集成,特别是在runc层。我们使用一个名为nvidia container runtime hook的定制OCI预启动钩子,以便在Docker中启用GPU容器(有关钩子的更多信息可以在OCI运行时规范中找到)。图1。挂接Nomad代理的GPU容器体系结构图在创建容器时,prestart钩子使用环境变量检查容器是否启用了GPU,并使用容器运行时库向容器公开NVIDIA GPU。Nomad基于插件的集成策略为用户带来了几个优势:生产准备就绪。NVIDIA运行时库(libnvidia容器)和prestart钩子已经在生产环境中运行了两年多了。NVIDIA还确保使用运行库的CUDA容器将继续受支持并从最新特性中获益。简单的功能集成。新的CUDA平台功能(如CUDA兼容性)无需升级Nomad即可使用。»典型的GPU深度学习推理应用使用GPU运行编排软件的用例范围从为科学家管理GPU集群到将深度学习模型作为生产服务运行。让我们把重点放在后一个用例上,以及这是如何映射到Nomad的平滑体验上的。训练一个神经网络所花费的许多小时的结果就是一个模型。根据你的神经网络的结构和结构,依附于你的结构。如果您或您的数据科学团队已经构建、培训、调整和优化了模型,那么Nomad是投入生产的最佳选择。使用深度学习模式进行生产远非易事,因此,让我们来看看存在的各种问题:请求路由。您需要能够接受传入的请求(HTTP、GRPC等)并将它们发送到您的网络。监控。您必须能够观察您的网络如何运行以及它使用了多少资源。并行化。您需要合理的延迟和吞吐量,并且可能需要并行处理请求可扩展性。您希望集群中的实例数量随需求而增长。成本。您必须最佳地利用可用的GPU以获得最大的性能成本比。灵活性。这允许您A/B测试模型的不同版本。您可以通过编排软件和推理解决方案的组合来解决上面的许多问题。例如,NVIDIA的TensorRT推理服务器优化利用可用的GPU以获得最大可能的性能,为Prometheus提供指标,并通过HTTPS和gRPC处理传入的网络请求。我们使用TensorRT推理服务器,它允许我们受益于GPU显著加快计算时间的能力,如图2所示。图2。NVIDIA TensorRT推理性能比较现在让我们看一下使用已知模型(RESNET-50)并获得可以满足数千个请求的生产设置的过程。这将使用以下步骤:编写TensorRT推理服务器Nomad作业向TensorRT推理服务器提供模型部署示例前端web应用程序以使用HTTP与推理服务器通信»第1步。编写TensorRT推理服务器作业您可以从NVIDIA容器注册表下载TensorRT推理服务器容器。它需要大量的设置,例如指定用于通过HTTP、gRPC或其度量进行通信的不同端口。它还需要指定要使用的设备数量。另外,服务器可以在多个gpu上的同一容器中为多个模型提供请求。这是一个比每个GPU每个模型一个服务器更好的体系结构,允许将GPU的计算能力"共享"给多个模型。工作"tensorrt"{...任务"rtserver"{配置{图像="nvcr.io/nvidia/tensorrtserver:19.02-py3英寸...shm_大小=1024港口地图{http=8000grpc=8001指标=8002}乌利米特{memlock="-1"