您当前的位置:首页 > 电脑百科 > 软件技术 > 软件技术

使用 Triton 部署 chatglm2-6b 模型

时间:2023-09-27 12:45:49  来源:京东云开发者  作者:

一、技术介绍

 

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

},

{

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

模型的输入,输出和参数可以在这里使用 python 脚本进行加工处理

import triton_python_backend_utils as pb_utils

class TritonPythonModel:

@staticmethod

def auto_complete_config(auto_complete_model_config):

"""`auto_complete_config` is called only once when loading the model

def initialize(self, args):

"""`initialize` is called only once when the model is being loaded.

Implementing `initialize` function is optional. This function allows

the model to initialize any state associated with this model.

Parameters

----------

args : dict

Both keys and values are strings. The dictionary keys and values are:

* model_config: A JSON string contAIning the model configuration

* model_instance_kind: A string containing model instance kind

* model_instance_device_id: A string containing model instance device

ID

* model_repository: Model repository path

* model_version: Model version

* model_name: Model name

"""

print('Initialized...')

def execute(self, requests):

"""`execute` must be implemented in every Python model. `execute`

function receives a list of pb_utils.InferenceRequest as the only

argument. This function is called when an inference is requested

for this model.

Parameters

----------

requests : list

A list of pb_utils.InferenceRequest

Returns

-------

list

A list of pb_utils.InferenceResponse. The length of this list must

be the same as `requests`

"""

responses = []

def finalize(self):

"""`finalize` is called only once when the model is being unloaded.

Implementing `finalize` function is optional. This function allows

the model to perform any necessary clean ups before exit.

"""

print('Cleaning up...')

Step 5: 安装推理环境和各种软件

cuda 版本和显卡驱动必须对应,cuda toolkit 与驱动版本

对应关系见官网: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

1) torch 介绍和安装:

torch 科学计算框架,旨在为机器学习和其他科学计算任务提供高效的矩阵运算和自动微分功能。

提供了丰富的预训练模型和算法库,使用户能够快速构建和训练各种机器学习任务。

pip install ./torch-1.12.1+cu116-cp38-cp38-linux_x86_64.whl

2) 显卡驱动:

sh ./NVIDIA-Linux-x86_64-460.106.00.run

3) cudnn 介绍和安装:

CUDA Deep Neural.NETwork library 是由 NVIDIA 提供的 GPU 加速的深度神经网络(DNN)库。它旨在优化和加速深度学习任务中的神经网络模型训练和推理。

cuDNN 提供了一组用于卷积神经网络(Convolutional Neural Networks, CNN)和循环神经网络(Recurrent Neural Networks, RNN)等常见深度学习任务的核心算法和函数。这些算法和函数针对 GPU 架构进行了高度优化,以提供最佳的性能和效率。

wget https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb

dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb

4) cuda:

Compute Unified Device Architecture 库是由 NVIDIA 开发的用于 GPU 编程的并行计算平台和 API。

通过 CUDA 库,可以在 GPU 上同步或异步地进行模型推理,同时支持批处理和多张卡并行计算,以提升模型推理的速度和效率

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run

sudo sh cuda_11.2.0_460.27.04_linux.run

5) 各种软件

nohup apt-get update

nohup apt-get install -y autoconf autogen clangd gdb git-lfs libb64-dev libz-dev locales-all mosh openssh-server python3-dev rapidjson-dev sudo tmux unzip zstd zip zsh

Step 6: 启动 triton-server

CUDA_VISIBLE_DEVICES=0 setsid tritonserver --model-repository=/opt/tritonserver/python_backend/models --backend-config=python,shm-region-prefix-name=prefix1_ --http-port 8000 --grpc-port 8001 --metrics-port 8002 --log-verbose 1 --log-file /opt/tritonserver/logs/triton_server_gpu0.log

使用 Triton 部署 chatglm2-6b 模型

使用 Triton 部署 chatglm2-6b 模型

启动成功 http 端口 8000 grpc 端口 8001 测量端口 8002

三、测试

简单的调用 python 代码 调用 http 接口

import requests

# 定义模型的输入数据

data = {

"inputs": [

{

"name": "QUERY",

"shape": [1,1],

"datatype": "BYTES",

"data": ["川普是不是四川人"]

},

{

"name": "max_new_tokens",

"shape" : [1,1],

"datatype": "UINT32",

"data": [15000]

},

]

}

headers = {

'Content-Type': 'Application/json',

}

# 发送 POST 请求

response = requests.post('http://localhost:8000/v2/models/chatglm2-6b/infer', headers=headers, json=data)

result = response.json()

print(result)

响应:

{

"model_name": "chatglm2-6b",

"model_version": "1",

"outputs": [

{

"data": [

"nn 川普不是四川人,他出生于美国宾夕法尼亚州,是一个美国政治家、企业家和电视名人。"

],

"datatype": "BYTES",

"name": "OUTPUT",

"shape": []

}

]

}

四、技术方向

CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续交付 / Continuous Deployment,持续部署)

未来可实现:

1. 使用 k8s 自动操作容器部署 -- 类似行云

2. 保存一个大模型运行环境的完整 docker 镜像,只需下载模型文件到对应目录即可启动提供服务..

3. 单机部署多种开源模型,提供不同模型的应答接口,可对比应答效果

4. 创建 dockerFile 自动构建基础容器

k8s 文档

https://kubernetes.io/zh-cn/docs/tasks/tools/

在所有节点上安装 Docker 和 kubeadm,kubenet

部署 Kubernetes Master

部署容器网络插件 kubectl

部署 Kubernetes Node,将节点加入 Kubernetes 集群中

 

作者:京东科技 杨建
来源:京东云开发者社区 转载请注明来源


Tags:Triton   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
使用 Triton 部署 chatglm2-6b 模型
一、技术介绍 NVIDIA Triton Inference Server 是一个针对 CPU 和 GPU 进行优化的云端和推理的解决方案。支持的模型类型包括 TensorRT、TensorFlow、PyTorch (meta-llama/L...【详细内容】
2023-09-27  Search: Triton  点击:(364)  评论:(0)  加入收藏
▌简易百科推荐
Win10/Win11和 macOS用户反馈:谷歌云服务“捆绑”系统 DNS 设置
IT之家 4 月 6 日消息,谷歌公司承认旗下的 Google One 订阅服务中存在问题,在 Windows 10、Windows 11 以及 macOS 系统上会更改系统 DNS 设置,变更为 8.8.8.8 地址。Google On...【详细内容】
2024-04-08    IT之家  Tags:Win10   点击:(4)  评论:(0)  加入收藏
微软 Edge 浏览器将迎来“内存限制器”功能,用户可自主控制 Edge 内存占用
IT之家 3 月 28 日消息,微软即将为其 Edge 浏览器带来一项实用新功能,据悉该公司正在测试一项内置的内存限制器,这项功能可以让用户限制 Edge 所占用的内存,防止浏览器超出内存...【详细内容】
2024-03-29    IT之家  Tags:Edge   点击:(14)  评论:(0)  加入收藏
一寸照片的大小如何压缩?四个实测效果很好的方法
一寸照片作为生活中常见的尺寸之一,常用于各类证件照与证明文件的制作。然而,受限于其较为狭小的尺寸,上传及打印过程中很容易出现尺寸超限的情况。所以,这个时候就需要对其体积...【详细内容】
2024-03-18  宠物小阿涛    Tags:压缩   点击:(12)  评论:(0)  加入收藏
手机投屏到电脑/电视的方法
方法一:Win10自带的投影功能1、将手机和电脑连接同一个无线网络。2、选择【开始】>【设置】>【系统】>【投影到此电脑】3、将默认的始终关闭的选项更改为所有位置都可用。4、...【详细内容】
2024-03-18    老吴讲I  Tags:投屏   点击:(15)  评论:(0)  加入收藏
微软商店怎么卸载应用 一分钟快速看懂!
微软商店怎么卸载应用 一分钟快速看懂!微软公司(Microsoft Corporation)是一家全球领先的科技企业,总部位于美国华盛顿州的雷德蒙德。成立于1975年,由比尔·盖茨和保罗&mid...【详细内容】
2024-02-27  婷婷说体育    Tags:微软商店   点击:(35)  评论:(0)  加入收藏
微软Edge浏览器新功能:手机上传 配对设备直接传文件
2月21日,微软最新的稳定版本Edge浏览器在Windows 11/10端加入了“手机上传”功能。这一功能允许用户直接从移动设备上上传文件,适用于所有网站,并且没有文件格式限制。要使用这...【详细内容】
2024-02-21    中关村在线  Tags:Edge   点击:(127)  评论:(0)  加入收藏
什么是虚拟机?你知道吗?
谁都没想到 Sun 公司技术如此的强大,却在之后的岁月里逐渐走向陨落,因为不懂销售和运营,导致公司财务逐渐出现亏损,在 2009 年,Oracle 公司以现金方式收购 Sun 公司,交易价格达 74...【详细内容】
2024-02-19  Java极客技术  微信公众号  Tags:虚拟机   点击:(44)  评论:(0)  加入收藏
怎么查看电脑使用记录
查看电脑使用记录是一项常见的操作,可以帮助用户了解自己或其他人在电脑上进行了哪些操作。下面是一个详细的解释,包括查看浏览历史、文件访问记录、应用程序使用记录以及其他...【详细内容】
2024-02-06  编程资料站    Tags:使用记录   点击:(81)  评论:(0)  加入收藏
电脑虚拟内存怎么设置?1分钟快速增加内存!
“我电脑里的内存好像不太够用,因此,我想在电脑里增加一些虚拟内存。不知道我应该怎么操作呢?有什么比较简单的此操作方法吗?” 虚拟内存是计算机系统内存管理的一种技术,它为程...【详细内容】
2024-02-06  数据蛙恢复专家    Tags:虚拟内存   点击:(61)  评论:(0)  加入收藏
新手制作ai写真都是用哪些工具?
春节即将来临,你的朋友圈是否已经被各种春节主题的个人写真刷屏了?看到那么多美照,你是否也心动了?其实,制作个人写真并不需要专门去拍摄,现在有很多AI写真软件可以轻松制作出自己...【详细内容】
2024-01-31  雨后海棠    Tags:ai写真   点击:(60)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条