模型仓库#

这是您第一次设置模型仓库吗? 请查看这些教程,开始您的 Triton 之旅!

Triton 推理服务器从启动时指定的一个或多个模型仓库中提供模型。在 Triton 运行时,可以修改正在提供的模型,如模型管理中所述。

仓库布局#

这些仓库路径在使用 –model-repository 选项启动 Triton 时指定。可以多次指定 –model-repository 选项以包含来自多个仓库的模型。组成模型仓库的目录和文件必须遵循所需的布局。假设仓库路径指定如下。

$ tritonserver --model-repository=<model-repository-path>

相应的仓库布局必须是

  <model-repository-path>/
    <model-name>/
      [config.pbtxt]
      [<output-labels-file> ...]
      [configs]/
        [<custom-config-file> ...]
      <version>/
        <model-definition-file>
      <version>/
        <model-definition-file>
      ...
    <model-name>/
      [config.pbtxt]
      [<output-labels-file> ...]
      [configs]/
        [<custom-config-file> ...]
      <version>/
        <model-definition-file>
      <version>/
        <model-definition-file>
      ...
    ...

在顶层模型仓库目录中,必须有零个或多个子目录。每个子目录包含相应模型的仓库信息。config.pbtxt 文件描述模型的模型配置。对于某些模型,config.pbtxt 是必需的,而对于其他模型,它是可选的。有关更多信息,请参阅自动生成的模型配置

每个目录可能包含一个可选的子目录 configs。在 configs 目录中,必须有零个或多个带有 .pbtxt 文件扩展名的文件。有关 Triton 如何处理自定义模型配置的更多信息,请参阅自定义模型配置

每个目录必须至少有一个数字子目录,表示模型的版本。有关 Triton 如何处理模型版本的更多信息,请参阅模型版本。每个模型都由特定的后端执行。在每个版本子目录中,必须有该后端所需的文件。例如,使用框架后端(如 TensorRT、PyTorch、ONNX、OpenVINO 和 TensorFlow)的模型必须提供框架特定的模型文件

模型仓库位置#

Triton 可以从一个或多个本地可访问的文件路径、Google Cloud Storage、Amazon S3 和 Azure Storage 访问模型。

本地文件系统#

对于本地可访问的文件系统,必须指定绝对路径。

$ tritonserver --model-repository=/path/to/model/repository ...

带有环境变量的云存储#

Google Cloud Storage#

对于位于 Google Cloud Storage 中的模型仓库,仓库路径必须以 gs:// 为前缀。

$ tritonserver --model-repository=gs://bucket/path/to/model/repository ...

使用 Google Cloud Storage 时,凭据按以下顺序获取和尝试

  1. GOOGLE_APPLICATION_CREDENTIALS 环境变量

    • 应设置环境变量,并包含凭据 JSON 文件的位置。

    • 将首先尝试授权用户凭据,然后尝试服务帐户凭据。

  2. 附加的服务帐户

  3. 匿名凭据(也称为公共存储桶)

    • 存储桶(和对象)应已向所有用户授予 getlist 权限。

    • 授予此类权限的一种方法是为“allUsers”向存储桶添加 storage.objectViewerstorage.legacyBucketReader 预定义角色,例如

      $ gsutil iam ch allUsers:objectViewer "${BUCKET_URL}"
      $ gsutil iam ch allUsers:legacyBucketReader "${BUCKET_URL}"
      

默认情况下,Triton 在临时文件夹中创建远程模型仓库的本地副本,该副本在 Triton 服务器关闭后删除。如果您想控制远程模型仓库的复制位置,可以设置 TRITON_GCS_MOUNT_DIRECTORY 环境变量,指向本地计算机上的现有文件夹。

export TRITON_GCS_MOUNT_DIRECTORY=/path/to/your/local/directory

确保您的本地计算机上存在 TRITON_GCS_MOUNT_DIRECTORY 并且它是空的。

S3#

对于位于 Amazon S3 中的模型仓库,路径必须以 s3:// 为前缀。

$ tritonserver --model-repository=s3://bucket/path/to/model/repository ...

对于 S3 的本地或私有实例,前缀 s3:// 之后必须跟主机和端口(用分号分隔),然后是存储桶路径。

$ tritonserver --model-repository=s3://host:port/bucket/path/to/model/repository ...

默认情况下,Triton 使用 HTTP 与您的 S3 实例通信。如果您的 S3 实例支持 HTTPS,并且您希望 Triton 使用 HTTPS 协议与其通信,则可以在模型仓库路径中指定,方法是在主机名前面加上 https://。

$ tritonserver --model-repository=s3://https://host:port/bucket/path/to/model/repository ...

使用 S3 时,可以通过使用 aws config 命令或通过相应的环境变量传递凭据和默认区域。如果设置了环境变量,它们将具有更高的优先级,Triton 将使用它们而不是使用 aws config 命令设置的凭据。

默认情况下,Triton 在临时文件夹中创建远程模型仓库的本地副本,该副本在 Triton 服务器关闭后删除。如果您想控制远程模型仓库的复制位置,可以设置 TRITON_AWS_MOUNT_DIRECTORY 环境变量,指向本地计算机上的现有文件夹。

export TRITON_AWS_MOUNT_DIRECTORY=/path/to/your/local/directory

确保您的本地计算机上存在 TRITON_AWS_MOUNT_DIRECTORY 并且它是空的。

Azure Storage#

对于位于 Azure Storage 中的模型仓库,仓库路径必须以 as:// 为前缀。

$ tritonserver --model-repository=as://account_name/container_name/path/to/model/repository ...

使用 Azure Storage 时,您必须将 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_KEY 环境变量设置为有权访问 Azure Storage 仓库的帐户。

如果您不知道您的 AZURE_STORAGE_KEY 并且您的 Azure CLI 配置正确,以下是如何查找与您的 AZURE_STORAGE_ACCOUNT 对应的密钥的示例

$ export AZURE_STORAGE_ACCOUNT="account_name"
$ export AZURE_STORAGE_KEY=$(az storage account keys list -n $AZURE_STORAGE_ACCOUNT --query "[0].value")

默认情况下,Triton 在临时文件夹中创建远程模型仓库的本地副本,该副本在 Triton 服务器关闭后删除。如果您想控制远程模型仓库的复制位置,可以设置 TRITON_AZURE_MOUNT_DIRECTORY 环境变量,指向本地计算机上的现有文件夹。

export TRITON_AZURE_MOUNT_DIRECTORY=/path/to/your/local/directory

确保您的本地计算机上存在 TRITON_AZURE_MOUNT_DIRECTORY 并且它是空的。

带有凭据文件的云存储(Beta 版)#

此功能目前处于 Beta 版,可能会发生更改。

要将凭据分组到一个文件中以供 Triton 使用,您可以将 TRITON_CLOUD_CREDENTIAL_PATH 环境变量设置为指向本地文件系统中以下格式的 JSON 文件的路径。

export TRITON_CLOUD_CREDENTIAL_PATH="cloud_credential.json"

“cloud_credential.json”

{
  "gs": {
    "": "PATH_TO_GOOGLE_APPLICATION_CREDENTIALS",
    "gs://gcs-bucket-002": "PATH_TO_GOOGLE_APPLICATION_CREDENTIALS_2"
  },
  "s3": {
    "": {
      "secret_key": "AWS_SECRET_ACCESS_KEY",
      "key_id": "AWS_ACCESS_KEY_ID",
      "region": "AWS_DEFAULT_REGION",
      "session_token": "",
      "profile": ""
    },
    "s3://s3-bucket-002": {
      "secret_key": "AWS_SECRET_ACCESS_KEY_2",
      "key_id": "AWS_ACCESS_KEY_ID_2",
      "region": "AWS_DEFAULT_REGION_2",
      "session_token": "AWS_SESSION_TOKEN_2",
      "profile": "AWS_PROFILE_2"
    }
  },
  "as": {
    "": {
      "account_str": "AZURE_STORAGE_ACCOUNT",
      "account_key": "AZURE_STORAGE_KEY"
    },
    "as://Account-002/Container": {
      "account_str": "",
      "account_key": ""
    }
  }
}

要匹配凭据,将使用与给定路径开头匹配的最长凭据名称。例如: gs://gcs-bucket-002/model_repository 将匹配 “gs://gcs-bucket-002” GCS 凭据,而 gs://any-other-gcs-bucket 将匹配 ““ GCS 凭据。

此功能旨在用于每个云存储提供商需要多个凭据的用例。请务必将任何凭据路径/密钥替换为上面示例中的实际路径/密钥。

如果未设置 TRITON_CLOUD_CREDENTIAL_PATH 环境变量,则将使用带有环境变量的云存储

云存储的缓存#

Triton 当前不执行云存储的文件缓存。但是,可以通过仓库代理 API注入代理来实现此功能,该代理检查特定的本地目录以缓存给定模型的云存储(原始路径),然后决定是否可以使用缓存的文件。

模型版本#

每个模型可以在模型仓库中有一个或多个可用版本。每个版本都存储在其自己的数字命名的子目录中,其中子目录的名称对应于模型的版本号。非数字命名或名称以零 (0) 开头的子目录将被忽略。每个模型配置都指定一个版本策略,该策略控制模型仓库中的哪些版本在任何给定时间可供 Triton 使用。

模型文件#

每个模型版本子目录的内容由模型的类型和支持该模型的后端的要求决定。

TensorRT 模型#

TensorRT 模型定义称为Plan。TensorRT Plan 是一个单文件,默认情况下必须命名为 model.plan。可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。

TensorRT Plan 特定于 GPU 的CUDA 计算能力。因此,TensorRT 模型将需要在模型配置中设置 cc_model_filenames 属性,以将每个 Plan 文件与相应的计算能力关联起来。

TensorRT 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.plan

ONNX 模型#

ONNX 模型是单个文件或包含多个文件的目录。默认情况下,文件或目录必须命名为 model.onnx。可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。

Triton 支持 ONNX Runtime 的 Triton 使用版本支持的所有 ONNX 模型。如果模型使用过时的 ONNX opset 版本包含具有不支持类型的运算符,则将不支持这些模型。

包含在单个文件中的 ONNX 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.onnx

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

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

TorchScript 模型#

TorchScript 模型是一个单文件,默认情况下必须命名为 model.pt。可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。使用不同版本的 PyTorch 跟踪的某些模型可能由于底层 opset 的更改而不被 Triton 支持。

TorchScript 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.pt

TensorFlow 模型#

TensorFlow 以两种格式之一保存模型:GraphDefSavedModel。Triton 支持这两种格式。

TensorFlow GraphDef 是一个单文件,默认情况下必须命名为 model.graphdef。TensorFlow SavedModel 是一个包含多个文件的目录。默认情况下,该目录必须命名为 model.savedmodel。可以使用模型配置中的 default_model_filename 属性覆盖这些默认名称。

TensorFlow GraphDef 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.graphdef

TensorFlow SavedModel 模型的最小模型仓库是

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

OpenVINO 模型#

OpenVINO 模型由两个文件表示,一个 *.xml 文件和一个 *.bin 文件。默认情况下,*.xml 文件必须命名为 model.xml。可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。

OpenVINO 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.xml
        model.bin

Python 模型#

Python 后端允许您在 Triton 中将 Python 代码作为模型运行。默认情况下,Python 脚本必须命名为 model.py,但可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。

Python 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.py

DALI 模型#

DALI 后端允许您在 Triton 中将 DALI 管道作为模型运行。为了使用此后端,您需要生成一个文件,默认情况下命名为 model.dali,并将其包含在您的模型仓库中。请参阅 DALI 后端文档,了解如何生成 model.dali 的描述。可以使用模型配置中的 default_model_filename 属性覆盖默认模型文件名。

DALI 模型的最小模型仓库是

  <model-repository-path>/
    <model-name>/
      config.pbtxt
      1/
        model.dali