ChatGLM2-6b-int4相关部署经过(附带Cmake相关理论)
[!NOTE]
Post Update time: 2024-04-09
Author: J Chow
原文链接:
一、 引言
本文主要是亲自尝试关于LangChain-ChatGLM-Webui项目所遇到的坑及相关思路。
首先本人第一次尝试自己部署大模型本地应用,在相关网站找到项目地址:LangChain-ChatGLM-Webui项目,其是一个基于Gradio一个应用框架(我认为起码可以算一个初始框架),并尝试按照其部署文件进行尝试,但是在本机器(MacBook Pro M2 Max)出现了各种问题,但是通过此些问题也加强了对于大模型应用的部署的理解。
这里感谢2个视频介绍及一个文章总结(请见文章结尾处的引用)。
二、部署过程及坑点
2.1 本机配置
本机配置是Apple Macbook Pro,芯片是M2 Max,内存是32 GB,系统是14.2.1 (23C71),给遇到同样问题的小伙伴指路。
2.2 部署过程及错误提示解决过程
首先本项目主要集成了主流大模型和embedding模型可以进行本地知识库的应用部署,因为本机内存的限制,本人准备尝试
chatglm2-6b-int4
模型及text2vec-base-chinese
两个作为初始模型。这里修改初始化配置可以在项目config.py
中进行修改,本人直接因为内存原因直接将其他无法尝试的模型进行了注释,这里如果大家同样机型可以尝试本人fork后的项目(地址链接)。下载模型问题,建议可以下载本项目提供的国内地址(启智社区),可以尝试直接HuggingFace中下载。
在运行项目
python app.py
后存在以下Mac M系列会出现的问题。
3.1 fatal error:’omp.h’ file not found
这个问题非常煎熬对于本人,这是因为本机库的问题,本以为按照如下代码就可以进行安装,但是并没有如愿,如果有其他伙伴尝试通过了,可以联系我。1
brew install libomp
并且通过命令:
1
brew --prefix libomp
确保在安装目录下
/opt/homebrew/opt/libomp
的include
文件夹下,根据某度各种文章,我们可以替换提示错误相关.c
文件的头文件地址改成绝对路径。但是此问题虽然解决了fatal error:'omp.h' file not found
的报错,但是带来了3.2错误library 'omp' not found
。因为本人敏感的发现每次都会在/.cashe/...
文件夹下生成如下文件,所以肯定不是修改绝对路径这种操作,随即修改回#include<omp.h>
。3.2 library ‘omp’ not found
这里我们再次感叹一下关于这个omp
的内容,因为这个其实除了头文件外,应该是本地的omp文件库,所以本人根据某度尝试了多个包的安装但都无果,最后看到参考3所说的手动安装omp
到/usr/local
下,操作方法如下,但仍然没有效果,同时本人也清理了缓存。参考OpenMP on macOS with Xcode tools 假设:
gcc(clang)
是14.x
版本,其他版本见R-Project
提供的表格此时会安装下面几个文件:/usr/local/lib/libomp.dylib
,/usr/local/include/ompt.h
,/usr/local/include/omp.h
,/usr/local/include/omp-tools.h
。
注意:如果你之前运行ChatGLM
项目失败过,最好清一下Hugging Face
的缓存,i.e. 默认下是rm -rf ${HOME}/.cache/huggingface/modules/transformers_modules/chatglm-6b-int4
。由于使用了rm命令,请明确知道自己在删除什么。本人同时进一步发现,因为本机没有omp这个模块,导致其无法通过Clang命令中的两个命令(-fopenmp,-lomp)生成.so。博主为了隔离是否因为
HF
的程序导致脏处理,所以手动命令如下,1
2
3
4sudo clang -O3 -fPIC -pthread -Xclang -fopenmp -lomp -std=c99
/{$HOME}/.cache/huggingface/modules/transformers_modules/chatglm2-6b-int4/quantization_kernels_parallel.c
-shared -o
/{$HOME}/.cache/huggingface/modules/transformers_modules/chatglm2-6b-int4/quantization_kernels_parallel.so但仍然依然报错,所以确定了问题还是出现在关于本机模块安装问题。下面给出我当时的2个思路,第一个是手动
gcc
帮助其编译成.so
文件,第二个尝试重新安装clang
环境。由于本人对
gcc
并不熟悉,先尝试第二个方法,重新安装了llvm
环境,并且退出重进需环境,没想到起码并没有此类报错。所以本人没有尝试第一种思路,但会在文章第三部分,将附上本人学习的内容结果,帮助大家在M系列Mac机器如何手动编译.c
文件。3.3 Failed to load cpm_kernels:Unknown platform: darwin
无需理会,只在int4这个模型中才会出现。
综上,本人最后发现是因为权限不足导致libomp
无法编译,最后使用sudo
得以解决。
三、关于CMake
、makelists
、clang
和gcc
的关系
Refs: