shuxueslpi / chatGLM-6B-QLoRA

使用peft库,对chatGLM-6B/chatGLM2-6B实现4bit的QLoRA高效微调,并做lora model和base model的merge及4bit的量化(quantize)。
350 stars 46 forks source link

推理性能? #1

Closed Nipi64310 closed 1 year ago

Nipi64310 commented 1 year ago

Hi @shuxueslpi , 感谢分享,想问下基于https://github.com/shuxueslpi/chatGLM-6B-QLoRA/blob/main/train_qlora.py#L138 这样训练出来的int4模型,推理速度会比原始的chatglm6b fp16快吗 因为chatglm自带的quantize方法,似乎只能压缩显存,但是耗时会变久。

shuxueslpi commented 1 year ago

推理这部分我还没有做过性能相关的测试,但我理解这里的4bit方法应该和自带的quantize方法是一致的。 所以如果真的只有压缩显存的效果,那么确实应该还要寻求更优的推理方案,比如类似tensorRT这样的推理专用引擎之类的。

Nipi64310 commented 1 year ago

推理这部分我还没有做过性能相关的测试,但我理解这里的4bit方法应该和自带的quantize方法是一致的。 所以如果真的只有压缩显存的效果,那么确实应该还要寻求更优的推理方案,比如类似tensorRT这样的推理专用引擎之类的。

你可以帮测试一下训练过之后的性能吗,就用单条prompt循环10次,耗时平均, 我用没训练的测试了一下,似乎是比自带的快一点点,但是还是比不量化慢。确实提速只有靠cuda算子优化,用fasttransformers转了之后,速度提升比较明显

shuxueslpi commented 1 year ago

https://huggingface.co/blog/zh/hf-bitsandbytes-integration 找了下官方博客里的一篇文章,8bit的原理,看上去确实只是为了节省显存。我有空了也测试下。

shuxueslpi commented 1 year ago

@Nipi64310 不好意思,我昨天在写合并lora和用自带的quantize量化的脚本,对你的原始问题回答可能跑偏了。 这里qlora训练后,得到的是一个lora的adapter文件,只有几兆的大小,需要把这个adapter文件和原始fp32的模型合并后,才能得到完整模型,所以是可以得到完整的fp32模型,再拿去别的框架里加速的。 昨天更新的merge_lora_and_quantize.py文件,就是在做模型的合并和使用自带的quantize进行量化。

shuxueslpi commented 1 year ago

推理这部分我还没有做过性能相关的测试,但我理解这里的4bit方法应该和自带的quantize方法是一致的。 所以如果真的只有压缩显存的效果,那么确实应该还要寻求更优的推理方案,比如类似tensorRT这样的推理专用引擎之类的。

你可以帮测试一下训练过之后的性能吗,就用单条prompt循环10次,耗时平均, 我用没训练的测试了一下,似乎是比自带的快一点点,但是还是比不量化慢。确实提速只有靠cuda算子优化,用fasttransformers转了之后,速度提升比较明显

做了个测试,可以看一下:https://github.com/shuxueslpi/chatGLM-6B-QLoRA#%E6%8E%A8%E7%90%86%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95

Nipi64310 commented 1 year ago

感谢,很棒的工作