0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA Triton模型分析器确定最佳AI模型服务配置

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-05-30 09:38 次阅读

模型部署是 机器学习 生命周期的一个关键阶段,在此阶段,经过培训的模型将集成到现有的应用程序生态系统中。这往往是最繁琐的步骤之一,在这些步骤中,目标硬件平台应满足各种应用程序和生态系统约束,所有这些都不会影响模型的准确性。

NVIDIA Triton 推理服务器 是一个开源的模型服务工具,它简化了推理,并具有多个功能以最大限度地提高硬件利用率和推理性能。这包括以下功能:

并发模型执行 ,使同一模型的多个实例能够在同一系统上并行执行。

Dynamic batching ,其中客户端请求在服务器上分组,以形成更大的批。

优化模型部署时,需要做出几个关键决策:

为了最大限度地提高利用率, NVIDIA Triton 应在同一 CPU / GPU 上同时运行多少个模型实例?

应将多少传入的客户端请求动态批处理在一起?

模型应采用哪种格式?

应以何种精度计算输出?

这些关键决策导致了组合爆炸,每种型号和硬件选择都有数百种可能的配置。通常,这会导致浪费开发时间或代价高昂的低于标准的服务决策。

在本文中,我们将探讨 NVIDIA Triton 型号分析仪 可以自动浏览目标硬件平台的各种服务配置,并根据应用程序的需要找到最佳型号配置。这可以提高开发人员的生产率,同时提高服务硬件的利用率。

NVIDIA Triton 型号分析仪

NVIDIA Triton Model Analyzer 是一个多功能 CLI 工具,有助于更好地了解通过 NVIDIA Triton 推理服务器提供服务的模型的计算和内存需求。这使您能够描述不同配置之间的权衡,并为您的用例选择最佳配置。

NVIDIA Triton 模型分析器可用于 NVIDIA Triton 推理服务器支持的所有模型格式: TensorRT 、 TensorFlow 、 PyTorch 、 ONNX 、 OpenVINO 和其他。

您可以指定应用程序约束(延迟、吞吐量或内存),以找到满足这些约束的服务配置。例如,虚拟助理应用程序可能有一定的延迟预算,以便最终用户能够实时感受到交互。脱机处理工作流应针对吞吐量进行优化,以减少所需硬件的数量,并尽可能降低成本。模型服务硬件中的可用内存可能受到限制,并且需要针对内存优化服务配置。

poYBAGKUIBuAEkdnAABaMGlIxwY905.png

图 1 :NVIDIA Triton 型号分析器概述。

我们以一个预训练模型为例,展示了如何使用 NVIDIA Triton 模型分析器,并在 Google 云平台上的 VM 实例上优化该模型的服务。然而,这里显示的步骤可以在任何公共云上使用,也可以在具有 NVIDIA Triton 推理服务器支持的任何模型类型的前提下使用。

创建模型

在这篇文章中,我们使用预训练 BERT Hugging Face 的大型模型,采用 PyTorch 格式。 NVIDIA Triton 推理服务器可以使用其LibTorch后端为TorchScript模型提供服务,也可以使用其 Python 后端为纯 PyTorch 模型提供服务。为了获得最佳性能,我们建议将 PyTorch 模型转换为TorchScript格式。为此,请使用PyTorch的跟踪功能。

首先从 NGC 中拉出 PyTorch 容器,然后在容器中安装transformers包。如果这是您第一次使用 NGC ,请创建一个帐户。在本文中,我们使用了 22.04 版本的相关工具,这是撰写本文时的最新版本。 NVIDIA ( NVIDIA ) Triton 每月发布一次 cadence ,并在每个月底发布新版本。

docker pull nvcr.io/nvidia/pytorch:22.04-py3
docker run --rm -it -v $(pwd):/workspace nvcr.io/nvidia/pytorch:22.04-py3 /bin/bash
pip install transformers

安装transformers包后,运行以下 Python 代码下载预训练的 BERT 大型模型,并将其跟踪为 TorchScript 格式。

from transformers import BertModel, BertTokenizer
import torch
model_name = "bert-large-uncased"
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertModel.from_pretrained(model_name, torchscript=True) max_seq_len = 512
sample = "This is a sample input text"
tokenized = tokenizer(sample, return_tensors="pt", max_length=max_seq_len, padding="max_length", truncation=True) inputs = (tokenized.data['input_ids'], tokenized.data['attention_mask'], tokenized.data['token_type_ids'])
traced_model = torch.jit.trace(model, inputs)
traced_model.save("model.pt")

构建模型存储库

使用 NVIDIA Triton 推理服务器为您的模型提供服务的第一步是创建模型存储库。在此存储库中,您将包括一个模型配置文件,该文件提供有关模型的信息。模型配置文件至少必须指定后端、模型的最大批大小以及输入/输出结构。

对于这个模型,下面的代码示例是模型配置文件。

platform: "pytorch_libtorch"
max_batch_size: 64
input [ { name: "INPUT__0" data_type: TYPE_INT64 dims: [ 512 ] }, { name: "INPUT__1" data_type: TYPE_INT64 dims: [ 512 ] }, { name: "INPUT__2" data_type: TYPE_INT64 dims: [ 512 ] }
]
output [ { name: "OUTPUT__0" data_type: TYPE_FP32 dims: [ -1, 1024 ] }, { name: "OUTPUT__1" data_type: TYPE_FP32 dims: [ 1024 ] }
]

将模型配置文件命名为config.pbtxt后,按照 存储库布局结构 创建模型存储库。模型存储库的文件夹结构应类似于以下内容:

.
└── bert-large ├── 1 │ └── model.pt └── config.pbtxt

运行 NVIDIA Triton 型号分析器

建议使用 Model Analyzer 的方法是自己构建 Docker 映像:

git clone https://github.com/triton-inference-server/model_analyzer.git
cd ./model_analyzer
git checkout r22.04
docker build --pull -t model-analyzer .

现在已经构建了 Model Analyzer 映像,请旋转容器:

docker run -it --rm --gpus all \ -v /var/run/docker.sock:/var/run/docker.sock \ -v :/models \ -v :/output \ -v :/config \ --net=host model-analyzer

不同的硬件配置可能会导致不同的最佳服务配置。因此,在最终提供模型的目标硬件平台上运行模型分析器非常重要。

为了重现我们在这篇文章中给出的结果,我们在公共云中进行了实验。具体来说,我们在 Google 云平台上使用了一个 a2-highgpu-1g 实例,并使用了一个 NVIDIA A100 GPU 。

A100 GPU 支持多实例 GPU ( MIG ),它可以通过将单个 A100 GPU 拆分为七个分区来最大限度地提高 GPU 利用率,这些分区具有硬件级隔离,可以独立运行 NVIDIA Triton 服务器。为了简单起见,我们在这篇文章中没有使用 MIG 。

Model Analyzer 支持 NVIDIA Triton 型号的自动和手动扫描不同配置。自动配置搜索是默认行为,并为所有配置启用 dynamic batching 。在这种模式下,模型分析器将扫描不同的批大小和可以同时处理传入请求的模型实例数。

扫掠的默认范围是最多五个模型实例和最多 128 个批次大小。这些 可以更改默认值 。

现在创建一个名为sweep.yaml的配置文件,以分析前面准备的 BERT 大型模型,并自动扫描可能的配置。

model_repository: /models
checkpoint_directory: /output/checkpoints/
output-model-repository-path: /output/bert-large
profile_models: bert-large
perf_analyzer_flags: input-data: "zero"

使用前面的配置,您可以分别获得模型吞吐量和延迟的顶行号和底行号。

分析时,模型分析器还将收集的测量值写入检查点文件。它们位于指定的检查点目录中。您可以使用分析的检查点创建数据表、摘要和结果的详细报告。

配置文件就绪后,您现在可以运行 Model Analyzer 了:

model-analyzer profile -f /config/sweep.yaml

作为示例,表 1 显示了结果中的几行。每一行对应于在假设的客户端负载下在模型配置上运行的实验。

表 1 :。自动扫描的样本输出

要获得测试的每个模型配置的更详细报告,请使用model-analyzer report命令:

model-analyzer report --report-model-configs bert-large_config_default,bert-large_config_1,bert-large_config_2 --export-path /output --config-file /config/sweep.yaml --checkpoint-directory /output/checkpoints/

这将生成一个详细说明以下内容的报告:

运行分析的硬件

吞吐量与延迟的关系图

GPU 内存与延迟的关系图

CLI 中所选配置的报告

对于任何 MLOps 团队来说,在将模型投入生产之前开始分析都是一个很好的开始。

不同的利益相关者,不同的约束条件

在典型的生产环境中,有多个团队应该协同工作,以便在生产中大规模部署 AI 模型。例如,可能有一个 MLOps 团队负责为管道稳定性服务的模型,并处理应用程序强加的服务级别协议( SLA )中的更改。另外,基础架构团队通常负责整个 GPU / CPU 场。

假设一个产品团队要求 MLOps 团队在 30 毫秒的延迟预算内处理 99% 的请求,为 BERT 大型服务器提供服务。 MLOps 团队应考虑可用硬件上的各种服务配置,以满足该要求。使用 Model Analyzer 可以消除执行此操作时的大部分摩擦。

下面的代码示例是一个名为latency_constraint.yaml的配置文件的示例,其中我们在测得的延迟值的 99% 上添加了一个约束,以满足给定的 SLA 。

model_repository: /models
checkpoint_directory: /output/checkpoints/
analysis_models: bert-large: constraints: perf_latency_p99: max: 30
perf_analyzer_flags: input-data: "zero"

因为您有上一次扫描中的检查点,所以可以将它们重新用于 SLA 分析。运行以下命令可以提供满足延迟约束的前三种配置:

model-analyzer analyze -f latency_constraint.yaml

表 2 显示了前三种配置的测量结果,以及它们与默认配置的比较情况。

表 2 :。每个配置如何满足指定的延迟约束

在大规模生产中,软件和硬件约束会影响生产中的 SLA 。

假设应用程序的约束已更改。该团队现在希望满足同一型号的 p99 延迟为 50 ms ,吞吐量为每秒 30 多个推断。还假设基础设施团队能够为其使用留出 5000 MB 的 GPU 内存。随着约束数量的增加,手动查找服务配置以满足涉众变得越来越困难。这就是对模型分析器这样的解决方案的需求变得更加明显的地方,因为您现在可以在单个配置文件中同时指定所有约束。

以下名为multiple_constraint.yaml的示例配置文件结合了吞吐量、延迟和 GPU 内存约束:

model_repository: /models
checkpoint_directory: /output/checkpoints/
analysis_models: bert-large-pytorch: constraints: perf_throughput: min: 50 perf_latency_p99: max: 30 gpu_used_memory: max: 5000
perf_analyzer_flags: input-data: "zero"

使用此更新的约束,运行以下命令:

model-analyzer analyze -f multiple_constraint.yaml

Model Analyzer 现在将以下提供的服务配置作为前三个选项,并显示它们与默认配置的比较情况。

表 3 :。每个配置如何满足指定的所有三个约束。

总结

随着企业发现自己在生产中提供越来越多的模型,手动或基于启发式做出模型服务决策变得越来越困难。手动执行此操作会导致浪费开发时间或模型服务决策不足,这需要自动化工具。

在本文中,我们探讨了 NVIDIA Triton 模型分析器如何能够找到满足应用程序 SLA 和各种涉众需求的模型服务配置。我们展示了如何使用模型分析器扫描各种配置,以及如何使用它来满足指定的服务约束。

尽管我们在这篇文章中只关注一个模型,但仍有计划让模型分析器同时对多个模型执行相同的分析。例如,您可以在相同的 GPU 上运行的不同模型上定义约束,并对每个约束进行优化。

我们希望您能分享我们对 Model Analyzer 将节省多少开发时间的兴奋,并使您的 MLOps 团队能够做出明智的决策。

关于作者

Arun Raman 是 NVIDIA 的高级解决方案架构师,专门从事消费互联网行业的 edge 、 cloud 和 on-prem 人工智能应用。在目前的职位上,他致力于端到端 AI 管道,包括预处理、培训和推理。除了从事人工智能工作外,他还研究了一系列产品,包括网络路由器和交换机、多云基础设施和服务。他拥有达拉斯德克萨斯大学电气工程硕士学位。

Burak Yoldeir 是 NVIDIA 的高级数据科学家,专门为消费互联网行业生产人工智能应用程序。除了前端和后端企业软件开发之外, Burak 还从事广泛的 AI 应用程序开发。他拥有加拿大不列颠哥伦比亚大学电气和计算机工程博士学位。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1713

    浏览量

    56790
  • NVIDIA
    +关注

    关注

    14

    文章

    4592

    浏览量

    101706
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    防止AI模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4

    模型并为其提供了输入数据。最后,我运行了模型的推理,并输出了预测结果。此外,还需要考虑其他因素,如模型的优化、损失函数和评估指标等。 为了防止A
    发表于 03-19 11:18

    使用cube-AI分析模型时报错的原因有哪些?

    使用cube-AI分析模型时报错,该模型是pytorch的cnn转化成onnx ``` Neural Network Tools for STM32
    发表于 03-14 07:09

    使用NVIDIA Triton推理服务器来加速AI预测

    这家云计算巨头的计算机视觉和数据科学服务使用 NVIDIA Triton 推理服务器来加速 AI 预测。
    的头像 发表于 02-29 14:04 208次阅读

    利用NVIDIA产品技术组合提升用户体验

    体 UTalk-Doc 将用户指令识别服务吞吐量提升了 5 倍,单个请求响应时间缩减了三分之一,大幅提升服务运行效率,提升资源利用率。Triton 模型
    的头像 发表于 01-17 09:30 366次阅读

    AI模型可以取代大学教育吗?

    AI模型
    电子发烧友网官方
    发布于 :2024年01月02日 16:27:52

    AI模型怎么解决芯片过剩?

    AI模型
    电子发烧友网官方
    发布于 :2024年01月02日 15:42:05

    AI模型可以设计电路吗?

    AI模型
    电子发烧友网官方
    发布于 :2024年01月02日 15:09:29

    不要错过!NVIDIA “大模型没那么泛!”主题活动

    2024 新年首发! NVIDIA模型日系列活动 将于 2024 年 1 月 正式启动,由 NVIDIA 和业界专家携手分享大模型应用开发的洞见和
    的头像 发表于 12-20 19:35 352次阅读
    不要错过!<b class='flag-5'>NVIDIA</b> “大<b class='flag-5'>模型</b>没那么泛!”主题活动

    周四研讨会预告 | 注册报名 NVIDIA AI Inference Day - 大模型推理线上研讨会

    ,使用 NVIDIA Triton TM  推理服务器进行端到端部署 LLM Serving,以及金融行业的 AI、NLP/LLM 应用场景、客户案例。 通过本次活动,您将了解基于上述
    的头像 发表于 10-26 09:05 193次阅读

    【KV260视觉入门套件试用体验】Vitis AI 构建开发环境,并使用inspector检查模型

    AI环境配置完毕。 使用inspector检查模型 运行jupyterlab,新建Notebook: 导入相关python包和要分析的深度学习
    发表于 10-14 15:34

    在线公开课 | NVIDIA AI 气象预报模型

    9 月 12 日 14 点,NVIDIA 联合智东西公开课策划推出 「NVIDIA AI 气象预测模型在线研讨会」 。研讨会邀请到 NVIDIA
    的头像 发表于 09-11 19:55 409次阅读
    在线公开课 | <b class='flag-5'>NVIDIA</b> <b class='flag-5'>AI</b> 气象预报<b class='flag-5'>模型</b>

    AI模型和小模型是什么?AI模型和小模型的区别

      随着人工智能的不断发展和应用,机器学习模型的大小越来越成为一个重要的问题。在机器学习中,我们通常将模型分为两类:大模型和小模型。本文将介绍AI
    发表于 08-08 16:55 5533次阅读

    如何使用NVIDIA Triton 推理服务器来运行推理管道

    使用集成模型NVIDIA Triton 推理服务器上为 ML 模型管道提供服务
    的头像 发表于 07-05 16:30 1158次阅读
    如何使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b> 推理<b class='flag-5'>服务</b>器来运行推理管道

    NVIDIA AI 技术助力 vivo 文本预训练大模型性能提升

    vivo AI 团队与 NVIDIA 团队合作,通过算子优化,提升 vivo 文本预训练大模型的训练速度。在实际应用中, 训练提速 60% ,满足了下游业务应用对模型训练速度的要求。通
    的头像 发表于 05-26 07:15 444次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>AI</b> 技术助力 vivo 文本预训练大<b class='flag-5'>模型</b>性能提升

    深度:国内4家AI模型分析

    百度由于多年在AI领域的深耕,其文心大模型涵盖基础大模型、任务大模型、行业大模型的三级体系,打造大模型
    的头像 发表于 04-28 14:47 9843次阅读
    深度:国内4家<b class='flag-5'>AI</b>大<b class='flag-5'>模型</b><b class='flag-5'>分析</b>