AniZpZ / AutoSmoothQuant

An easy-to-use package for implementing SmoothQuant for LLMs
MIT License
82 stars 7 forks source link

量化后推理速度 #4

Open jundolc opened 9 months ago

jundolc commented 9 months ago

量化完后推理速度反而变慢了,难道不应该加速吗

AniZpZ commented 9 months ago

请问你使用的是什么模型呢,是和transformers库做对比吗? 我们目前还未针对这个库的推理进行优化,在小batchsize的情况下quant/dequant的开销可能掩盖了量化带来的收益。关于这个仓库的推理优化已经在我们的计划之中了。 如果你当前就像获得明显的推理加速的话,建议使用我们维护的vLLM分支进行推理。可以参考这两个PR: 模型量化:https://github.com/vllm-project/vllm/pull/1508 KV Cache量化:https://github.com/vllm-project/vllm/pull/1507

jundolc commented 9 months ago

我参照你的代码改写了qwen的int8推理模型,测试的是qwen的模型,对比的是transformers库,推理的时候batchsize是1,这样子对比int8的推理会比transformers库慢。 还有我想问的是这边的代码里用了cublas,和torch_int速度有差别吗

AniZpZ commented 9 months ago

我参照你的代码改写了qwen的int8推理模型,测试的是qwen的模型,对比的是transformers库,推理的时候batchsize是1,这样子对比int8的推理会比transformers库慢。 还有我想问的是这边的代码里用了cublas,和torch_int速度有差别吗

我们测试下来cublas的gemm速度比torch_int的gemm稍微快一些。请问你现在使用的是什么粒度的量化呢? 如果使用per-token量化是会比per-tensor慢一些的。 torch_int仓库应该默认使用per-tensor量化的。

jundolc commented 9 months ago

pertensor和pertoken的我都试过了,我这边测试用的opencompass,测试的是winogrande和siqa这两个数据集,用的单卡3090 transformers原始fp16版本的推理完用了337s, pertensor的是500s, pertoken的是520s, pertensor精度会低很多,pertoken的精度和fp16版本测出来差不多,

AniZpZ commented 9 months ago

pertensor和pertoken的我都试过了,我这边测试用的opencompass,测试的是winogrande和siqa这两个数据集,用的单卡3090 transformers原始fp16版本的推理完用了337s, pertensor的是500s, pertoken的是520s, pertensor精度会低很多,pertoken的精度和fp16版本测出来差不多,

好的。我们本周在进行mixtral等新模型的支持。随后会尽快排查一下这个问题。

jundolc commented 9 months ago

好的,我这边也会一直更进这个问题,感谢

AlexMa0 commented 3 months ago

我参照你的代码改写了qwen的int8推理模型,测试的是qwen的模型,对比的是transformers库,推理的时候batchsize是1,这样子对比int8的推理会比transformers库慢。 还有我想问的是这边的代码里用了cublas,和torch_int速度有差别吗

我们测试下来cublas的gemm速度比torch_int的gemm稍微快一些。请问你现在使用的是什么粒度的量化呢? 如果使用per-token量化是会比per-tensor慢一些的。 torch_int仓库应该默认使用per-tensor量化的。

你好,请问你是按照什么代码去改写的qwen的int8量化与推理?我也想尝试量化qwen或者其他模型,但是看到autosmoothquant/models里有四种模型的文件,如果我想测评这四种以外的模型,我该如何参考代码去改写呢?非常期待您的回复!!!感谢!!!