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

相关推荐
mldong6 小时前
C# 开发者也有自己的轻量工作流引擎了:NuGet 装包,5 分钟跑通一条审批流
后端·c#·.net
爱学堂IT分享8 小时前
鹤翔老师pmp项目管理培训认证考试课 (直播录播题库送学时证明)【共58课时】-51CTO学堂
后端
王的宝库8 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
码事漫谈9 小时前
类型即世界:一个 C++ 程序员的本体论入门
后端
Rain的Java大神之路9 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
IT_陈寒11 小时前
Python的多线程居然是个假把式?搞清GIL让我少熬三天夜
前端·人工智能·后端
明月_清风11 小时前
位图与布隆过滤器:海量数据下的"存在性判断"艺术
前端·后端·算法
明月_清风12 小时前
Hash 表从入门到精通:Go 实战与工程细节
前端·后端·算法
考虑考虑12 小时前
ElasticSearch索引命令
运维·后端·elasticsearch
玉宇夕落13 小时前
背单词项目一:融会贯通:从零构建"单词大师"后台——Next.js + Supabase + Drizzle 全栈开发实战
后端