ztxz16 / fastllm

纯c++的全平台llm加速库,支持python调用,chatglm-6B级模型单卡可达10000+token / s,支持glm, llama, moss基座,手机端流畅运行
Apache License 2.0
3.34k stars 344 forks source link

int4的模型性能很慢 #170

Open FdyCN opened 1 year ago

FdyCN commented 1 year ago

我使用的是NVIDIA 4070 8G的显卡,chatglm-6b-int4-hf模型是可以跑的,但是从fp16转换到int4的fastllm模型之后,使用./main测试,直接卡了20分钟也没出结果。

模型转换代码:

from fastllm_pytools import llm
tokenizer = AutoTokenizer.from_pretrained("/LLM_model/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("/LLM_model/chatglm-6b", trust_remote_code=True).half().cuda()
model = llm.from_hf(model, tokenizer, dtype = "int4") # dtype支持 "float16", "int8", "int4"
model.save("chatglm-6b.flm"); # 导出fastllm模型

使用main测试:

./main -p /path/to/chatglm-6b.flm

然后就直接卡住了: image

模型大小看起来5G的样子也说的过去: image

ztxz16 commented 1 year ago

不太确定具体原因,有种可能是模型一直在输出空白token 可能引起这个问题的原因有可能是CMakeLists.txt里面的CUDA的flag "native"没有识别成功,生成的CUDA可执行有bug 可以尝试用CPU跑一下,如果CPU没问题的话应该就是CUDA代码编译失败,可以把native改成设备对应的计算力

FdyCN commented 1 year ago

@ztxz16 python api没有办法显式选择Backend么?(看了下readme似乎没看到对应的示例

nanfang2000 commented 1 year ago

我用CPU版的也是,不知道等了多久才跑出来一句