Triton服务部署
- 选取一个镜像下拉到docker
命令:sudo docker pull nvcr.io/nvidia/tritonserver:23.04-py3
- 如果用python作为后端推理代码,肯定会用到pytorch,还需要安装torch等依赖包的镜像。可以创建一个Dockerfile,然后在tritonserver镜像基础上构建新的包含依赖包的镜像。如

然后构建新镜像:
命令:sudo docker build -t nvcr.io/nvidia/tritonserver:23.04-py3-torch .
成功后,可查看新的镜像

2.1 创建一个模型目录结构
- 首先,创建一个模型仓库目录
例如,我在/home/public_sudo/data/qu 目录下创建了一个triton-models目录
用triton-models目录表示模型仓库,所有的模型都在这个模型目录中。启动容器后会将 triton-models映射到tritonserver的docker镜像中。
模型下面是配置文件和版本号,版本号下面放模型文件,如果服务端要用到python推理,则推理代码model.py也是放在版本号下面。
- 不用python推理,只需要模型直接推理
- 用python推理,需要model.py
2.2 config.pbtxt 编写
name: "seq2seq_beam_search"
platform:"python"
backend: "python"
max_batch_size: 0
input [
{
name: "INPUT__0"
data_type: TYPE_INT64
dims: [-1,1]
}
]
output [
{
name: "OUTPUT__0"
data_type: TYPE_INT64
dims: [1, -1]
}
]
output [
{
name: "OUTPUT__1"
data_type: TYPE_INT64
dims: [1, -1]
}
]
output [
{
name: "OUTPUT__2"
data_type: TYPE_INT64
dims: [1, -1]
}
]
output [
{
name: "OUTPUT__3"
data_type: TYPE_INT64
dims: [1, -1]
}
]
output [
{
name: "OUTPUT__4"
data_type: TYPE_INT64
dims: [1, -1]
}
]
output [
{
name: "OUTPUT__SCORE"
data_type: TYPE_FP32
dims: [5, 1]
}
]
instance_group [
{
kind: KIND_CPU
}
]
如果是python后端推理,backend和platform写"python",不是就写 "pytorch_libtorch";
如果是CPU机器,一定要配置
instance_group [ { kind: KIND_CPU }
否则,会报错。

http调用
import tritonclient.http as httpclient
import numpy as np
import time
if __name__ == "__main__":
# 初始化客户端
client = httpclient.InferenceServerClient(url="172.19.50.122:8013")
# 准备输入数据
input_data = np.array(([5],[60],[68], [39]), dtype=np.int64)
input_data = np.array(input_data, dtype=np.int64).reshape(-1, 1)
print(input_data)
task_start = time.time()
# 调用模型
inputs = [httpclient.InferInput("INPUT__0", input_data.shape, "INT64")]
inputs[0].set_data_from_numpy(input_data)
outputs = [httpclient.InferRequestedOutput("OUTPUT__0"),
httpclient.InferRequestedOutput("OUTPUT__1"),
httpclient.InferRequestedOutput("OUTPUT__2"),
httpclient.InferRequestedOutput("OUTPUT__3"),
httpclient.InferRequestedOutput("OUTPUT__4"),
httpclient.InferRequestedOutput("OUTPUT__SCORE")
]
# 获取结果
response = client.infer("seq2seq_beam_search", inputs, outputs=outputs)
rewrite_query_list = []
for i in range(0, len(outputs)-1):
rewrite_query_list.append(response.as_numpy("OUTPUT__" + str(i)))
scores = response.as_numpy("OUTPUT__SCORE")
task_end = time.time()
print("task take time:%.3fs" % (task_end - task_start))
client.close()

浙公网安备 33010602011771号