link
Triton Inference Server访问模型文件的方式可以是本地可访问文件路径,Google Cloud Storage和Amazon S3,用–model-repository选项启动服务器时,将指定这些路径。
--model-repository=/path/to/model/repository
;gs://
作为前缀,例如--model-repository = gs://bucket/path/to/model/repository
;s3://
作为前缀,例如--model-repository = s3://bucket/path/to/model/repository
。s3://
后面必须是主机和端口(用分号分隔),然后是存储区路径。例如,--model-repository = s3://host:port/bucket/path/to/model/repository
。使用Amazon S3时,默认区域各个环境变量可以使用aws config
命令或通过环境变量。如果设置了环境变量,它们将具有更高的优先级,并由Triton Inference Server使用,而不是使用aws config命令设置的凭据。
示例模型存储库介绍了如何使用几个图像分类模型创建示例存储库。
典型的模型存储库布局示例如下所示:
/
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_0
和model_1
)必须与在模型配置文件config.pbtxt中指定的模型名称匹配。客户端API和服务器API中使用模型名称来标识模型。每个模型目录必须至少有一个数字子目录。这些子目录中的每一个都包含模型的版本,该版本的版本号与目录名称相对应。
有关服务器如何处理模型版本的更多信息,请参见模型版本。每个版本子目录中都有一个或多个模型定义文件,用于指定实际模型(集合模型除外)。模型定义可以是特定于框架的模型文件,也可以是实现自定义后端的共享库。
* _labels.txt
文件是可选的,用于为表示分类的输出提供标签。标签文件必须在模型配置中对应的输出的label_filename
属性中指定。
推理服务器具有多种执行模式,这些执行模式控制如何管理模型存储库中的模型。 这些模式在模型管理中描述。
每个模型在模型存储库中可以有一个或多个可用版本。 每个版本都存储在其自己的数字命名子目录中,该子目录的名称与模型的版本号相对应。 没有数字命名或前缀为零的子目录将被忽略。 每个模型都指定一个版本策略,该策略控制服务器在任何给定时间提供模型存储库中的哪个版本。
每个模型版本子目录必须至少包含一个模型定义。 默认情况下,此文件或目录的名称必须为:
默认文件名称可以在模型配置文件的default_model_filename
中修改。
可选地,一个模型可以提供多个模型定义文件,每个文件都针对具有不同计算能力的GPU。 最常见的是,TensorRT和TensorFlow/TensorRT集成模型需要此功能,其中某个模型定义或许仅对单个算力的机器有效。 有关如何为不同的计算功能指定不同的模型定义的说明,参见中的cc_model_filenames
。
模型定义是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/
/
config.pbtxt
1/
model.plan
参见中的描述,config.pbtxt
是可选的,所以最简版的模型仓库应该类似:
models/
/
1/
model.plan
两种模型保存方式:GraphDef
和 SavedModel
。
GraphDef
的默认文件名称为 model.graphdef
。
models/
/
config.pbtxt
1/
model.graphdef
SavedModel包含多个文件默认在名为model.savedmodel的目录中:
models/
/
config.pbtxt
1/
model.savedmodel/
最简版的模型仓库:
models/
/
1/
model.savedmodel/
TensorFlow 1.7及更高版本集成了TensorRT以使TensorFlow模型能够受益于TensorRT提供的推理优化。 推理服务器支持已使用TensorRT优化的模型,并且可以像其他任何TensorFlow模型一样为这些模型提供服务。 推理服务器的TensorRT版本必须与创建模型时使用的TensorRT版本相匹配。
TensorRT/TensorFlow集成模型特定于CUDA计算功能,因此通常有必要如上所述使用模型配置的cc_model_filenames
属性。
作为离线创建TensorRT/TensorFlow模型的替代方法,可以在首次加载模型时或响应推理请求时使用模型配置设置来动态执行TensorRT优化。 参见。
ONNX模型是单个文件或包含多个文件的目录。默认情况下,文件或目录必须命名为model.onnx。请注意,推理服务器可能不支持某些ONNX模型,因为基础ONNX运行时不支持它们(由于使用过时的ONNX opset版本或包含类型不受支持的运算符)。
默认情况下,ONNX运行时在运行模型时使用默认执行提供程序。为了在CPU上执行模型,此默认执行提供程序不使用MKL-DNN。通过模型配置优化策略,您可以选择用于模型的CPU执行的OpenVino执行提供程序,而不是默认执行提供程序。为了在GPU上执行模型,默认的CUDA执行提供程序使用CuDNN加速推理。通过模型配置优化策略,您可以选择GPU的tensorrt执行提供程序,从而使ONNX运行时使用TensorRT来加速全部或部分模型。
单个文件中包含的单个ONNX模型的最小模型存储库如下所示:
models/
/
config.pbtxt
1/
model.onnx
最简版的模型仓库:
models/
/
1/
model.onnx
由多个文件组成的ONNX模型必须包含在目录中。 默认情况下,此目录必须命名为model.onnx,但可以使用模型配置中的default_model_filename属性覆盖。 此目录中的主模型文件必须命名为model.onnx。 目录中包含的单个ONNX模型的最小模型存储库如下所示:
models/
/
config.pbtxt
1/
model.onnx/
model.onnx
最简版的模型仓库:
models/
/
1/
model.onnx/
model.onnx
PyTorch模型是单个文件,默认情况下必须命名为model.pt。 请注意,必须使用示例输入来跟踪PyTorch模型,并将其保存为TorchScript模块,如下所示。 由于基础操作集的更改,推理服务器可能不支持使用不同版本的PyTorch跟踪的某些模型。 单个PyTorch模型的最小模型存储库如下所示:
models/
/
config.pbtxt
1/
model.pt
Caffe2模型定义称为NetDef。 Caffe2 NetDef是单个文件,默认情况下必须命名为model.netdef。 单个NetDef模型的最小模型存储库如下所示:
models/
/
config.pbtxt
1/
model.netdef
使用自定义后端的模型在模型存储库中的表示方式与使用深度学习框架后端的模型相同。 每个模型版本子目录必须至少包含一个实现自定义模型后端的共享库。 默认情况下,此共享库的名称必须为libcustom.so
,但是可以使用模型配置中的default_model_filename
属性覆盖默认名称。
可选地,一个模型可以提供多个共享库,每个共享库都针对具有不同计算能力的GPU。 有关如何为不同的计算功能指定不同的共享库的说明,参见中的cc_model_filenames
属性。
当前,仅本地文件系统上的模型存储库支持自定义后端。 推理服务器无法加载云存储中模型存储库中包含的自定义后端(例如,如上所述,使用gs://
前缀或s3://
前缀访问的存储库)。
定制后端必须实现custom.h中定义的C接口。该接口也记录在API接口中。
示例在src/custom目录中,有关构建自己的自定义后端的更多信息以及可以构建自己的简单示例。
使用集成后端的模型在模型存储库中的表示方式与使用深度学习框架后端的模型相同。 当前,集成后端不需要任何特定于版本的数据,因此每个模型版本子目录必须存在,但应为空。
可以在docs/examples/ensemble_model_repository/preprocess_resnet50_ensemble目录中找到模型存储库中的集成后端示例。