category
Triton提供的模型管理API是HTTP/REST和GRPC协议的一部分,也是C API的一部分。Triton在三种型号控制模式之一下运行:NONE、EXPLICIT或POLL。模型控制模式决定Triton如何处理对模型存储库的更改,以及这些协议和API中的哪些可用。
模型控制模式NONE
Triton尝试在启动时加载模型存储库中的所有模型。Triton无法加载的模型将被标记为UNAVAILABLE,无法进行推理。
服务器运行时对模型存储库的更改将被忽略。使用模型控制协议的模型加载和卸载请求将不受影响,并将返回错误响应。
此型号控制模式是通过在启动Triton时指定--model control mode=none来选择的。这是默认的模型控制模式。如修改模型存储库中所述,在Triton运行时必须小心更改模型存储库。
模型控制模式EXPLICIT
在启动时,Triton只加载那些使用--load model命令行选项明确指定的模型。要在启动时加载所有模型,请指定--load model=*作为ONLY--load model参数。将--load model=*与另一个--load model参数一起指定将导致错误。如果未指定--load模型,则在启动时不会加载任何模型。Triton无法加载的模型将被标记为UNAVAILABLE,无法进行推理。
启动后,必须使用模型控制协议显式启动所有模型加载和卸载操作。模型控制请求的响应状态指示加载或卸载动作的成功或失败。当尝试重新加载已加载的模型时,如果由于任何原因重新加载失败,则已加载模型将保持不变并保持加载状态。如果重新加载成功,新加载的模型将替换已经加载的模型,而不会丢失模型的可用性。
此模型控制模式是通过指定--model control mode=explicit来启用的。如修改模型存储库中所述,在Triton运行时必须小心更改模型存储库。
如果您在使用模型控制协议加载和卸载模型时看到一些内存增长,那么可能不是实际的内存泄漏,而是某些系统的malloc启发导致内存无法立即释放回操作系统。为了提高内存性能,您可以考虑在运行Triton时通过设置LD_PRELOAD环境变量从malloc切换到tcmalloc或jemalloc,如下所示:
# Using tcmalloc
LD_PRELOAD=/usr/lib/$(uname -m)-linux-gnu/libtcmalloc.so.4:${LD_PRELOAD} tritonserver --model-repository=/models ...
# Using jemalloc
LD_PRELOAD=/usr/lib/$(uname -m)-linux-gnu/libjemalloc.so:${LD_PRELOAD} tritonserver --model-repository=/models ...
我们建议同时试用tcmalloc和jemalloc,以确定哪一种更适合您的用例,因为它们有不同的内存分配和释放策略,并且可能根据工作负载的不同而执行不同的操作。
tcmalloc和jemalloc库都已安装在Triton容器中。但是,如果需要安装它们,可以使用以下命令进行安装:
# Install tcmalloc
apt-get install gperf libgoogle-perftools-dev
# Install jemalloc
apt-get install libjemalloc-dev
模型控制模式POLL
Triton尝试在启动时加载模型存储库中的所有模型。Triton无法加载的模型将被标记为UNAVAILABLE,无法进行推理。
将检测到对模型存储库的更改,Triton将根据这些更改在必要时尝试加载和卸载模型。当尝试重新加载已加载的模型时,如果由于任何原因重新加载失败,则已加载模型将保持不变并保持加载状态。如果重新加载成功,新加载的模型将替换已经加载的模型,而不会丢失模型的可用性。
由于Triton会定期轮询存储库,因此可能无法立即检测到对模型存储库的更改。您可以使用--repository poll secs选项控制轮询间隔。控制台日志或模型就绪协议或模型控制协议的索引操作可用于确定模型库更改何时生效。
警告:Triton轮询模型存储库和对存储库进行任何更改之间没有同步。因此,海卫一可以观察到导致意外行为的部分和不完全变化。因此,不建议在生产环境中使用POLL模式。
使用模型控制协议的模型加载和卸载请求将不受影响,并将返回错误响应。
通过指定--model control mode=poll并在启动Triton时将--repository poll secs设置为非零值,可以启用此模型控制模式。如修改模型存储库中所述,在Triton运行时必须小心更改模型存储库。
在POLL模式下,Triton对以下模型存储库更改做出响应:
- 可以通过添加和删除相应的版本子目录来添加版本和从模型中删除版本。Triton将允许飞行中的请求完成,即使他们使用的是该模型的删除版本。对已删除模型版本的新请求将失败。根据模型的版本策略,对可用版本的更改可能会更改默认提供的模型版本。
- 通过删除相应的模型目录,可以从存储库中删除现有模型。Triton将允许在飞行中完成对任何版本的移除模型的请求。对已删除模型的新请求将失败。
- 可以通过添加新模型目录将新模型添加到存储库中。
- 可以更改模型配置文件(config.pbtxt),Triton将卸载并重新加载模型以获取新的模型配置。
- 可以添加、删除或修改为表示分类的输出提供标签的标签文件,Triton将卸载和重新加载模型以获取新标签。如果添加或删除了标签文件,则必须同时对其在模型配置中对应的输出的label_filname属性执行相应的编辑。
修改模型存储库
模型存储库中的每个模型都位于其自己的子目录中。模型子目录内容上允许的活动因Triton使用该模型的方式而异。可以通过使用模型元数据或存储库索引API来确定模型的状态。- 如果模型正在主动加载或卸载,则不必添加、删除或修改该子目录中的任何文件或目录。
- 如果模型从未加载或已完全卸载,则可以删除整个模型子目录,或者添加、删除或修改其任何内容。
- 如果模型已完全加载,则可以添加、删除或修改该子目录中的任何文件或目录;除了实现模型后端的共享库之外。Triton在加载模型时使用后端共享库,因此删除或修改这些库可能会导致Triton崩溃。要更新模型的后端,必须首先完全卸载模型,修改后端共享库,然后重新加载模型。在某些操作系统上,也可以简单地将现有共享库移动到模型存储库之外的另一个位置,复制新的共享库,然后重新加载模型。
- 如果仅修改了“config.pbtxt”上的模型实例配置(即增加/减少实例数),则当在模型控制模式EXPLICIT下收到加载请求或在模型控制方式POLL下检测到“config.pbtxt”的更改时,Triton将更新模型,而不是重新加载。
- 新的型号配置也可以通过负载API传递给Triton。
- 当“config.pbttxt”被修改到位时,一些文本编辑器会在模型目录中创建一个交换文件。交换文件不是模型配置的一部分,因此它在模型目录中的存在可能会被检测为新文件,并导致模型在只需要更新时完全重新加载。
- 如果序列模型被更新(即减少实例数),Triton将等待,直到飞行中的序列完成(或超时),然后删除序列后面的实例。
- 如果实例计数减少,则在空闲实例和具有要删除的运行中序列的实例中选择任意实例。
- 如果序列模型重新加载了飞行中序列(即更改模型文件),Triton不保证飞行中序列的任何剩余请求将被路由到同一模型实例进行处理。目前,用户有责任确保在重新加载序列模型之前完成任何飞行中的序列。
同时加载模型
为了减少服务停机时间,Triton在后台加载新模型,同时继续对现有模型进行推断。根据用例和性能要求,专用于加载模型的最佳资源量可能有所不同。Triton公开了一个--model加载线程计数选项,用于配置专用于加载模型的线程数,默认为4。
要使用C API设置此参数,请参阅TRITONSERVER.h中的TRITONSERVER_ServerOptionsSetModelLoadThreadCount。
- 登录 发表评论
- 15 次浏览
Tags
最新内容
- 4 days 9 hours ago
- 4 days 9 hours ago
- 4 days 10 hours ago
- 4 days 10 hours ago
- 4 days 10 hours ago
- 1 week 3 days ago
- 1 week 4 days ago
- 1 week 6 days ago
- 1 week 6 days ago
- 1 week 6 days ago