Triton 推理服务器为服务器启动时指定的一个或多个模型存储库中的模型提供服务。 当 Triton 运行时,可以按照模型管理中的描述修改所服务的模型。
这些存储库路径是在使用 –model-repository 选项启动 Triton 时指定的。 可以多次指定 –model-repository 选项以包含来自多个存储库的模型。 组成模型存储库的目录和文件必须遵循所需的布局。 假设存储库路径指定如下。
$ tritonserver --model-repository=<model-repository-path>
相应的存储库布局必须是:
<model-repository-path>/
<model-name>/
[config.pbtxt]
[<output-labels-file> ...]
<version>/
<model-definition-file>
<version>/
<model-definition-file>
...
<model-name>/
[config.pbtxt]
[<output-labels-file> ...]
<version>/
<model-definition-file>
<version>/
<model-definition-file>
...
...
在顶级模型存储库目录中,必须有零个或多个子目录。 每个子目录都包含相应模型的存储库信息。 config.pbtxt 文件描述了模型的模型配置。 对于某些模型,config.pbtxt 是必需的,而对于其他模型,它是可选的。 有关详细信息,请参阅自动生成的模型配置。
每个目录必须至少有一个代表模型版本的数字子目录。 有关 Triton 如何处理模型版本的更多信息,请参阅模型版本。 每个模型都由特定的后端执行。 在每个版本子目录中,必须有该后端所需的文件。 例如,使用 TensorRT、PyTorch、ONNX、OpenVINO 和 TensorFlow 等框架后端的模型必须提供特定于框架的模型文件。
Triton 可以从一个或多个本地可访问的文件路径、Google Cloud Storage、Amazon S3 和 Azure Storage 访问模型。
对于本地可访问的文件系统,必须指定绝对路径。
$ tritonserver --model-repository=/path/to/model/repository ...
对于驻留在 Google Cloud Storage 中的模型存储库,存储库路径必须以 gs:// 为前缀。
$ tritonserver --model-repository=gs://bucket/path/to/model/repository ...
使用 Google Cloud Storage 时,应设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量并包含凭证 JSON 文件的位置。 如果未提供凭据,Triton 将使用附加服务帐户中的凭据,为可以获得的授权 HTTP 标头提供值。 如果无法获得,将使用匿名凭证。
要使用匿名凭证访问存储桶(也称为公共存储桶),存储桶(和对象)应该已向所有用户授予获取和列出权限。 经测试,将“allUsers”的storage.objectViewer和storage.legacyBucketReader预定义角色都添加到bucket中即可实现,可通过以下命令添加:
$ gsutil iam ch allUsers:objectViewer "${BUCKET_URL}"
$ gsutil iam ch allUsers:legacyBucketReader "${BUCKET_URL}"
对于驻留在 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 命令设置的凭据。
对于驻留在 Azure 存储中的模型存储库,存储库路径必须以 as:// 为前缀。
$ tritonserver --model-repository=as://account_name/container_name/path/to/model/repository ...
使用 Azure 存储时,必须将 AZURE_STORAGE_ACCOUNT 和 AZURE_STORAGE_KEY 环境变量设置为有权访问 Azure 存储存储库的帐户。
如果您不知道您的 AZURE_STORAGE_KEY 并且正确配置了 Azure CLI,下面是一个如何找到与您的 AZURE_STORAGE_ACCOUNT 对应的密钥的示例:
$ export AZURE_STORAGE_ACCOUNT="账户名"
$ export AZURE_STORAGE_KEY=$(az storage account keys list -n $AZURE_ST
此功能目前处于测试阶段,可能会发生变化。
要将凭证分组到 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 环境变量,将使用带有环境变量的云存储。
每个模型在模型存储库中都可以有一个或多个可用版本。 每个版本都存储在它自己的、以数字命名的子目录中,其中子目录的名称对应于模型的版本号。 未以数字命名或名称以零 (0) 开头的子目录将被忽略。 每个模型配置都指定了一个版本策略,该策略控制模型存储库中的哪些版本在任何给定时间由 Triton 提供。
每个模型版本子目录的内容由模型的类型和支持该模型的后端的要求决定。
TensorRT 模型定义称为计划。 TensorRT 计划是单个文件,默认情况下必须命名为 model.plan。 可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。
TensorRT 计划特定于 GPU 的 CUDA 计算能力。 因此,TensorRT 模型将需要在模型配置中设置 cc_model_filenames 属性,以将每个计划文件与相应的计算能力相关联。
TensorRT 模型的最小模型存储库是:
<model-repository-path>/
<model-name>/
config.pbtxt
1/
model.plan
ONNX 模型是单个文件或包含多个文件的目录。 默认情况下,文件或目录必须命名为 model.onnx。 可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。
Triton 支持 Triton 使用的 ONNX Runtime 版本支持的所有 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 模型是单个文件,默认情况下必须命名为 model.pt。 可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。 由于底层 opset 的变化,Triton 可能不支持使用不同版本的 PyTorch 跟踪的某些模型。
TorchScript 模型的最小模型存储库是:
<model-repository-path>/
<model-name>/
config.pbtxt
1/
model.pt
TensorFlow 以两种格式之一保存模型:GraphDef 或 SavedModel。 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 模型由两个文件表示,即 *.xml
和 *.bin
文件。 默认情况下,*.xml
文件必须命名为 model.xml
。 可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。
OpenVINO 模型的最小模型存储库是:
<model-repository-path>/
<model-name>/
config.pbtxt
1/
model.xml
model.bin
Python 后端允许您在 Triton 中将 Python 代码作为模型运行。 默认情况下,Python 脚本必须命名为 model.py,但可以使用模型配置中的 default_model_filename 属性覆盖此默认名称。
Python 模型的最小模型存储库是:
<model-repository-path>/
<model-name>/
config.pbtxt
1/
model.py
DALI 后端允许您将 DALI 管道作为 Triton 中的模型运行。 为了使用这个后端,您需要生成一个默认名为 model.dali 的文件,并将其包含在您的模型存储库中。 有关如何生成model.dali 的说明,请参阅DALI 后端文档。 可以使用模型配置中的 default_model_filename 属性覆盖默认模型文件名。
DALI 模型的最小模型存储库是:
<model-repository-path>/
<model-name>/
config.pbtxt
1/
model.dali