Mac M2之ChatGLM3-6B大模型私有化部署
环境与背景
在特定的情况下,要保证信息安全的同时还能享受到AIGC大模型带来的乐趣和功能,那么,私有化部署就能帮助到你,最起码,它是一个真正可用的方案。私有化部署指的是将AI应用部署在企业内部的服务器上,而非云端。这种部署方式可以在保证数据安全的同时,提高企业对于自身数据资产的控制权。
简单描述下本地电脑的配置:
- 处理器:Apple M2 Pro
 - 内存:32 GB
 - 系统:14.3.1 (23D60)
 
本次只是初步评估ChatGLM3-6B的效果,尽可能在已有本地设备的情况下进行低成本本地模型部署,如果要更好的效果,还是上专业的硬件设备。
MAC部署
ChatGLM3 下载
1  | git clone https://github.com/THUDM/ChatGLM3  | 
但是,默认里面是没有模型的,只有自带的简单的聊天项目以及相关的接口示例项目,还得继续下载模型。
ChatGLM3-6B 模型下载
当然,如果你自己不下载这些模型,这些模型就会在运行的时候自动下载(网络不好的话会影响使用体验,所以,建议提前下载)
1  | git lfs install  | 
项目配置和部署
把下载的服务直接放到需要运行的地方,然后执行python环境管理
1  | conda create --name chatglm3 python=3.10  | 
然后,进入到主项目中,开始配置一些环境
1  | cd ChatGLM3  | 

可以看到,实际上我们可以运行7种案例。
- 基础例子(cli_demo , web_demo_streamlit )
 - 综合例子(聊天,工具,代码解释)
 - 模型微调
 - 类似于langchain的案例
 - openai接口的案例
 - TensorRT-LLM推理部署
 - 工具调用
 
目前,只有第二个的综合例子,是比较有趣的,就以它为案例进行配置修改。
composite_demo例子
看到,这个demo下还有requirements.txt文件,我们把他给安装了
1  | pip install -r requirements.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple  | 
演示中使用 Code Interpreter 还需要安装 Jupyter 内核:
1  | pip install ipykernel -i https://mirror.sjtu.edu.cn/pypi/web/simple  | 
接着修改client.py里面的配置信息
1  | // 修改 MODEL_PATH , chatglm3-6b 绝对路径  | 
对于搭载了Apple Silicon或者AMD GPU的 Mac,可以使用MPS后端来在GPU上运行ChatGLM3-6B。需要参考Apple的官方说明 安装 PyTorch-Nightly(正确的版本号应该是2.x.x.dev2023xxxx,而不是 2.x.x)。
1  | pip uninstall torch torchvision torchaudio  | 
使用命令
1  | pip list | grep torch  | 
看到类似这样的带dev的就可以下一步了
1  | torch 2.3.0.dev20231224  | 
将client.py中device_map = "auto"改为device_map = "mps"136-140行
1  | self.model = AutoModel.from_pretrained(  | 
150行
1  | self.model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="mps").eval()  | 

然后,执行以下命令启动服务
1  | streamlit run main.py  | 
效果展示
这回答速度真绝,非常的快。
对话模式

输入你是谁,它就输自动的输出信息,速度还挺快。而控制台也会显示你输入的信息以及返回的信息。

工具模式
工具模式,需要自己先定义工具,我这边没有定义,有兴趣的可以整一下。
以下是自带的工具进行的演示:我调用了一个查询天气的工具(tool_registry.py) 文件可以看到 get_weather的代码
代码解释器模式

总结
一开始的时候,没有按照Apple的官方说明安装PyTorch-Nightly,并配置MPS,结果效果喜人,一直在推理。后来配置后,感觉速度不亚于chatgpt3.5,答复效果也非常好。下一步开始使用chatGLM搭建私有知识库。