ChatGLM-6B
ChatGLM-6B copied to clipboard
[BUG/Help] 在尝试运行8bit量化下的模型的时候,程序载入显存使用GPU十分缓慢;但我FP16精度加载时可以较为快速成功载入显存
Is there an existing issue for this?
- [X] I have searched the existing issues
Current Behavior
在尝试运行8bit量化下的模型的时候,程序载入显存使用GPU十分缓慢;但我FP16精度加载时可以较为快速成功载入显存
Expected Behavior
当在运行8bit量化下的模型的时候,程序载入显存并使用GPU运行
Steps To Reproduce
我首先使用全精度模型运行:
程序载入显存并在GPU中成功运行:
随后将模型更换为8bit量化后的:
但开始运行后速度下降,经过非常长的时间后才得以运行:
请问这是正常现象,量化过程会很占用时间吗?
Environment
- OS:Windows Server 2022 Datacenter
- Python:3.7.6
- Transformers:4.27.1
- PyTorch:1.13.1+cu117
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :True
Anything else?
感谢清华大佬,学院路末流电子信息专业小白膜拜大佬; 另外请问一下这个每运行一轮对话后会有多少的显存占用呢?感觉说两三轮显存就会增长0.3G左右,多轮之后这个涨幅会下降吗?感谢。
没错,量化需要很长时间,不过你可以用pickle将量化后的模型保存,然后下次运行直接用pickle加载再进行之后的步骤。我这样做了之后省去了量化的过程,模型启动很快。关于显存的占用你可以手动对history进行条数限制防止显存不够。 保存:
import pickle from transformers import AutoModel #4或者8 quantizationBit = 8
model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True) model = model.half().quantize(quantizationBit) print("量化完毕") with open(f'{quantizationBit}bit.preq', 'wb') as f: pickle.dump(model, f) print("保存量化完毕")
加载:
with open(f'8bit.preq', 'rb') as f: model = pickle.load(f).cuda()
感谢感谢,我这就试试。 顺便问一下如果想用已有数据库微调chatglm有什么样的硬件要求呢?
这个我就不知道了,我完全不懂这方面。微调可以参考这个项目,有人跑通了https://www.bilibili.com/opus/774083081235595299
没错,量化需要很长时间,不过你可以用pickle将量化后的模型保存,然后下次运行直接用pickle加载再进行之后的步骤。我这样做了之后省去了量化的过程,模型启动很快。关于显存的占用你可以手动对history进行条数限制防止显存不够。 保存:
import pickle from transformers import AutoModel #4或者8 quantizationBit = 8 model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True) model = model.half().quantize(quantizationBit) print("量化完毕") with open(f'{quantizationBit}bit.preq', 'wb') as f: pickle.dump(model, f) print("保存量化完毕")
加载:
with open(f'8bit.preq', 'rb') as f: model = pickle.load(f).cuda()
加载时出现:
File "/home/martin/llm/ChatGLM-6B/test.py", line 5, in
model = pickle.load(f).cuda() ModuleNotFoundError: No module named 'transformers_modules'
我用的4bit,不知道为什么可以保存但加载就不正确了
没错,量化需要很长时间,不过你可以用pickle将量化后的模型保存,然后下次运行直接用pickle加载再进行之后的步骤。我这样做了之后省去了量化的过程,模型启动很快。关于显存的占用你可以手动对history进行条数限制防止显存不够。 保存:
import pickle from transformers import AutoModel #4或者8 quantizationBit = 8 model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True) model = model.half().quantize(quantizationBit) print("量化完毕") with open(f'{quantizationBit}bit.preq', 'wb') as f: pickle.dump(model, f) print("保存量化完毕")
加载:
with open(f'8bit.preq', 'rb') as f: model = pickle.load(f).cuda()
加载时出现:
File "/home/martin/llm/ChatGLM-6B/test.py", line 5, in model = pickle.load(f).cuda() ModuleNotFoundError: No module named 'transformers_modules'
我用的4bit,不知道为什么可以保存但加载就不正确了
@martin2384798 Now you can directly load the quantized model from THUDM/chatglm-6b-int4
没错,量化需要很长时间,不过你可以用pickle将量化后的模型保存,然后下次运行直接用pickle加载再进行之后的步骤。我这样做了之后省去了量化的过程,模型启动很快。关于显存的占用你可以手动对history进行条数限制防止显存不够。 保存:
import pickle from transformers import AutoModel #4或者8 quantizationBit = 8 model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True) model = model.half().quantize(quantizationBit) print("量化完毕") with open(f'{quantizationBit}bit.preq', 'wb') as f: pickle.dump(model, f) print("保存量化完毕")
加载:
with open(f'8bit.preq', 'rb') as f: model = pickle.load(f).cuda()
加载时出现:
File "/home/martin/llm/ChatGLM-6B/test.py", line 5, in model = pickle.load(f).cuda() ModuleNotFoundError: No module named 'transformers_modules'
我用的4bit,不知道为什么可以保存但加载就不正确了
@martin2384798 Now you can directly load the quantized model from
THUDM/chatglm-6b-int4
Thanks, that's much faster