Triton Model Navigator:Triton Inference Server和PyTriton上优化和部署机器学习模型和管道的推理工具包。
项目描述
欢迎使用Triton Model Navigator,这是一个针对NVIDIA GPU优化的深度学习模型优化和部署工具包。Triton Model Navigator简化了将PyTorch、TensorFlow和ONNX中实现的模型和管道迁移到TensorRT的过程。
Triton Model Navigator自动化了包括模型导出、转换、正确性测试和性能分析在内的多个关键步骤。通过提供各种支持框架的单一入口点,用户可以使用针对每个框架的优化函数,高效地搜索最佳部署方案。生成的优化模型可用于在PyTriton或Triton 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容器
安装
您可以通过运行以下命令从
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 模型导航器多样化功能的利用。这些指南旨在阐明使用 PyTriton 和 Triton 推理服务器对模型进行优化、分析、测试和部署的过程。
链接
文档:https://triton-inference-server.github.io/model_navigator
源代码:https://github.com/triton-inference-server/model_navigator
问题:https://github.com/triton-inference-server/model_navigator/issues
示例:https://github.com/triton-inference-server/model_navigator/tree/main/examples。
变更日志:https://github.com/triton-inference-server/model_navigator/blob/main/CHANGELOG.md
已知问题:https://github.com/triton-inference-server/model_navigator/blob/main/docs/known_issues.md
贡献:https://github.com/triton-inference-server/model_navigator/blob/main/CONTRIBUTING.md
项目详情
triton_model_navigator-0.12.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7fff7245a6ef75d62b0a23dad1cc8de90035794ed8ac1e61d7411dc7c346a7fc |
|
MD5 | 1744431bd8feebfded7dd202973858d2 |
|
BLAKE2b-256 | 5f4c6b1890cd0b6696e0569c647bf79dac24d8efc9eeba604aac2d87a23485b0 |