1,视频演示
www.bilibili.com/video/BV1fC...
更多chatgpt资料:
2,关于fastllm
项目上说可以对模型进行优化。 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
也可以下载模型:
很多模型都支持:
就是没有最新的 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 星星。