triton inference server翻译之Model Repository

探讨了Triton推理服务器加载模型的各种方式,包括本地文件系统、Google Cloud Storage和Amazon S3。详细介绍了不同深度学习框架模型的存储库布局,如TensorFlow、TensorRT、ONNX和PyTorch。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

link

Triton Inference Server访问模型文件的方式可以是本地可访问文件路径,Google Cloud Storage和Amazon S3,用–model-repository选项启动服务器时,将指定这些路径。

  • 对于本地可访问的文件系统,必须指定绝对路径,例如--model-repository=/path/to/model/repository
  • 对于驻留在Google Cloud Storage中的模型,该路径必须以gs://作为前缀,例如--model-repository = gs://bucket/path/to/model/repository
  • 对于驻留在Amazon S3中的模型,该路径必须以s3://作为前缀,例如--model-repository = s3://bucket/path/to/model/repository
  • 使用S3的本地实例时,前缀s3://后面必须是主机和端口(用分号分隔),然后是存储区路径。例如,--model-repository = s3://host:port/bucket/path/to/model/repository

使用Amazon S3时,默认区域各个环境变量可以使用aws config <https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html> _命令或通过环境变量。如果设置了环境变量,它们将具有更高的优先级,并由Triton Inference Server使用,而不是使用aws config命令设置的凭据。

示例模型存储库介绍了如何使用几个图像分类模型创建示例存储库。

典型的模型存储库布局示例如下所示:

<model-repository-path>/
  model_0/
    config.pbtxt
    output0_labels.txt
    1/
      model.plan
    2/
      model.plan
  model_1/
    config.pbtxt
    output0_labels.txt
    output1_labels.txt
    0/
      model.graphdef
    7/
      model.graphdef

有关推论服务器如何管理模型存储库中指定的模型的讨论,请参阅模型管理。 Status API可用于确定是否有任何模型无法成功加载。服务器的控制台日志还将显示启动过程中所有失败的原因。

模型目录的名称(在上例中为model_0model_1)必须与在模型配置文件config.pbtxt中指定的模型名称匹配。客户端API和服务器API中使用模型名称来标识模型。每个模型目录必须至少有一个数字子目录。这些子目录中的每一个都包含模型的版本,该版本的版本号与目录名称相对应。

有关服务器如何处理模型版本的更多信息,请参见模型版本。每个版本子目录中都有一个或多个模型定义文件,用于指定实际模型(集合模型除外)。模型定义可以是特定于框架的模型文件,也可以是实现自定义后端的共享库。

* _labels.txt文件是可选的,用于为表示分类的输出提供标签。标签文件必须在模型配置中对应的输出的label_filename属性中指定。

Modifying the Model Repository

推理服务器具有多种执行模式,这些执行模式控制如何管理模型存储库中的模型。 这些模式在模型管理中描述。

Model Versions

每个模型在模型存储库中可以有一个或多个可用版本。 每个版本都存储在其自己的数字命名子目录中,该子目录的名称与模型的版本号相对应。 没有数字命名或前缀为零的子目录将被忽略。 每个模型都指定一个版本策略,该策略控制服务器在任何给定时间提供模型存储库中的哪个版本。

Framework Model Definition

每个模型版本子目录必须至少包含一个模型定义。 默认情况下,此文件或目录的名称必须为:

  • model.plan for TensorRT models
  • model.graphdef for TensorFlow GraphDef models
  • model.savedmodel for TensorFlow SavedModel models
  • model.onnx for ONNX Runtime ONNX models
  • model.pt for PyTorch TorchScript models
  • model.netdef and init_model.netdef for Caffe2 Netdef models

默认文件名称可以在模型配置文件的default_model_filename中修改。

可选地,一个模型可以提供多个模型定义文件,每个文件都针对具有不同计算能力的GPU。 最常见的是,TensorRT和TensorFlow/TensorRT集成模型需要此功能,其中某个模型定义或许仅对单个算力的机器有效。 有关如何为不同的计算功能指定不同的模型定义的说明,参见中的cc_model_filenames

TensorRT Models

模型定义是plan文件,默认名称model.plan,与CUDA Compute Capability有关。
A TensorRT model definition is called a Plan. A TensorRT Plan is a single file that by default must be named model.plan. A TensorRT Plan is specific to CUDA Compute Capability and so it is typically necessary to use the model configuration’s cc_model_filenames property as described above.

最简单的模型如下所示:

models/
  <model-name>/
    config.pbtxt
    1/
      model.plan

参见中的描述,config.pbtxt是可选的,所以最简版的模型仓库应该类似:

models/
  <model-name>/
    1/
      model.plan

TensorFlow Models

两种模型保存方式:GraphDefSavedModel

GraphDef的默认文件名称为 model.graphdef

models/
  <model-name>/
    config.pbtxt
    1/
      model.graphdef

SavedModel包含多个文件默认在名为model.savedmodel的目录中:

models/
  <model-name>/
    config.pbtxt
    1/
      model.savedmodel/
         <saved-model files>

最简版的模型仓库:

models/
  <model-name>/
    1/
      model.savedmodel/
         <saved-model files>

TensorRT/TensorFlow Models

TensorFlow 1.7及更高版本集成了TensorRT以使TensorFlow模型能够受益于TensorRT提供的推理优化。 推理服务器支持已使用TensorRT优化的模型,并且可以像其他任何TensorFlow模型一样为这些模型提供服务。 推理服务器的TensorRT版本必须与创建模型时使用的TensorRT版本相匹配。

TensorRT/TensorFlow集成模型特定于CUDA计算功能,因此通常有必要如上所述使用模型配置的cc_model_filenames属性。

作为离线创建TensorRT/TensorFlow模型的替代方法,可以在首次加载模型时或响应推理请求时使用模型配置设置来动态执行TensorRT优化。 参见

ONNX Models

ONNX模型是单个文件或包含多个文件的目录。默认情况下,文件或目录必须命名为model.onnx。请注意,推理服务器可能不支持某些ONNX模型,因为基础ONNX运行时不支持它们(由于使用过时的ONNX opset版本或包含类型不受支持的运算符)。

默认情况下,ONNX运行时在运行模型时使用默认执行提供程序。为了在CPU上执行模型,此默认执行提供程序不使用MKL-DNN。通过模型配置优化策略,您可以选择用于模型的CPU执行的OpenVino执行提供程序,而不是默认执行提供程序。为了在GPU上执行模型,默认的CUDA执行提供程序使用CuDNN加速推理。通过模型配置优化策略,您可以选择GPU的tensorrt执行提供程序,从而使ONNX运行时使用TensorRT来加速全部或部分模型。

单个文件中包含的单个ONNX模型的最小模型存储库如下所示:

models/
  <model-name>/
    config.pbtxt
    1/
      model.onnx

最简版的模型仓库:

models/
  <model-name>/
    1/
      model.onnx

由多个文件组成的ONNX模型必须包含在目录中。 默认情况下,此目录必须命名为model.onnx,但可以使用模型配置中的default_model_filename属性覆盖。 此目录中的主模型文件必须命名为model.onnx。 目录中包含的单个ONNX模型的最小模型存储库如下所示:

models/
  <model-name>/
    config.pbtxt
    1/
      model.onnx/
         model.onnx
         <other model files>

最简版的模型仓库:

models/
  <model-name>/
    1/
      model.onnx/
         model.onnx
         <other model files>

PyTorch Models

PyTorch模型是单个文件,默认情况下必须命名为model.pt。 请注意,必须使用示例输入来跟踪PyTorch模型,并将其保存为TorchScript模块,如下所示。 由于基础操作集的更改,推理服务器可能不支持使用不同版本的PyTorch跟踪的某些模型。 单个PyTorch模型的最小模型存储库如下所示:

models/
  <model-name>/
    config.pbtxt
    1/
      model.pt

Caffe2 Models

Caffe2模型定义称为NetDef。 Caffe2 NetDef是单个文件,默认情况下必须命名为model.netdef。 单个NetDef模型的最小模型存储库如下所示:

models/
  <model-name>/
    config.pbtxt
    1/
      model.netdef

Custom Backends

使用自定义后端的模型在模型存储库中的表示方式与使用深度学习框架后端的模型相同。 每个模型版本子目录必须至少包含一个实现自定义模型后端的共享库。 默认情况下,此共享库的名称必须为libcustom.so,但是可以使用模型配置中的default_model_filename属性覆盖默认名称。

可选地,一个模型可以提供多个共享库,每个共享库都针对具有不同计算能力的GPU。 有关如何为不同的计算功能指定不同的共享库的说明,参见中的cc_model_filenames属性。

当前,仅本地文件系统上的模型存储库支持自定义后端。 推理服务器无法加载云存储中模型存储库中包含的自定义后端(例如,如上所述,使用gs://前缀或s3://前缀访问的存储库)。

Custom Backend API

定制后端必须实现custom.h中定义的C接口。该接口也记录在API接口中。

Example Custom Backend

示例在src/custom目录中,有关构建自己的自定义后端的更多信息以及可以构建自己的简单示例

Ensemble Backends

使用集成后端的模型在模型存储库中的表示方式与使用深度学习框架后端的模型相同。 当前,集成后端不需要任何特定于版本的数据,因此每个模型版本子目录必须存在,但应为空。

可以在docs/examples/ensemble_model_repository/preprocess_resnet50_ensemble目录中找到模型存储库中的集成后端示例。

### NVIDIA Triton Inference Server 下载与部署教程 #### 安装 Docker 和 nvidia-docker 为了运行 Triton Inference Server,需要安装支持 GPU 的 Docker 环境。这可以通过安装 `nvidia-container-toolkit` 来实现,该工具包允许容器访问主机上的 GPU 资源。 ```bash distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker ``` #### 获取并启动 Triton Inference Server 镜像 通过官方提供的命令可以拉取最新的 Triton Inference Server Docker 镜像,并配置必要的参数以确保服务器能够正常工作[^4]: ```bash sudo docker pull nvcr.io/nvidia/tritonserver:<tag>-py3 sudo docker run --gpus all --rm --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ -p8000:8000 -p8001:8001 -p8002:8002 \ -v/path/to/model/repository:/models \ nvcr.io/nvidia/tritonserver:<tag>-py3 tritonserver --model-repository=/models ``` 其中 `<tag>` 是指具体的版本标签,例如 `20.09` 或者其他可用的稳定版;而 `/path/to/model/repository` 则是要挂载到容器内的本地模型仓库路径。 #### 准备模型库结构 对于想要加载至 Triton 中的服务化 AI 模型而言,其文件夹应当按照特定格式组织起来。比如 YOLOv5 TensorRT 模型实例中提到的操作如下所示[^3]: ```bash cd triton-yolov5-trt mkdir -p triton_deploy/models/yolov5/1/ mkdir triton_deploy/plugins cp tensorrtx/yolov5/yolov5s.engine triton_deploy/models/yolov5/1/model.plan cp tensorrtx/yolov5/build/libmyplugins.so triton_deploy/plugins/libmyplugins.so ``` 这里创建了一个名为 `triton_deploy` 的目录用于存放即将被服务化的YOLO v5模型及其依赖插件,在此之后还需要设置好相应的配置文件(通常是 `.config.pbtxt` 文件),以便让Triton知道如何解析这些二进制数据作为有效的推理引擎输入输出接口定义。 #### 关于发布版本的信息更新 有关最新发布的功能改进以及已知问题修复情况,请参阅官方文档中的发行说明部分[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sophia_xw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值