一、技术介绍
NVIDIA Triton Inference Server 是一个针对 CPU 和 GPU 进行优化的云端和推理的解决方案 。
支持的模型类型包括 TensorRT、TensorFlow、PyTorch (meta-llama/Llama-2-7b)、Python/ target=_blank class=infotextkey>Python (chatglm)、ONNX Runtime 和 OpenVino 。
NVIDIA Triton Server 是一个高性能的推断服务器,具有以下特点:
1. 高性能:Triton Server 为使用 GPU 进行推断的工作负载提供了高性能和低延迟 。它能够在高吞吐量和低延迟的情况下同时服务多个模型 。
2. 内存管理:大模型通常需要大量的显存来进行推断 。Triton Server 具有灵活的内存管理机制 , 可以有效地管理和分配显存,确保大模型的推断可以高效地进行 。
3. 可扩展性:Triton Server 通过并行处理和异步推断支持高度并发的推断请求 。它可以根据负载的需要自动扩展和收缩 。
4. 多模型支持:Triton Server 能够同时部署和管理多个模型 。这允许您共享服务器资源并以一致的方式部署和管理不同的模型 。
5. 灵活性:Triton Server 支持多种模型格式和推断框架,包括 TensorFlow、PyTorch、ONNX 等 。您可以使用您喜欢的模型和工具进行模型开发和训练,并将其轻松部署到 Triton Server 上 。
6. 高级特性:Triton Server 提供了许多高级特性,例如模型版本管理、请求并发控制、动态批处理大小优化、请求时间跟踪等 。这些特性增强了模型的部署和管理能力 。
二、实践Serve a Model in 3 (N) Easy Steps 官方文档
https://Github.com/triton-inference-server/server?
Serve a Model in n Easy Steps
Step 1: 拉取 triton-server 代码
git clone -b r23.08 https://github.com/triton-inference-server/server.git #
Step 2: 使用 tritonserver:22.12-py3 镜像构建 triton-server 容器
Docker run --gpus all --shm-size=1g --ulimit memlock=-1 -p 8000:8000 -p 8001:8001 -p 8002:8002 --ulimit stack=67108864 -ti nvcr.io/nvidia/tritonserver:22.12-py3
-p 端口映射要注意 , 后期要改很麻烦.
tritonserver 版本和 python_backend 后端版本一定要对应.
比如都用 22.12
Step 3: 下载 python 推理后端 python_backend
文档: https:/ https://github.com/triton-inference-server/python_backend
下载 python 后端代码:
git clone https://github.com/triton-inference-server/python_backend -b r22.12
容器内操作:如果中途退出容器,使用命令 docker exec -it 容器名 /bin/bash 进入容器
如下载不下来可以拷贝到容器内:docker cp python_backend busy_galileo:/opt
Step 4: 创建模型目录
cd python_backend
1) 创建模型目录: mkdir -p models/chatglm2-6b/1/
2) 宿主机拷贝 chatglm2 到容器内模型目录: docker cp chatglm2-6b 容器名:/ 容器内路径 /models/chatglm2-6b
3) 创建模型配置文件 : vi models/chatglm2-6b/config.pbtxt 包含各种参数,input,output 参数,模型路径等.
name: "chatglm2-6b"
backend: "python"
max_batch_size: 1
input [
{
name: "QUERY"
data_type: TYPE_STRING
dims: [ -1 ]
},
{
name: "max_new_tokens"
data_type: TYPE_UINT32
dims: [ -1 ]
},
{
name: "top_k"
data_type: TYPE_UINT32
dims: [ 1 ]
optional: true
},
{
name: "top_p"
data_type: TYPE_FP32
dims: [ 1 ]
optional: true
},
{
name: "temperature"
data_type: TYPE_FP32
dims: [ 1 ]
optional: true
},
{
name: "length_penalty"
data_type: TYPE_FP32
dims: [ 1 ]
optional: true
},
{
name: "repetition_penalty"
data_type: TYPE_FP32
dims: [ 1 ]
optional: true
},
{
name: "bos_token_id"
data_type: TYPE_UINT32
dims: [ 1 ]
optional: true
},
{
name: "eos_token_id"
data_type: TYPE_UINT32
dims: [ 1 ]
optional: true
},
{
name: "do_sample"
data_type: TYPE_BOOL
dims: [ 1 ]
optional: true
},
【使用 Triton 部署 chatglm2-6b 模型】{
name: "num_beams"
data_type: TYPE_UINT32
dims: [ 1 ]
optional: true
}
]
output [
{
name: "OUTPUT"
data_type: TYPE_STRING
dims: [ -1, -1 ]
}
]
instance_group [
{
kind: KIND_GPU
}
]
parameters {
key: "model_path"
value: {
string_value: "/opt/tritonserver/python_backend/models/chatglm2-6b"
}
}
创建 model.py 自定义 Python 代码实现的模型推理逻辑 vi models/chatglm2-6b/1/model.py
推荐阅读
- 不要在Typescript中使用Function类型
- 如何使用Noir从源代码检测攻击面
- 妆前化妆品使用方法 妆前护肤
- 烤箱空烤完多久能使用 烤箱空烤后多久可以烤食物
- 粉底液和素颜霜用在哪个步骤 粉底和素颜霜的使用顺序
- 电热毯的正确使用方法步骤 电热毯的正确使用方法
- 如何快速使用Docker部署我们的微服务
- 如何在 Linux 下使用 WebP 图像
- Python全局变量和局部变量使用从入门到精通
- 香蒲丽黄金面膜怎么使用效果好 香蒲丽黄金面膜怎么使用