【ChatGLM3】(8):模型执行速度优化,在4090上使用fastllm框架,运行ChatGLM3-6B模型,速度11w tokens/s,真的超级快

1,视频演示

www.bilibili.com/video/BV1fC...

更多chatgpt资料:

blog.csdn.net/freewebsys/...

2,关于fastllm

github.com/ztxz16/fast...

项目上说可以对模型进行优化。 fastllm是纯c++实现,无第三方依赖的高性能大模型推理库 6~7B级模型在安卓端上也可以流畅运行

功能概述 🚀 纯c++实现,便于跨平台移植,可以在安卓上直接编译 🚀 ARM平台支持NEON指令集加速,X86平台支持AVX指令集加速,NVIDIA平台支持CUDA加速,各个平台速度都很快就是了 🚀 支持浮点模型(FP32), 半精度模型(FP16), 量化模型(INT8, INT4) 加速 🚀 支持多卡部署,支持GPU + CPU混合部署 🚀 支持Batch速度优化 🚀 支持并发计算时动态拼Batch 🚀 支持流式输出,很方便实现打字机效果 🚀 支持python调用 🚀 前后端分离设计,便于支持新的计算设备 🚀 目前支持ChatGLM模型,各种LLAMA模型(ALPACA, VICUNA等),BAICHUAN模型,MOSS模型

推理速度

6B级int4模型单4090延迟最低约5.5ms 6B级fp16模型单4090最大吞吐量超过 10000 token / s

3,下载代码进行编译

创建应用:

bash 复制代码
cd fastllm
mkdir build
cd build
cmake .. -DUSE_CUDA=ON
make -j
cd tools && python setup.py install

只研究 c++ 的部分不进行 python 安装。

4,模型转换

下载模型:

bash 复制代码
apt update && apt install git-lfs
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

Cloning into 'chatglm3-6b'...

修改 /fastllm/build/tools/chatglm_export.py 修改模型路径:

python 复制代码
import sys
from transformers import AutoTokenizer, AutoModel
from fastllm_pytools import torch2flm

if __name__ == "__main__":
    tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/chatglm3-6b", trust_remote_code=True)
    model = AutoModel.from_pretrained("/root/autodl-tmp/chatglm3-6b", trust_remote_code=True)
    model = model.eval()
    
...

执行模型转换即可:

bash 复制代码
# python3 tools/chatglm_export.py chatglm2-6b-fp16.flm float16
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████| 7/7 [00:08<00:00,  1.24s/it]
into here
output ( 200 / 200 )
finish.

还可以导出其他模型:

bash 复制代码
cd build
python3 tools/chatglm_export.py chatglm2-6b-fp16.flm float16 #导出float16模型
python3 tools/chatglm_export.py chatglm2-6b-int8.flm int8 #导出int8模型
python3 tools/chatglm_export.py chatglm2-6b-int4.flm int4 #导出int4模型

5,运行方法

bash 复制代码
# 这时在fastllm/build目录下

# 命令行聊天程序, 支持打字机效果
./main -p chatglm3-6b-fp16.flm 

# 简易webui, 使用流式输出 + 动态batch,可多路并发访问
./webui -p chatglm3-6b-fp16.flm --port 8000 

也可以下载模型:

huggingface.co/huangyuyang

很多模型都支持:

就是没有最新的 chatglm3 模型。可以手动进行转换。

6,使用效果:

vbnet 复制代码
./main -p chatglm3-6b-fp16.flm 
AVX: ON
AVX2: ON
AARCH64: OFF
Neon FP16: OFF
Neon DOT: OFF
Load (200 / 200) 
Warmup...
finish.
欢迎使用 chatglm 模型. 输入内容对话,reset清空历史记录,stop退出程序.
用户: 北京景点
chatglm: 
 北京作为中国的首都,拥有众多著名的历史文化景点和现代建筑。以下是一些值得一游的北京景点:

1. 故宫博物院:位于北京市中心,是中国古代皇家宫殿,也是世界上保存最完整、规模最大的木质结构古建筑群。

2. 颐和园:位于北京西郊,是清朝皇家园林,被誉为"皇家园林博物馆"。

7,启动web,启动apiserver

bash 复制代码
# 简易webui, 使用流式输出 + 动态batch,可多路并发访问
./webui -p chatglm3-6b-fp16.flm --port 8000 

启动 apiserver

bash 复制代码
# openai api 兼容服务
./apiserver -p chatglm3-6b-fp16.flm --port 8000 
bash 复制代码
curl -X POST "http://127.0.0.1:8080/generate" \
     -H 'Content-Type: application/json' \
     -d '{
     "prompt": "北京景点推荐"
     }'

测试接口,发现返回的数据被截断了。修改下api server 代码: 可以正常了。

8,推理速度

可以使用benchmark程序进行测速,根据不同配置、不同输入,推理速度也会有一些差别。

bash 复制代码
./benchmark -p chatglm3-6b-fp16.flm -f ../example/benchmark/prompts/hello.txt -b 512 -l 18

确实速度非常快:

ini 复制代码
batch: 512
prompt token number = 2560
prompt use 0.348109 s
prompt speed = 7354.018066 tokens / s
output 5120 tokens
use 0.461873 s
speed = 11085.298828 tokens / s

9,总结

速度确实非常快,但是目前看接口中只有一个 generate 接口。 后续可以通过进行优化。 没有 /v1/chat/completions 聊天接口。代码是 c++ 的效率是正高。

下一个研究项目 candle : 目前已经 10K 星星。

github.com/huggingface...

相关推荐
2401_882727573 小时前
低代码配置式组态软件-BY组态
前端·后端·物联网·低代码·前端框架
追逐时光者4 小时前
.NET 在 Visual Studio 中的高效编程技巧集
后端·.net·visual studio
大梦百万秋4 小时前
Spring Boot实战:构建一个简单的RESTful API
spring boot·后端·restful
斌斌_____5 小时前
Spring Boot 配置文件的加载顺序
java·spring boot·后端
路在脚下@5 小时前
Spring如何处理循环依赖
java·后端·spring
海绵波波1076 小时前
flask后端开发(1):第一个Flask项目
后端·python·flask
小奏技术6 小时前
RocketMQ结合源码告诉你消息量大为啥不需要手动压缩消息
后端·消息队列
AI人H哥会Java8 小时前
【Spring】控制反转(IoC)与依赖注入(DI)—IoC容器在系统中的位置
java·开发语言·spring boot·后端·spring
凡人的AI工具箱8 小时前
每天40分玩转Django:Django表单集
开发语言·数据库·后端·python·缓存·django
奔跑草-8 小时前
【数据库】SQL应该如何针对数据倾斜问题进行优化
数据库·后端·sql·ubuntu