使用带 GPU 的 Amazon SageMaker 多模型端点实现模型服务的大规模高性能

使用带 GPU 的 Amazon SageMaker 多模型端点实现模型服务的大规模高性能

亚马逊SageMaker 多模型端点 (MME) 提供了一种可扩展且经济高效的方式来部署大量机器学习 (ML) 模型。 它使您能够在单个端点后面的单个服务容器中部署多个 ML 模型。 从那里,SageMaker 根据您的流量模式代表您管理模型的加载和卸载以及扩展资源。 您将受益于共享和重用托管资源,并减轻管理大量模型的运营负担。

十一月2022, MME 添加了对 GPU 的支持s,它允许您在单个 GPU 设备上运行多个模型,并在单个端点后面扩展 GPU 实例。 这满足了 MME 对受益于 GPU 加速计算的深度神经网络 (DNN) 模型的强烈需求。 其中包括计算机视觉 (CV)、自然语言处理 (NLP) 和生成式 AI 模型。 需求的原因包括:

  • DNN 模型的规模和复杂性通常很大,并且会继续快速增长。 以NLP模型为例,其中很多模型的参数都超过了数十亿,这就需要GPU满足低延迟和高吞吐量的要求。
  • 我们观察到越来越需要定制这些模型来为个人用户提供超个性化的体验。 随着这些模型数量的增加,需要更简单的解决方案来大规模部署和操作许多模型。
  • GPU 实例价格昂贵,您希望尽可能多地重用这些实例,以最大限度地提高 GPU 利用率并降低运营成本。

尽管所有这些原因都表明带有 GPU 的 MME 是 DNN 模型的理想选择,但建议执行负载测试以找到满足您的用例要求的正确端点配置。 许多因素都会影响负载测试结果,例如实例类型、实例数量、模型大小和模型架构。 此外,负载测试可以帮助使用正确的指标而不是迭代试错法来指导自动扩展策略。

出于这些原因,我们将这篇文章放在一起,以帮助您使用 GPU 在 MME 上执行适当的负载测试,并找到适合您的 ML 用例的最佳配置。 我们分享了在不同实例类型上使用 MME 托管的 NLP 和 CV 中一些最流行的 DNN 模型的负载测试结果。 我们总结了测试结果的见解和结论,以帮助您在配置自己的部署时做出明智的决定。 在此过程中,我们还分享了我们推荐的在 GPU 上为 MME 执行负载测试的方法。 推荐的工具和技术确定每个实例类型可以加载的最佳模型数量,并帮助您实现最佳性价比。

解决方案概述

关于MME和带GPU的MME的介绍,参考 创建多模型端点使用 Amazon SageMaker 多模型终端节点在 GPU 上运行多个深度学习模型. 对于本文中的负载测试上下文,您可以从以下位置下载我们的示例代码 GitHub回购 重现结果或将其用作模板来对您自己的模型进行基准测试。 回购中提供了两个笔记本:一个用于负载测试 CV 模型,另一个用于 NLP。 几个不同大小和架构的模型在不同类型的 GPU 实例上进行了基准测试:ml.g4dn.2xlarge、ml.g5.2xlarge 和 ml.p3.2xlarge。 这应该为每个实例和模型类型提供以下指标的合理性能横截面:

  • 可以加载到 GPU 内存中的最大模型数
  • 在客户端观察到的每个推理查询的端到端响应延迟
  • 端点可以无错处理的每秒最大查询吞吐量
  • 在观察到失败请求之前每个实例的最大当前用户数

下表列出了测试的模型。

用例 型号名称 磁盘大小 参数数量
CV resnet50 100Mb 25M
CV convnext_base 352Mb 88M
CV vit_large_patch16_224 1.2Gb 304M
NLP bert-base-uncased 436Mb 109M
NLP roberta-large 1.3Gb 335M

下表列出了测试的 GPU 实例。

实例类型 GPU类型 GPU 数量 GPU 内存 (GiB)
ml.g4dn.2xlarge NVIDIA T4 GPU 1 16
ml.g5.2xlarge NVIDIA A10G 张量核心 GPU 1 24
毫升.p3.2xlarge NVIDIA® V100 张量核心 GPU 1 16

如前所述,该 代码示例 可以采用其他模型和实例类型。

请注意,MME 目前仅支持单个 GPU 实例。 有关支持的实例类型列表,请参阅 支持的算法、框架和实例.

基准测试程序包括以下步骤:

  1. 从模型中心检索预训练模型。
  2. 准备模型工件以在 SageMaker MME 上提供服务(请参阅 使用 Amazon SageMaker 多模型终端节点在 GPU 上运行多个深度学习模型 更多细节)。
  3. 在 GPU 实例上部署 SageMaker MME。
  4. 确定在指定阈值内可以加载到 GPU 内存中的最大模型数。
  5. 使用 Locust 负载测试框架来模拟随机调用实例上加载的模型的流量。
  6. 收集数据并分析结果。
  7. 或者,在将模型编译为 TensorRT 后重复步骤 2-6。

第 4 步和第 5 步需要更深入地了解。 SageMaker GPU MME 中的模型以动态方式加载到内存中。 因此,在第 4 步中,我们将初始模型工件上传到 亚马逊简单存储服务 (Amazon S3) 并调用模型将其加载到内存中。 初始调用后,我们测量消耗的 GPU 内存量,复制初始模型,调用模型副本将其加载到内存中,然后再次测量消耗的 GPU 内存总量。 重复此过程,直到达到 GPU 内存利用率的指定百分比阈值。 对于基准测试,我们将阈值设置为 90%,以提供合理的内存缓冲区,以便对较大的批次进行推理或留出一些空间来加载其他不常用的模型。

模拟用户流量

确定模型数量后,我们可以使用 蝗虫负载测试框架. 负载测试模拟用户对随机模型的请求,并自动测量响应延迟和吞吐量等指标。

Locust 支持自定义负载测试形状,允许您定义自定义流量模式。 下表显示了此基准测试中使用的形状。 在前 30 秒内,端点预热 10 个并发用户。 30 秒后,新用户以每秒两个的速度生成,在 20 秒时达到 40 个并发用户。 然后以 20 个并发用户为基准稳定地对端点进行基准测试,直到 60 秒标记,此时 Locust 再次开始以每秒两个的速度增加用户,直到 40 个并发用户。 重复这种逐渐增加和稳定的测试模式,直到端点增加到 200 个并发用户。 根据您的用例,您可能需要调整 locust_benchmark_sm.py 中的负载测试形状,以更准确地反映您预期的流量模式。 例如,如果您打算托管更大的语言模型,则对于托管在单个实例上的模型,具有 200 个并发用户的负载测试可能不可行,因此您可能希望减少用户数或增加实例数。 您可能还想延长负载测试的持续时间,以更准确地衡量端点在较长时间内的稳定性。

stages = [
{"duration": 30, "users": 10, "spawn_rate": 5},
{"duration": 60, "users": 20, "spawn_rate": 1},
{"duration": 90, "users": 40, "spawn_rate": 2},
…
]

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。

请注意,我们仅使用 PyTorch 或 TensorRT 在一致的服务基础上运行的同类模型对端点进行了基准测试。 这是因为 MME 最适合托管许多具有相似特征(例如内存消耗和响应时间)的模型。 中提供的基准测试模板 GitHub回购 仍可用于确定在 MME 上提供异构模型是否会产生所需的性能和稳定性。

CV 模型的基准测试结果

使用 cv-benchmark.ipynb 笔记本运行计算机视觉模型的负载测试。 您可以调整预训练模型名称和实例类型参数,以对不同模型和实例类型组合进行性能负载测试。 我们特意测试了三个不同尺寸范围的 CV 模型,从最小到最大: resnet50 (25M), convnext_base (88M), 和 vit_large_patch16_224 (304M)。 如果您选择此列表之外的模型,您可能需要调整代码。 此外,notebook 将输入图像形状默认为 224x224x3 图像张量。 如果您需要对采用不同尺寸图像的模型进行基准测试,请记住相应地调整输入形状。

跑完整个笔记本后,你会得到几个性能分析可视化。 前两个详细说明了模型在增加并发用户方面的性能。 下图是为 ResNet50 在 ml.g4dn.2xlarge 上运行的模型,比较 PyTorch(左)与 TensorRT(右)。 最上面的线图在 y 轴上显示了模型延迟和吞吐量,同时在 x 轴上反映了并发客户端工作人员数量的增加。 底部的条形图显示成功和失败请求的计数。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。

查看我们测试的所有计算机视觉模型,我们观察到以下内容:

  • 对于更大的模型 (resnet50 > convnext_base > vit_large_patch16_224).
  • 随着更多请求在推理服务器上排队,延迟增加与用户数量成正比。
  • 与小型模型相比,大型模型会消耗更多的计算资源,并且可以用更少的用户达到其最大吞吐量限制。 这是观察到的 vit_large_patch16_224 模型,它记录了 140 个并发用户的第一个失败请求。 它比测试的其他两个模型大得多,在更高的并发性下也有最多的失败请求。 这是一个明确的信号,表明如果要支持超过 140 个并发用户,端点需要扩展到单个实例之外。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。

在 notebook 运行结束时,您还可以获得 PyTorch 与 TensorRT 模型在四个关键指标中的每一个的总结比较。 从我们的基准测试来看,CV 模型在 TensorRT 编译后都看到了模型性能的提升。 以我们的 ResNet50 再次以模型为例,延迟降低了 32%,吞吐量提高了 18%。 尽管最大并发用户数保持不变 ResNet50, 其他两个型号的可支持并发用户数均提高了 14%。 然而,TensorRT 性能的提升是以更高的内存利用率为代价的,导致 MME 加载的模型更少。 对于使用卷积神经网络 (CNN) 的模型,影响更大。 事实上,从 PyTorch 到 TensorRT,我们的 ResNet50 模型消耗了大约两倍的 GPU 内存,导致加载的模型减少了 50%(46 对 23)。 我们将在下一节中进一步诊断此行为。

NLP 模型的基准测试结果

对于 NLP 模型,使用 nlp-benchmark.ipynb 笔记本运行负载测试。 笔记本的设置应该看起来非常相似。 我们测试了两个 NLP 模型:bert-base-uncased (109M) 和 roberta-large (335M)。 预训练模型和分词器都是从 Hugging Face hub 下载的,测试有效负载是使用示例字符串从分词器生成的。 最大序列长度默认为 128。如果您需要测试更长的字符串,请记住调整该参数。 运行 NLP notebook 会生成相同的可视化集:Pytorch(左)与 TensorRT(右)。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。
使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。

从这些中,我们观察到 TensorRT 对于 NLP 模型的更多性能优势。 以 roberta-large 例如,在 ml.g4dn.2xlarge 实例上的模型,推理延迟从 180 毫秒急剧减少到 56 毫秒(改进了 70%),而吞吐量从每秒 406 个请求提高到 33 个,提高了 167%。此外,最大并发数用户增加了 50%; 直到我们达到 180 个并发用户时才观察到失败的请求,而原始 PyTorch 模型为 120 个。 在内存利用率方面,我们看到为 TensorRT 加载的模型少了一个(从九个模型减少到八个)。 然而,与我们在基于 CNN 的模型中观察到的相比,负面影响要小得多。

内存利用率分析

下表显示了从 PyTorch 到 TensorRT 对内存利用率影响的完整分析。 我们之前提到过,基于 CNN 的模型受到的影响更大。 这 ResNet50 模型在所有三种 GPU 实例类型中加载的模型数量减少了 50% 以上。 Convnext_base 整体降幅更大,约为 70%。 另一方面,对变压器模型的影响很小或混合。 vit_large_patch16_224roberta-large 分别平均减少了约 20% 和 3%,而 bert-base-uncased 有大约 40% 的改进。

从整体上看所有数据点在延迟、吞吐量和可靠性方面的卓越性能,以及对最大模型加载数量的轻微影响,我们建议将 TensorRT 模型用于基于 transformer 的模型架构。 对于 CNN,我们认为需要进行进一步的成本性能分析,以确保性能优势超过额外托管基础设施的成本。

机器学习用例 建筑 型号名称 实例类型 骨架 最大加载模型 差异 (%) 平均。 差异 (%)
CV 美国有线电视新闻网 Resnet50 ml.g4dn.2xlarge PyTorch 46 -50% -50%
张量RT 23
ml.g5.2xlarge PyTorch 70 -51%
张量RT 34
毫升.p3.2xlarge PyTorch 49 -51%
张量RT 24
Convnext_base ml.g4dn.2xlarge PyTorch 33 -50% -70%
张量RT 10
ml.g5.2xlarge PyTorch 50 -70%
张量RT 16
毫升.p3.2xlarge PyTorch 35 -69%
张量RT 11
变压器 vit_large_patch16_224 ml.g4dn.2xlarge PyTorch 10 -30% -20%
张量RT 7
ml.g5.2xlarge PyTorch 15 -13%
张量RT 13
毫升.p3.2xlarge PyTorch 11 -18%
张量RT 9
NLP Roberta-large ml.g4dn.2xlarge PyTorch 9 -11% -3%
张量RT 8
ml.g5.2xlarge PyTorch 13 0%
张量RT 13
毫升.p3.2xlarge PyTorch 9 0%
张量RT 9
Bert-base-uncased ml.g4dn.2xlarge PyTorch 26 62% 40%
张量RT 42
ml.g5.2xlarge PyTorch 39 28%
张量RT 50
毫升.p3.2xlarge PyTorch 28 29%
张量RT 36

下表列出了我们针对所有三种 GPU 实例类型的所有指标的完整基准测试结果。

ml.g4dn.2xlarge

用例 建筑 型号名称 参数数量 骨架 最大加载模型 差异 (%) 延迟(ms) 差异 (%) 吞吐量(qps) 差异 (%) 最大并发用户数 差异 (%)
CV 美国有线电视新闻网 resnet50 25M PyTorch 46 -50% 164 -32% 120 18% 180 NA
张量RT 23 . 111 . 142 . 180 .
convnext_base 88M PyTorch 33 -70% 154 -22% 64 102% 140 14%
张量RT 10 . 120 . 129 . 160 .
变压器 vit_large_patch16_224 304M PyTorch 10 -30% 425 -69% 26 304% 140 14%
张量RT 7 . 131 . 105 . 160 .
NLP bert-base-uncased 109M PyTorch 26 62% 70 -39% 105 142% 140 29%
张量RT 42 . 43 . 254 . 180 .
roberta-large 335M PyTorch 9 -11% 187 -70% 33 406% 120 50%
张量RT 8 . 56 . 167 . 180 .

ml.g5.2xlarge

用例 建筑 型号名称 参数数量 骨架 最大加载模型 差异 (%) 延迟(ms) 差异 (%) 吞吐量(qps) 差异 (%) 最大并发用户数 差异 (%)
CV 美国有线电视新闻网 resnet50 25M PyTorch 70 -51% 159 -31% 146 14% 180 11%
张量RT 34 . 110 . 166 . 200 .
convnext_base 88M PyTorch 50 -68% 149 -23% 134 13% 180 0%
张量RT 16 . 115 . 152 . 180 .
变压器 vit_large_patch16_224 304M PyTorch 15 -13% 149 -22% 105 35% 160 25%
张量RT 13 . 116 . 142 . 200 .
NLP bert-base-uncased 109M PyTorch 39 28% 65 -29% 183 38% 180 11%
张量RT 50 . 46 . 253 . 200 .
roberta-large 335M PyTorch 13 0% 97 -38% 121 46% 140 14%
张量RT 13 . 60 . 177 . 160 .

毫升.p3.2xlarge

用例 建筑 型号名称 参数数量 骨架 最大加载模型 差异 (%) 延迟(ms) 差异 (%) 吞吐量(qps) 差异 (%) 最大并发用户数 差异 (%)
CV 美国有线电视新闻网 resnet50 25M PyTorch 49 -51% 197 -41% 94 18% 160 -12%
张量RT 24 . 117 . 111 . 140 .
convnext_base 88M PyTorch 35 -69% 178 -23% 89 11% 140 14%
张量RT 11 .137 137 . 99 . 160 .
变压器 vit_large_patch16_224 304M PyTorch 11 -18% 186 -28% 83 23% 140 29%
张量RT 9 . 134 . 102 . 180 .
NLP bert-base-uncased 109M PyTorch 28 29% 77 -40% 133 59% 140 43%
张量RT 36 . 46 . 212 . 200 .
roberta-large 335M PyTorch 9 0% 108 -44% 88 60% 160 0%
张量RT 9 . 61 . 141 . 160 .

下表总结了所有实例类型的结果。 ml.g5.2xlarge 实例提供最佳性能,而 ml.p3.2xlarge 实例尽管是三个实例中最昂贵的,但通常表现不佳。 g5 和 g4dn 实例展示了推理工作负载的最佳价值。

用例 建筑 型号名称 参数数量 骨架 实例类型 最大加载模型 差异 (%) 延迟(ms) 差异 (%) 吞吐量(qps) 差异 (%) 最大并发用户数
CV 美国有线电视新闻网 resnet50 25M PyTorch ml.g5.2xlarge 70 . 159 . 146 . 180
. . . . . 毫升.p3.2xlarge 49 . 197 . 94 . 160
. . . . . ml.g4dn.2xlarge 46 . 164 . 120 . 180
CV CN resnet50 25M 张量RT ml.g5.2xlarge 34 -51% 110 -31% 166 14% 200
. . . . . 毫升.p3.2xlarge 24 -51% 117 -41% 111 18% 200
. . . . . ml.g4dn.2xlarge 23 -50% 111 -32% 142 18% 180
NLP 变压器 bert-base-uncased 109M 火炬 ml.g5.2xlarge 39 . 65 . 183 . 180
. . . . . 毫升.p3.2xlarge 28 . 77 . 133 . 140
. . . . . ml.g4dn.2xlarge 26 . 70 . 105 . 140
NLP 变压器 bert-base-uncased 109M 张量RT ml.g5.2xlarge 50 28% 46 -29% 253 38% 200
. . . . . 毫升.p3.2xlarge 36 29% 46 -40% 212 59% 200
. . . . . ml.g4dn.2xlarge 42 62% 43 -39% 254 142% 180

清理

完成负载测试后,清理生成的资源以避免产生额外费用。 主要资源是 Amazon S3 中的 SageMaker 终端节点和模型构件文件。 为了方便您,笔记本文件具有以下清理代码来帮助您删除它们:

delete_endpoint(sm_client, sm_model_name, endpoint_config_name, endpoint_name) ! aws s3 rm --recursive {trt_mme_path}

结论

在本文中,我们分享了我们对在 SageMaker 多模型端点上使用 GPU 运行的各种深度神经网络模型的测试结果和分析。 我们分享的结果和见解应该提供跨不同指标和实例类型的合理性能横截面。 在此过程中,我们还介绍了我们推荐的使用 GPU 为 SageMaker MME 运行基准测试的方法。 我们提供的工具和示例代码可以帮助您快速启动基准测试,并就如何在加速计算硬件上经济高效地托管数百个 DNN 模型做出更明智的决策。 要开始使用 MME 对 GPU 的支持对您自己的模型进行基准测试,请参阅 支持的算法、框架和实例GitHub回购 有关其他示例和文档。


关于作者

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。詹姆斯吴 是 AWS 的高级 AI/ML 专家解决方案架构师。 帮助客户设计和构建 AI/ML 解决方案。 James 的工作涵盖了广泛的 ML 用例,主要兴趣在于计算机视觉、深度学习和在整个企业中扩展 ML。 在加入 AWS 之前,James 担任了 10 多年的架构师、开发人员和技术领导者,其中包括 6 年的工程经验和 4 年的营销和广告行业经验。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。维克拉姆·埃兰戈 是位于美国弗吉尼亚州的 Amazon Web Services 的 AI/ML 专家解决方案架构师。 Vikram 以设计和思想领导力帮助金融和保险行业客户大规模构建和部署机器学习应用程序。 他目前专注于整个企业的自然语言处理、负责任的 AI、推理优化和扩展 ML。 在业余时间,他喜欢和家人一起旅行、远足、烹饪和露营。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。西蒙·扎马林 是一位AI / ML解决方案架构师,其主要重点是帮助客户从其数据资产中提取价值。 在业余时间,Simon喜欢与家人共度时光,阅读科幻小说,并从事各种DIY房屋项目。

使用 Amazon SageMaker 多模型终端节点和 GPU PlatoBlockchain 数据智能,大规模实现模型服务的高性能。 垂直搜索。 人工智能。 索拉布·特里坎德 是 Amazon SageMaker Inference 的高级产品经理。 他热衷于与客户合作,并以机器学习民主化的目标为动力。 他专注于与部署复杂的 ML 应用程序、多租户 ML 模型、成本优化以及使深度学习模型的部署更易于访问相关的核心挑战。 在业余时间,Saurabh 喜欢徒步旅行、学习创新技术、关注 TechCrunch 以及与家人共度时光。

时间戳记:

更多来自 AWS机器学习