【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...

相关推荐
bearpping10 分钟前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端
一叶飘零_sweeeet12 分钟前
线上故障零扩散:全链路监控、智能告警与应急响应 SOP 完整落地指南
java·后端·spring
开心就好20251 小时前
不同阶段的 iOS 应用混淆工具怎么组合使用,源码混淆、IPA混淆
后端·ios
架构师沉默1 小时前
程序员如何避免猝死?
java·后端·架构
椰奶燕麦2 小时前
Windows PackageManager (winget) 核心故障排错与通用修复指南
后端
zjjsctcdl2 小时前
springBoot发布https服务及调用
spring boot·后端·https
zdl6863 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情3 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player3 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明3 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展