triton-inference-sever中的C API

Triton Inference Server提供了一个可向后兼容的C API,这使得Triton可以直接集成到C/C++应用中。这个API称为“Triton Server API”,简称“Server API”。这个API在Triton的共享库中实现,共享库是由核心仓库中的源码构建的。在Linux系统中,这个库名为libtritonserver.so,而在Windows系统中是tritonserver.dll。在Triton的Docker镜像中,共享库位于/opt/tritonserver/lib目录。头文件tritonserver.h定义并记录了Server API。Java绑定是基于tritonserver.h为In-Process Triton Server API构建的,适用于需要在进程内使用Tritonserver的Java应用。

Triton服务器的全部功能都被集成在共享库里,并通过Server API对外开放。Tritonserver可执行文件实现了HTTP/REST和GRPC接口,它利用Server API与Triton的核心逻辑进行交互。主要的源文件包括grpc_server.cc和http_server.cc,在这些文件中,你可以看到Server API是如何被使用的。

你也可以在自己的应用中使用Server API。在simple.cc文件中,你可以找到一个使用Server API的简单示例。

Triton服务器的各项功能都被包含在一个共享库中,该库是根据核心仓库里的源代码构建的。你可以把这个共享库链接到你的应用中,并利用tritonserver.h里定义的C API,从而充分利用Triton的所有功能。

将Triton的共享库链接到你的应用时,并不会启动一个新的Triton进程。相反,Triton的核心逻辑会直接集成到你的应用中。此时,Triton的HTTP/REST或GRPC协议不会被用于与Triton核心逻辑的通信;所有与Triton核心逻辑的通信都必须通过Server API来完成。

Server API主要使用了一个名为TRITONSERVER_Server的高级抽象,它代表了Triton的核心逻辑,能实现Triton的全部特性和功能。可以通过调用TRITONSERVER_ServerNew并设置一些选项来创建一个TRITONSERVER_Server对象,这些选项用于指示如何初始化该对象。simple.cc中展示了如何使用TRITONSERVER_ServerNew。创建TRITONSERVER_Server对象后,你就可以根据以下描述开始使用Server API的其他部分了。

接口

首先需要有TRITONSERVER_Server* server_ptr,如果是服务中,则默认已经有了,如果是调用的C-API,则需要自己创建一下:

  TRITONSERVER_Server* server_ptr = nullptr;
  FAIL_IF_ERR(
      TRITONSERVER_ServerNew(&server_ptr, server_options),
      "creating server object");
  FAIL_IF_ERR(
      TRITONSERVER_ServerOptionsDelete(server_options),
      "deleting server options");

以TRITONSERVER_xxx开头的API就是直接调用C-triton的接口。

请求方式

参考