ChatGLM-6B icon indicating copy to clipboard operation
ChatGLM-6B copied to clipboard

[Feature][Done] 低显存版ChatGLM-6B,性能完全一致。 Slim version of ChatGLM-6B by removing 20K image tokens

Open silverriver opened this issue 2 years ago • 12 comments

Is your feature request related to a problem? Please describe.

ChatGLM-6B使用了icetk,在其词表中,前20000个token是预留给图片的,在文本模型中没有用到这些图片token,但是在infer和微调的时候,这些token对应的embedding依然需要被加载,并且在解码每一个token的时候需要多计算20K个logits,会占用不少显存。

Solutions

我实现了ChatGLM-6B-Slim

ChatGLM-6B-Slim是在ChatGLM-6B的基础上通过裁剪词表构建的。裁剪了前20K个image token。节省了一些显存和计算。解码结果完全一致。

代码请见: https://github.com/silverriver/ChatGLM-6B-Slim

有需要的同学可以直接使用。ChatGLM-6B-Slim可以认为是ChatGLM-6B的一个低显存版等价平替。

Additional context

No response

silverriver avatar Mar 18 '23 05:03 silverriver

没用啊,colab还是暴内存

younggggger avatar Mar 18 '23 07:03 younggggger

大约可以减少多少的显存占用呢

xzqiaochu avatar Mar 18 '23 08:03 xzqiaochu

请问这个裁剪是只涉及 00001 和 00008 两个文件吗?我在日志里看只有这两个,模型文件太大,不想全都重新下载。

s0nny7 avatar Mar 19 '23 02:03 s0nny7

请问这个裁剪是只涉及 00001 和 00008 两个文件吗?我在日志里看只有这两个,模型文件太大,不想全都重新下载。

是的,权重文件中只涉及这两个文件的修改。

huggingface的model zoo里面可以查看文件的哈希值,比如:

https://huggingface.co/silver/chatglm-6b-slim/blob/main/pytorch_model-00002-of-00008.bin

https://huggingface.co/THUDM/chatglm-6b/blob/main/pytorch_model-00002-of-00008.bin

你可以比较一下其他几个权重文件。

但是*.json配置文件和*.py代码文件里面有更新,记得下载。

silverriver avatar Mar 19 '23 03:03 silverriver

大约可以减少多少的显存占用呢

因为没有足够多的GPU设备,所以我还没有具体测试。

但是理论上减少不了很多,毕竟被砍掉的词表只占原来词表的13.33%。

涉及到不同框架管理显存的策略不一样,所以实际节省的显存数量还需要测试。

不过考虑到ChatGLM-6B-Slim不会对模型性能造成任何影响,使用Slim版本总是好的,这些显存的节省几乎是免费的午餐。

silverriver avatar Mar 19 '23 03:03 silverriver

能否参考 https://huggingface.co/THUDM/chatglm-6b-int4 做一下量化后的模型?这样加载更快

martin2384798 avatar Mar 19 '23 16:03 martin2384798

请问对token生成有提速效果吗?

huangxd- avatar Mar 20 '23 06:03 huangxd-

能否参考 https://huggingface.co/THUDM/chatglm-6b-int4 做一下量化后的模型?这样加载更快

在这里:

https://huggingface.co/silver/chatglm-6b-int4-slim

模型参数文件大小从4.06GB减少到3.78GB。(但是不知道为啥新的ckpt在huggingface的repo里面显示的依然是4.06GB,实际下载的时候大小其实是3.78GB)

silverriver avatar Mar 20 '23 11:03 silverriver

请问对token生成有提速效果吗?

会有一点点性能提升,毕竟节省了一些冗余计算,但是估计影响不大。

silverriver avatar Mar 20 '23 11:03 silverriver

非常感谢,int4-slim拯救了一批6G显存卡比如GTX 1660, 2060, RTX 3050, 3060……因为不做裁剪的话标准的int4量化模型能载入和运行,但是推断两次就爆显存了……现在至少可以推断5次再爆

TheReluctantHeroes avatar Mar 21 '23 17:03 TheReluctantHeroes

能否参考 https://huggingface.co/THUDM/chatglm-6b-int4 做一下量化后的模型?这样加载更快

在这里:

https://huggingface.co/silver/chatglm-6b-int4-slim

模型参数文件大小从4.06GB减少到3.78GB。(但是不知道为啥新的ckpt在huggingface的repo里面显示的依然是4.06GB,实际下载的时候大小其实是3.78GB)

感谢,晚上试一下效果

martin2384798 avatar Mar 22 '23 02:03 martin2384798

确实很好用,对话轮数从4轮提高到了10轮左右,而且响应速度也变快了 我使用的是RTX3060 Laptop,本来6G显存不太够用,用这个好多了

zerodegress avatar Mar 24 '23 06:03 zerodegress

chatglm-6b模型的lm_head和embedding权重是怎么加载的,看到权重是相同的,好像是同一个tensor, 而且发现不在parameters里

o-github-o avatar May 15 '23 11:05 o-github-o