ChatGLM2-6b-int4相关部署经过(附带Cmake相关理论)


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 部署过程及错误提示解决过程

  1. 首先本项目主要集成了主流大模型和embedding模型可以进行本地知识库的应用部署,因为本机内存的限制,本人准备尝试chatglm2-6b-int4模型及text2vec-base-chinese两个作为初始模型。这里修改初始化配置可以在项目config.py中进行修改,本人直接因为内存原因直接将其他无法尝试的模型进行了注释,这里如果大家同样机型可以尝试本人fork后的项目(地址链接)。

  2. 下载模型问题,建议可以下载本项目提供的国内地址(启智社区),可以尝试直接HuggingFace中下载。

  3. 在运行项目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/libompinclude文件夹下,根据某度各种文章,我们可以替换提示错误相关.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
    4
    sudo 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得以解决。

三、关于CMakemakelistsclanggcc的关系

Refs:

  1. ChatGLM+Langchain构建本地知识库,只需6G显存,支持实时上传文档

  2. macbook安装chatglm2-6b