跳转到主要内容

Triton Model Navigator:Triton Inference Server和PyTriton上优化和部署机器学习模型和管道的推理工具包。

项目描述

欢迎使用Triton Model Navigator,这是一个针对NVIDIA GPU优化的深度学习模型优化和部署工具包。Triton Model Navigator简化了将PyTorchTensorFlowONNX中实现的模型和管道迁移到TensorRT的过程。

Triton Model Navigator自动化了包括模型导出、转换、正确性测试和性能分析在内的多个关键步骤。通过提供各种支持框架的单一入口点,用户可以使用针对每个框架的优化函数,高效地搜索最佳部署方案。生成的优化模型可用于在PyTritonTriton Inference Server上部署。

功能概览

Triton模型导航器的独特功能总结在特性矩阵中。

特性

描述

易用性

一行代码即可直接从源代码运行所有可能的优化路径

广泛框架支持

与PyTorch、TensorFlow和ONNX等各种机器学习框架兼容

模型优化

增强ResNET和BERT等模型性能,实现高效的推理部署

流水线优化

使用PyTorch特有的原地优化,简化Python代码流水线,适用于Stable Diffusion和Whisper等模型

模型导出和转换

自动化模型导出和格式转换过程,重点关注TensorRT和Torch-TensorRT

正确性测试

确保转换后的模型输出正确,与原始模型进行验证

性能分析

根据性能指标(如延迟和吞吐量)分析模型,以选择最佳格式,优化目标硬件利用率

模型部署

通过专用API自动在PyTriton和Triton推理服务器上部署模型和流水线

文档

有关Triton模型导航器特性的更多信息,请参阅文档

先决条件

在安装Triton模型导航器之前,请确保您的系统满足以下标准:

  • 操作系统:Linux(推荐Ubuntu 20.04+)

  • Python:版本3.8或更高

  • NVIDIA GPU

您可以使用包含所有必要依赖项的NGC容器,例如PyTorch和TensorFlow容器

安装

您可以通过运行以下命令从安装Triton模型导航器:

pip install -U --extra-index-url https://pypi.ngc.nvidia.com triton-model-navigator[<extras,>]

使用PyTorch额外功能安装

pip install -U --extra-index-url https://pypi.ngc.nvidia.com triton-model-navigator[torch]

使用TensorFlow额外功能安装

pip install -U --extra-index-url https://pypi.ngc.nvidia.com triton-model-navigator[tensorflow]

使用原地优化优化Stable Diffusion

原地优化允许无缝优化用于部署的模型,例如将它们转换为TensorRT,而无需对原始Python流水线进行任何更改。

对于Stable Diffusion模型,初始化流水线并用nav.Module包装模型组件

import model_navigator as nav
from transformers.modeling_outputs import BaseModelOutputWithPooling
from diffusers import DPMSolverMultistepScheduler, StableDiffusionPipeline


def get_pipeline():
    # Initialize Stable Diffusion pipeline and wrap modules for optimization
    pipe = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1")
    pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
    pipe = pipe.to("cuda")
    pipe.text_encoder = nav.Module(
        pipe.text_encoder,
        name="clip",
        output_mapping=lambda output: BaseModelOutputWithPooling(**output), # Mapping to convert output data to HuggingFace class
    )
    pipe.unet = nav.Module(
        pipe.unet,
        name="unet",
    )
    pipe.vae.decoder = nav.Module(
        pipe.vae.decoder,
        name="vae",
    )

    return pipe

准备一个简单的数据加载器

# Please mind, the first element in tuple need to be a batch size
def get_dataloader():
    return [(1, "a photo of an astronaut riding a horse on mars")]

执行模型优化

pipe = get_pipeline()
dataloader = get_dataloader()

nav.optimize(pipe, dataloader)

一旦流水线被优化,您可以加载并执行性能最佳的模块版本

nav.load_optimized()

执行此方法后,如果存在优化的模块版本,它将直接在Python中用于您的流水线执行。有关如何通过PyTriton提供Stable Diffusion流水线的示例,请参阅此处

当您计划将代码放置在Python脚本中时,请阅读运行Python脚本时的错误隔离

优化ResNet并在Triton上部署

Triton模型导航器还支持部署到Triton的优化路径。此路径支持nn.Module、keras.Model或输入为张量的ONNX文件。

要从TorchHub优化ResNet50模型,请运行以下代码

import torch
import model_navigator as nav

# Optimize Torch model loaded from TorchHub
resnet50 = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_resnet50', pretrained=True).eval()

# Wrap model in nav.Module
resnet50 = nav.Module(resnet50, name="resnet50")

# Optimize Torch model loaded from TorchHub
nav.optimize(resnet50, dataloader=[(1, [torch.randn(1, 3, 256, 256)])])

当您计划将代码放置在Python脚本中时,请阅读运行Python脚本时的错误隔离

一旦优化完成,创建用于在Triton上部署的模型存储库非常简单,如下代码所示

import pathlib

# Generate the model store from optimized model
resnet50.triton_model_store(
    model_repository_path=pathlib.Path("model_repository"),
)

在Python中对任何模型或可调用进行性能分析

Triton模型导航器增强模型和流水线,并提供了一种统一的方法来分析任何Python函数、可调用或模型。目前,我们的支持仅限于静态批量分析场景。

例如,我们将使用一个简单的函数,该函数仅简单地睡眠50毫秒

import time


def custom_fn(input_):
    # wait 50ms
    time.sleep(0.05)
    return input_

让我们提供一个用于分析的数据加载器

# Tuple of batch size and data sample
dataloader = [(1, ["This is example input"])]

最后,使用准备好的数据加载器运行函数的性能分析

nav.profile(custom_fn, dataloader)

运行Python脚本时的错误隔离

重要:请查阅以下部分,以防止在运行 optimize 时出现意外问题。

为了更好地隔离错误,一些转换和导出操作使用 spawn 模式在独立的子进程中运行。这意味着全局范围内的所有内容都将在一个子进程中运行。如果优化代码放在 Python 脚本中并作为

python optimize.py

为了防止嵌套优化,您必须将优化代码放在

if __name__ == "__main__":
    # optimization goes here

import multiprocessing as mp
if mp.current_process().name == "MainProcess":
    # optimization goes here

如果上述任何一种方法对您都不适用,您可以通过设置以下环境变量以牺牲错误隔离为代价,在单个进程中运行所有优化

NAVIGATOR_USE_MULTIPROCESSING=False

示例

我们提供全面、分步的 指南,展示了 Triton 模型导航器多样化功能的利用。这些指南旨在阐明使用 PyTritonTriton 推理服务器对模型进行优化、分析、测试和部署的过程。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分布

此版本没有可用的源代码分布文件。请参阅 生成分布存档 的教程。

构建分布

triton_model_navigator-0.12.0-py3-none-any.whl (362.6 kB 查看哈希值)

上传时间 Python 3