ChatGLM-6B
ChatGLM-6B copied to clipboard
[Feature][Done] 低显存版ChatGLM-6B,性能完全一致。 Slim version of ChatGLM-6B by removing 20K image tokens
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
没用啊,colab还是暴内存
大约可以减少多少的显存占用呢
请问这个裁剪是只涉及 00001 和 00008 两个文件吗?我在日志里看只有这两个,模型文件太大,不想全都重新下载。
请问这个裁剪是只涉及 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代码文件里面有更新,记得下载。
大约可以减少多少的显存占用呢
因为没有足够多的GPU设备,所以我还没有具体测试。
但是理论上减少不了很多,毕竟被砍掉的词表只占原来词表的13.33%。
涉及到不同框架管理显存的策略不一样,所以实际节省的显存数量还需要测试。
不过考虑到ChatGLM-6B-Slim不会对模型性能造成任何影响,使用Slim版本总是好的,这些显存的节省几乎是免费的午餐。
能否参考 https://huggingface.co/THUDM/chatglm-6b-int4 做一下量化后的模型?这样加载更快
请问对token生成有提速效果吗?
能否参考 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)
请问对token生成有提速效果吗?
会有一点点性能提升,毕竟节省了一些冗余计算,但是估计影响不大。
非常感谢,int4-slim拯救了一批6G显存卡比如GTX 1660, 2060, RTX 3050, 3060……因为不做裁剪的话标准的int4量化模型能载入和运行,但是推断两次就爆显存了……现在至少可以推断5次再爆
能否参考 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)
感谢,晚上试一下效果
确实很好用,对话轮数从4轮提高到了10轮左右,而且响应速度也变快了 我使用的是RTX3060 Laptop,本来6G显存不太够用,用这个好多了
chatglm-6b模型的lm_head和embedding权重是怎么加载的,看到权重是相同的,好像是同一个tensor, 而且发现不在parameters里