Open heavenkiller2018 opened 1 year ago
[root@localhost build]# ./benchmark -p /root/ChatGLM2-6B/deploy/flm/chatglm26b_lora/chatglm26b_fp16.flm -f ../example/benchmark/prompts/hello.txt -b 16 -l 18 Load (200 / 200) Warmup... finish. AVX: ON AVX2: ON AARCH64: OFF Neon FP16: OFF Neon DOT: OFF
batch: 16 output 288 tokens use 0.520529 s speed = 553.283325 tokens / s
这是我A40跑的,好像速度还可以
[root@localhost build]# ./benchmark -p /root/ChatGLM2-6B/deploy/flm/chatglm26b_lora/chatglm26b_fp16.flm -f ../example/benchmark/prompts/hello.txt -b 16 -l 18 Load (200 / 200) Warmup... finish. AVX: ON AVX2: ON AARCH64: OFF Neon FP16: OFF Neon DOT: OFF
batch: 16 output 288 tokens use 0.520529 s speed = 553.283325 tokens / s
这是我A40跑的,好像速度还可以
请教下哈,同样的batch和A40配置,不使用加速时速度是多少? 加速明显吗?
你这个是batch=16的速度,折算成batch=1,速度是34 token/s?
不要去折算,batch=1意思是一次性喂给模型一个输入,batch=16意思是一次性喂给模型16个输入。由于batch=1时模型没有满载,所以速度不能直接折算。@sun1092469590
我没有P40,猜测可能是没有int4计算单元
@heavenkiller2018 遇到了同样的问题,使用作者一级目录下readme推荐的模型加载方法速率没有提升反而下降了
from fastllm_pytools import llm
model = llm.model("model.flm")
但是使用二级目录pyfastllm中readme推荐的方法,速度有质的提升(Batch 1时速度提升了1倍,Batch 200时速度提升了2倍,3090 Batch 200时最高生成速度2500 token/s)
sys.path.append('./build-py')
import pyfastllm # 或fastllm
建议作者优化一下项目组织,解释一下两种方法的差异性 测试环境如下 torch: 2.1.0.dev20230718+cu121 cuda: 12.2 GPU: 3090
不要去折算,batch=1意思是一次性喂给模型一个输入,batch=16意思是一次性喂给模型16个输入。由于batch=1时模型没有满载,所以速度不能直接折算。@sun1092469590
这样啊,好的好的,谢谢哈
@heavenkiller2018 遇到了同样的问题,使用作者一级目录下readme推荐的模型加载方法速率没有提升反而下降了
from fastllm_pytools import llm model = llm.model("model.flm")
但是使用二级目录pyfastllm中readme推荐的方法,速度有质的提升(Batch 1时速度提升了1倍,Batch 200时速度提升了2倍,3090 Batch 200时最高生成速度2500 token/s)
sys.path.append('./build-py') import pyfastllm # 或fastllm
建议作者优化一下项目组织,解释一下两种方法的差异性 测试环境如下 torch: 2.1.0.dev20230718+cu121 cuda: 12.2 GPU: 3090
我的理解,不一定对哈。 第一种方式只用于没有编译pyfastllm时,python加载动态库libfastllm_tools.so转换模型,这种加载方式存在内存拷贝,性能会打折扣。 第二种通过pybind11创建适用python的API,性能没有因为调用方式受到影响。
我想请问一下,python cli.py -m chatglm -p chatglm-6b-int8.bin 这一步是在哪个目录下执行的,我先是在fastllm下创建了build-py的目录,然后把cd build-py cmake .. -DUSE_CUDA=ON -DPY_API=ON make -j4 这些都执行了,然后去到pyfastllm/demo下执行 python cli.py -m chatglm -p chatglm-6b-int8.bin报错了, No module named 'pyfastllm',可以给一下详细的步骤吗
使用如下命令安装fastllm_pytools包
cd fastllm
mkdir build
cd build
cmake .. -DUSE_CUDA=ON # 如果不使用GPU编译,那么使用 cmake .. -DUSE_CUDA=OFF
make -j
cd tools && python setup.py install
@HL0718 你最后一句没执行吧
@heavenkiller2018 我也遇到了相同的问题 `./benchmark -p chatglm2-6b-int4.flm -f ../example/benchmark/prompts/hello.txt -b 16 -l 18
Load (200 / 200) Warmup... finish. AVX: ON AVX2: ON AARCH64: OFF Neon FP16: OFF Neon DOT: OFF
batch: 16 prompt token number = 256 prompt use 25.356812 s prompt speed = 10.095906 tokens / s output 128 tokens use 16.395212 s speed = 7.807157 tokens / s ` 我也是P40, CUDA 12.2, 会不会是P40的CUDA单元比较少导致的?
另外,初步调研了一下,可能是因为P40没有Tensor Cores,矩阵运算不太行,所以batch反而更慢? 我是GPU小白,欢迎交流
Reference:
我想请问一下,python cli.py -m chatglm -p chatglm-6b-int8.bin 这一步是在哪个目录下执行的,我先是在fastllm下创建了build-py的目录,然后把cd build-py cmake .. -DUSE_CUDA=ON -DPY_API=ON make -j4 这些都执行了,然后去到pyfastllm/demo下执行 python cli.py -m chatglm -p chatglm-6b-int8.bin报错了, No module named 'pyfastllm',可以给一下详细的步骤吗
你好,请问解决了吗?
应该是在fastllm/pyfastllm这个目录下去执行哈,这个下面有个readme可以参考 @yuanphoenix @HL0718
应该是在fastllm/pyfastllm这个目录下去执行哈,这个下面有个readme可以参考 @yuanphoenix @HL0718
谢谢,解决了,把送so文件放phton文件旁边就可以了,第一次见这种加载方式😂
后续将优化pyfastllm的安装方式。
应该是在fastllm/pyfastllm这个目录下去执行哈,这个下面有个readme可以参考 @yuanphoenix @HL0718
谢谢,解决了,把送so文件放phton文件旁边就可以了,第一次见这种加载方式😂
这个可以具体说下吗?在fastllm/pyfastllm/examples下执行 python web_api.py -p?把哪些so文件cp进来?只有一个libfastllm_tools.so呀?
应该是在fastllm/pyfastllm这个目录下去执行哈,这个下面有个readme可以参考 @yuanphoenix @HL0718
谢谢,解决了,把送so文件放phton文件旁边就可以了,第一次见这种加载方式😂
这个可以具体说下吗?在fastllm/pyfastllm/examples下执行 python web_api.py -p?把哪些so文件cp进来?只有一个libfastllm_tools.so呀?
具体名字我忘了 ,就是编译pyfastllm得到的so文件。
现在在 pyfastllm 下可以直接安装
P40 可以试验一下这个分支,增加编译选项CUDA_NO_TENSOR_CORE
,修改了矩阵乘法的计算方式,速度能达到22-25token/s。
但是矩阵乘法的计算方式修改会导致模型和原推理结果不完全对齐。
P40跑int8会不会比较快?官方规格表里P40是支持int8加速的,而且可以到47TOPS。
测试结果: int4量化,1 batch 的速度是8 tokens / s, 只有4090的1/20?🤡🤡🤡 而且fp16的1batch速度反而比int 1batch的速度还高,不是应该要低的吗?另外,16batch的速度都要远低于1batch的速度。这测试结果有点看不懂了,一是为什么16batch比1batch速度反而低, 二是为啥fp16的速度反而比int4速度高, 三是P40的速度为啥只有4090的1/20,两者性能是有差距,但不至于这么大吧?@ztxz16 , 这是哪个环节出了问题了吗?是GPU卡, 模型,还是fastllm中的哪一个出问题了呢?
测试标准:
模型 | Data精度 | 平台 | Batch | 最大推理速度(token / s) -- | -- | -- | -- | -- ChatGLM-6b-int4 | float32 | RTX 4090 | 1 | 176 ChatGLM-6b-int8 | float32 | RTX 4090 | 1 | 121 ChatGLM-6b-fp16 | float32 | RTX 4090 | 64 | 2919 ChatGLM-6b-fp16 | float32 | RTX 4090 | 256 | 7871 ChatGLM-6b-fp16 | float32 | RTX 4090 | 512 | 10209 ChatGLM-6b-int4 | float32 | Xiaomi 10 Pro - 4 Threads | 1 | 4 ~ 5测试环境:
测试数据:
int4_1
int4_16
int4_512
fp16_1