我不会用 Triton 系列:Agent 的使用

简介

Agent 扩展了 Triton 在加载卸载 “模型” 时候的功能。比如可以在加载模型的时候,进行 md5 校验。

agent 的使用非常简单,就在模型的配置文件后面加上以下的配置就好了。对的,就是这么简单。这是英伟达的例子,使用了 checksum agent,在模型加载的时候会校验模型的 md5。md5 可以使用 linux 中的 md5sum 工具,使用的时候,还需要注意指定 -b 选项,表示以二进制的方式读取文件。

model_repository_agents
{
  agents [
    {
      name: "checksum",
      parameters
      {
        key: "MD5:1/model.py",
        value: "4e2c177998feb5539d8ec8d820f990bd"
      }
    }
  ]
}

学习笔记

为了稍微深入了解一下这个功能,仔细读一遍文档吧。

protobuf 中的定义

先来看看 protobuf 中的定义吧。删掉了注释之后,会发现就这么简单。Agent 是一个可以重复 (repeated) 的属性,每个 Agent 有两个属性,一个表示名字的字符串,一个表示输入参数的 map。用的时候,就按照这个定义手写 protobuf 就好了(😅emmm,手写 protobuf 没代码提示太不爽了

例子就看文档中的好了。

message ModelRepositoryAgents
{
  message Agent
  {
    string name = 1;
    map<string, string> parameters = 2;
  }
  repeated Agent agents = 1;
}

自己实现一个 Agent

记住 Agent 的作用是扩展了模型加载和卸载时候的动作,动态链接库中需要提供相关的函数,即可实现扩展。扩展的是 “模型” 相关的动作,而不是 “模型实例” 相关的动作。

接口

Triton 定义了五个动作,这五个动作分别表示:加载模型,加载模型完成时,加载模型失败时,卸载模型,卸载模型完成时。五个动作,通过一个统一的函数 TRITONREPOAGENT_ModelAction 对这些动作进行扩展。如果要实现一个 Agent,那么就是在这个函数里面写个 switch 什么的嘛。我们可以看看 checksum 是如何实现的,实际上非常的简单。

typedef enum TRITONREPOAGENT_actiontype_enum {
  TRITONREPOAGENT_ACTION_LOAD,
  TRITONREPOAGENT_ACTION_LOAD_COMPLETE,
  TRITONREPOAGENT_ACTION_LOAD_FAIL,
  TRITONREPOAGENT_ACTION_UNLOAD,
  TRITONREPOAGENT_ACTION_UNLOAD_COMPLETE
} TRITONREPOAGENT_ActionType;

更加详细的信息可以看这个 接口文件。这里面提供了以下接口:获取模型仓库地址,获取、释放临时仓库地址,使用新版本仓库,获取 Agent 的参数,绑定状态到 Agent 或者 AgentModel 上,扩展 Agent 或 AgentModel 初始化和清理时候的动作。

从这些接口可以看见,其实 Serving 的扩展功能是服务于需求的。上面列举的使用新版本仓库,应该是服务于这样的需求:对模型进行解密,然后使用新的模型仓库。

posted @ 2021-11-14 21:17  楷哥  阅读(1503)  评论(2编辑  收藏  举报