Wenjie Bai
Wenjie Bai
### Is your feature request related to a problem? Please describe. 按照Readme的描述使用CPU推理ChatGLM2-6B-int4量化版本时报错,报错信息如下:  已完成的步骤: 1. 将模型下载至本地并使用本地路径 2. 改用.float()使用cpu 3. 已安装[[TDM-GCC](https://jmeubank.github.io/tdm-gcc/)](https://jmeubank.github.io/tdm-gcc/),且勾选了OpenMP ### Solutions 我的解决思路是运行ChatGLM-6b-int4,如果ChatGLM-6b-int4可以运行,那么可以参照着ChatGLM-6b-int一步步调试以最终跑通ChatGLM2-6b-int4。 结果是发现ChatGLM-6b-int4也跑不通,不过已经有一些相关的[[issue](https://github.com/THUDM/ChatGLM-6B/issues/166)](https://github.com/THUDM/ChatGLM-6B/issues/166)。 参考其他issue我解决了一个问题:编译出来的`quantization_kernels_parallel.so`和`quantization_kernels.so`其实并不能用。因此上面的报错本质上其实不是文件找不到,而是文件无法加载。(相关代码在`quantization.py`的`CPUKernel`类,包括编译和加载CPU Kernel) 经过仔细阅读源码,以及参考ChatGLM-6B中的issue,我发现其实解决的办法很简单。 对于ChatGLM-6b-int4,出现问题的原因只有:编译出来的so文件有问题,因而无法被加载。(因为后来手动编译的so文件和原始的so文件大小差异明显) 关于为什么按照教程走,但是编译出的文件有问题,我想很大概率是因为我的电脑中安装了不止一个gcc,包括MingGW64以及Cygwin。因此很可能找到TDM-GCC的gcc路径,用绝对路径去手动编译可以获得可用的so文件。但是我没有尝试,而是用了上面issue中[[gongjimin推荐的gcc](https://github.com/skeeto/w64devkit/releases)](https://github.com/skeeto/w64devkit/releases)。 所以解决办法就2步:编译正确的so文件和加载正确的so文件。...