字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。

ByteDance 使用 AWS Inferentia 节省了高达 60% 的推理成本,同时减少了延迟并提高了吞吐量

这是与来自字节跳动的 Minghui Yu 和 Jianzhe Xiao 共同撰写的客座博文。

ByteDance 是一家技术公司,运营一系列内容平台,为不同语言、文化和地域的人们提供信息、教育、娱乐和启发。 用户信任并喜欢我们的内容平台,因为它们提供了丰富、直观和安全的体验。 这些体验是通过我们的机器学习 (ML) 后端引擎实现的,ML 模型是为内容审核、搜索、推荐、广告和新颖的视觉效果而构建的。

字节跳动AML(应用机器学习)团队为公司业务提供高性能、可靠、可扩展的机器学习系统和端到端的机器学习服务。 我们正在研究优化 ML 推理系统以降低成本而不增加响应时间的方法。 AWS 推出时 AWS 推理,一种由 AWS 专门构建的高性能 ML 推理芯片,我们与我们的 AWS 客户团队合作测试 AWS Inferentia 是否可以实现我们的优化目标。 我们运行了多个概念验证,与基于 T60 GPU 的 EC4 G2dn 实例相比,推理成本降低了多达 4%,推理延迟降低了多达 25%。 为了实现这些成本节约和性能改进,我们决定在基于 AWS Inferentia 的平台上部署模型 亚马逊弹性计算云 (Amazon EC2) 生产中的 Inf1 实例。

下图显示了我们之前使用 Tensor RT 部署在 GPU 上的人脸检测模型之一的延迟改进。 平均延迟减少了 20%(从 50 毫秒到 40 毫秒),p99 延迟减少了 25%(从 200 毫秒到 150 毫秒)。

在这篇文章中,我们将分享我们如何使用 AWS Inferentia 节省推理成本,同时减少延迟并提高吞吐量。

寻找高性能、经济高效的计算

字节跳动 AML 团队专注于前沿 ML 系统及其所需的异构计算资源的研究和实现。 我们为各种推荐系统、自然语言处理 (NLP) 和计算机视觉 (CV) 模型创建大规模训练和推理系统。 这些模型非常复杂,并且处理来自字节跳动运营的许多内容平台的大量数据。 部署这些模型需要大量 GPU 资源,无论是在云端还是在本地。 因此,这些推理系统的计算成本相当高。

我们希望在不影响吞吐量或延迟的情况下降低这些成本。 我们需要云的灵活性和更快的交付周期,这比本地设置所需的周期要短得多。 尽管我们乐于探索加速 ML 的新选项,但我们也希望获得无缝的开发人员体验。

我们从 AWS 团队了解到,基于 AWS Inferentia 的 EC2 Inf1 实例在云中以最低的每次推理成本提供高性能 ML 推理。 我们好奇地探索它们并发现它们非常适合我们的用例,因为我们对大量图像、对象、语音和文本数据运行大量机器学习。 它们绝对非常适合我们的目标,因为考虑到我们模型的复杂性和日常预测量,我们可以实现巨大的成本节约。 此外,AWS Inferentia 具有大量片上内存,您可以使用它来缓存大型模型,而不是将它们存储在片外。 我们认识到这会对减少推理延迟产生重大影响,因为 AWS Inferentia 的处理核心(称为 NeuronCores)可以高速访问存储在片上内存中且不受片外内存限制的模型带宽。

最终,在评估了几个选项之后,我们选择了 EC2 Inf1 实例,因为与本地的 G4dn 实例和 NVIDIA T4 相比,它们具有更好的性能/价格比。 我们与 AWS 团队进行了持续迭代循环,以释放 Inf1 的价格和性能优势。

在 AWS Inferentia 上部署推理工作负载

使用 AWS Neuron SDK 开始使用 AWS Inferentia 涉及两个阶段:模型代码的编译和在 Inf1 实例上的部署。 将 ML 模型迁移到任何新的基础设施时,我们经常会遇到一些挑战。 在 AWS 团队的努力和支持下,我们能够克服这些挑战。 在以下部分中,我们将根据我们在 AWS Inferentia 上部署推理工作负载的经验分享一些有用的技巧和观察结果。

OCR 的一致性模型

我们的光学字符识别 (OCR) 构象模型检测并读取图像中的文本。 我们进行了多项优化,以获得各种批量大小的高性能 (QPS),同时保持低延迟。 下面列出了一些关键的优化:

  • 编译器优化 – 默认情况下,Inferentia 在序列长度固定的输入上表现最佳,这带来了挑战,因为文本数据的长度不固定。 为了克服这个问题,我们将模型分为两部分:编码器和解码器。 我们分别编译了这两个子模型,然后通过 TorchScript 将它们合并为一个模型。 通过在 CPU 上运行 for 循环控制流,这种方法支持在 Inferentia 上支持可变序列长度。
  • 深度卷积性能 – 我们在深度卷积操作中遇到了 DMA 瓶颈,它被我们的一致性模型大量使用。 我们与 AWS Neuron 团队密切合作,确定并解决了 DMA 访问性能瓶颈,从而提高了此操作的性能并提高了我们 OCR 模型的整体性能。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。

我们创建了两个新的模型变体来优化我们在 Inferentia 上的部署:

  • 组合和展开的编码器/解码器 – 我们没有使用独立编译的编码器和解码器,而是将编码器和完全展开的解码器组合成一个模型,并将该模型编译为一个 NEFF。 展开解码器可以在不使用任何 CPU 操作的情况下在 Inferentia 上运行所有解码器控制流。 使用这种方法,解码器的每次迭代都使用该令牌所需的计算量。 这种方法提高了性能,因为我们显着减少了之前由填充输入引入的额外计算。 此外,在解码器迭代之间不需要从 Inferentia 到 CPU 的数据传输,这大大减少了 I/O 时间。 此版本的模型不支持提前停止。
  • 分区展开解码器 – 类似于组合的完全展开模型,该​​模型的变体展开解码器的多次迭代并将它们编译为单个执行(但不包括编码器)。 例如,对于 75 的最大序列长度,我们可以将解码器展开为 3 个分区,分别计算标记 1-25、26-50 和 51-75。 在 I/O 方面,这也明显更快,因为我们不需要每次迭代都传输一次编码器输出。 相反,每个解码器分区只传输一次输出。 这个版本的模型确实支持提前停止,但仅限于分区边界。 可以针对每个特定应用程序调整分区边界,以确保大多数请求只执行一个分区。

为了进一步提高性能,我们做了以下优化,以减少内存使用或提高访问效率:

  • 张量去重和减少副本 – 这是一种编译器优化,通过重用张量来提高空间效率,从而显着减少展开模型的大小和指令/内存访问的数量。
  • 精简说明 – 这是一种编译器优化,与解码器的非填充版本一起使用,可显着减少指令总数。
  • 多核去重 – 这是一种运行时优化,可以替代张量重复数据删除。 使用此选项,所有多核模型都将显着提高空间效率。

用于图像分类的 ResNet50 模型

ResNet-50 是一种用于图像分类的预训练深度学习模型。 它是最常用于分析视觉图像的卷积神经网络(CNN 或 ConvNet)。 我们使用以下技术来提高该模型在 Inferentia 上的性能:

  • 模型改造 – 字节跳动的许多模型都以 ONNX 格式导出,Inferentia 目前不支持该格式。 为了处理这些 ONNX 模型,AWS Neuron 团队提供了脚本来将我们的模型从 ONNX 格式转换为 PyTorch 模型,这些模型可以使用 torch-neuron 直接为 Inferentia 编译。
  • 性能优化 – 我们与 AWS 神经元 团队调整编译器中的调度启发式以优化我们的 ResNet-50 模型的性能。

内容审核的多模态模型

我们的多模式深度学习模型是多个独立模型的组合。 这个模型的尺寸比较大,导致在Inferentia上加载模型失败。 AWS Neuron 团队通过使用权重共享来减少设备内存使用,成功解决了这个问题。 Neuron 团队在 Neuron libnrt 库中发布了这一权重去重功能,同时改进了 Neuron Tools 以获得更精确的指标。 可以通过在运行推理之前设置以下环境变量来启用运行时权重去重功能:

NEURON_RT_MULTI_INSTANCE_SHARED_WEIGHTS=1

更新后的 Neuron SDK 减少了重复模型的整体内存消耗,这使我们能够部署多模态模型以进行多核推理。

将更多模型迁移到 AWS Inferentia

在字节跳动,我们继续部署创新的深度学习模型,为近 2 亿月活跃用户提供令人愉悦的用户体验。 鉴于我们的运营规模庞大,我们一直在寻找节省成本和优化性能的方法。 我们将继续将模型迁移到 AWS Inferentia,以从其高性能和成本效益中受益。 我们还希望 AWS 推出更多基于 AWS Inferentia 的实例类型,例如具有更多 vCPU 用于预处理任务的实例类型。 展望未来,字节跳动希望看到更多来自 AWS 的芯片创新,为 ML 应用程序提供最佳性价比。

如果您有兴趣详细了解 AWS Inferentia 如何帮助您在优化推理应用程序性能的同时节省成本,请访问 Amazon EC2 Inf1实例 产品页面。


作者简介

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。于明辉 是字节跳动高级机器学习推理团队负责人。 他的重点领域是 AI 计算加速和机器学习系统。 他对后摩尔时代的异构计算和计算机体系结构非常感兴趣。 在业余时间,他喜欢篮球和射箭。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。肖建哲 是字节跳动 AML 团队的高级软件工程师团队负责人。 他目前的工作重点是帮助业务团队加快模型部署过程并提高模型的推理性能。 工作之余,他喜欢弹钢琴。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。田石 是 AWS 的高级解决方案架构师。 他的重点领域是数据分析、机器学习和无服务器。 他热衷于帮助客户在云上设计和构建可靠且可扩展的解决方案。 在业余时间,他喜欢游泳和阅读。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。董家 是 AWS 的客户解决方案经理。 她喜欢了解 AWS AI/ML 服务,并通过为客户构建解决方案来帮助他们实现业务成果。 工作之余,贾喜欢旅行、瑜伽和电影。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。乔纳森伦特 是 Amazon 的一名软件工程师,专注于 ML 框架开发。 在他的职业生涯中,他担任过各种数据科学角色,包括模型开发、基础设施部署和特定于硬件的优化。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。约书亚汉南 是亚马逊的机器学习工程师。 他致力于为大规模计算机视觉和自然语言处理应用程序优化深度学习模型。

字节跳动使用 AWS Inferentia PlatoBlockchain 数据智能,可节省高达 60% 的推理成本,同时减少延迟并提高吞吐量。 垂直搜索。 人工智能。斯鲁蒂·科帕卡 是 AWS 的高级产品营销经理。 她帮助客户探索、评估和采用 EC2 加速计算基础架构来满足他们的机器学习需求。

时间戳记:

更多来自 AWS机器学习