样例代码

代码目录结构如下:

Triton_MindIE-LLM_Backend
|____build.sh
|____CMakeLists.txt
|____src
|     |____mindie.cc
|     |____model_state.cc
|     |____model_state.h
|     |____model_instance_state.cc
|     |____model_instance_state.h
|     |____mindie_utils.cc
|     |____mindie_utils.h
|     |____infer_task.cc
|     |____infer_task.h
|____example
|     |____tritonModels
|     |     |____llama3_8b
|     |     |     |____1
|     |     |     |____config.pbtxt
|     |     |____config.json
|     |____set_env.sh
|     |____launch.sh
|     |____submit.py
|     |____client_stream.py
|     |____infer_client.py
|     |____logger_util.py
|     |____GSM8K.jsonl

src源文件和example文件夹的含义和作用分别如表1表2所示。

表1 src源文件的含义和作用

源文件

含义及作用

mindie.cc

包含了Triton提供给Backend的核心接口函数,分别是TRITONBACKEND_Backend初始化、TRITONBACKEND_Model初始化和释放、TRITONBACKEND_ModelInstance初始化和释放以及模型实例接收并执行请求推理的接口设置。

model_state.cc

模型状态类的源文件,在其构造函数中使用engineConfigPath和五个callback函数给每个模型实例构造出一个LlmManager对象,完成初始化后创建线程从ModelState存储队列中读取出所有请求。

model_instance_state.cc

模型实例状态类的源文件,核心是其中定义的Enqueue成员函数,将所有来自triton::core侧的待推理请求解析并转换成MindIE侧请求类型,最后存储进ModelState队列中以待MindIE读取。

mindie_utils.cc

定义了几个MindIE工具函数,一个是将响应从MindIE侧转化为Triton侧类型的转换函数,其他几个是从文件中提取出配置和参数信息的解析函数。

infer_task.cc

推理任务类的源文件,核心是构造函数中将Triton侧请求转化为MindIE侧类型,并给每个推理请求创建了一个响应工厂,用来在发送响应回调函数中创建Triton侧响应。

表2 example文件的含义和作用

源文件

描述

tritonModels

Triton管理的模型仓,里面存放了LLaMa3_8b模型的Triton侧配置文件config.pbtxt和MindIE侧配置文件config.json。

set_env.sh

环境变量配置文件,根据CANN、ATB ModelsMindIE安装路径按需修改。

launch.sh

启动Tritonserver服务端,其中包含MindIE LLM和Triton日志等级配置。

submit.py

利用tritonClinet向服务端依次发送GSM8K.jsonl数据集中的请求。

client_stream.py

利用tritonClinet向服务端发送单个请求。

GSM8K.jsonl

推理数据集,这里以GSM8K为例,需用户自行提供。

样例代码: