写这篇文章是几个月前了,现在模型和框架已经更新了好几轮了,但不影响吧,后面会把这几个月的发展专门用一篇文章补上。
在上一篇中,硬件全都准备好了,软件也已经安装完成,相应的配置都已经做完,终于要开始使用大模型了,后面这些天,我们会从最最基础的开始,一步一步来玩转大模型,目前各种各样的傻瓜教程都已经很多了,不管是本地模型部署还是API形式调用openAI,都有很多教程,从大模型的部署,使用,langchain使用,微调模型等等方方面面,都有很多教程,也有以一个例子,比如如何做一个自己的私人知识库这种来讲解大模型的。
既然已经有了硬件和软件,那么我们也来整一个开胃菜吧,首先,不管怎么样,先得跑起来一个大模型吧,然后和他对对话之类的,也算对大模型的使用有个初步的了解吧,OK,啥也不说了,开始干。
选择模型
在模型的选择上,我们没有选llama这种最流行的,一是它比较大,难以下载,二是不是一般人的电脑都能跑起来的,三是原生的llama不支持中文,还需要找已经完成中文微调的模型。所以,为了简便,我们选择清华大学的ChatGLM2-6B这个模型,顾名思义,他有60亿个参数,用来玩已经足够了。
首先,找到模型所在的位置:
- huggingface : huggingface.co/THUDM/chatg…
直接git clone 下来就好,没有必要安装git lfs,因为huggingface的速度实在是太慢了,使用git把这个十几GB的模型拖下来太慢了,有两种方式,一是找到模型地址使用迅雷下载,再覆盖掉。
另外,也可以到这里cloud.tsinghua.edu.cn/d/674208019… 来下载,这是清华的官网,速度会快很多,也可以使用迅雷。
全部下下来以后,我们的目录大概长这样子,红框部分是单独下下来的文件:
好了,代码已经准备好了,接下来就可以开始尝试加载模型了。
加载模型
准备工作
使用conda命令,新建一个python环境,来专门做chatGLM的加载和使用
conda create -c glm
conda activate glm
查看一下python版本,如果此环境中没有python,可以使用conda安装一个,默认会安装一个3.11.X的版本
conda install python
接下来,需要安装必要的包,在huggingface上已经写明了需要哪些包
pip3 install protobuf transformers==4.30.2 cpm_kernels torch>=2.0 gradio mdtex2html sentencepiece accelerate
实际上这些包中transformers和torch我们已经安装好了,只需要安装其他的对应包就可以了。
代码编写
代码编写相对比较简单,由于transformers非常好的封装性,我们只需要几行代码就可以完成模型的加载
from transformers import AutoTokenizer, AutoModel
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("/your/path/chatglm2-6b", trust_remote_code=True)
# 加载模型,注意最后调用的to()方法
# 如果你有显卡那么可以写.to("cuda")
# 如果只有CPU的话,写flaot()
# 如果是mac的m1/m2芯片的话,写to("mps"),我的就是这种情况
model = AutoModel.from_pretrained("/your/path/chatglm2-6b", trust_remote_code=True).half().to('mps')
# 执行模型
model = model.eval()
这里简单说一下第二行:
我这里是.to(‘mps’) 表示我使用的是mac的m芯片,如果你有nv显卡的话,这里可以改成.cuda(),如果你只有CPU的话,可以改成.float()
经过几秒钟的加载,完成了,完成以后就可以开始推理对话了
推理对话
推理对话也非常简单,两行的事:
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
其中history是对话历史,每次对话都会返回一个history,可以放到下一次对话中变成整个对话的上下文,避免chatGLM自己跑题了。response就是chatGLM的回复了。
好了,至此大模型已经完成加载完了并且你也可以和他进行对话了,是不是非常简单,其实只要你机器资源够(如果有显卡的话最好,显存至少需要8GB,没有显卡也没关系,只要你的内存足够大,最好32GB以上),那么很轻松就可以加载出来,然后就可以愉快的和他玩耍了。
干点别的?
既然大模型已经加载上了并且可以进行对话了,那么接下来我们就可以根据已有的能力在上面添砖加瓦了,比如:
- 建立一个web服务器,可以在网页上和他对话了
- 对接到微信公众号或者钉钉机器人上,就可以在微信上和他聊天了
- 按照LangChain框架,可以给他加上向量搜索和上下文提示,完成更为强大的功能,甚至通过插件方式让他具备联网能力,就可以回答一些实时的问题了
这里,我用他给我女儿写了一篇暑假作业。。。
总的来说,还行吧,自己再润色润色,修改修改也可以交了,你也可以试试别的,我觉得虽然说没有chatGPT3.5或者chatGPT4那么惊艳,但一般的废话文学也差不多够了,毕竟免费的,还要啥自行车。
尾声
今天通过简单的几行代码,就加载了一个大模型并且还用他为女儿写了个暑假作业,整体感觉非常简单,现在写代码已经完全不像之前了,很多东西前人都帮你搞好了,你只要像搭积木一样搭起来就可以了,这是程序员的幸福还是悲哀呢?
如果你觉得不错,欢迎转发给更多人看到,也欢迎关注我的公众号,主要聊聊搜索,推荐,广告技术,还有瞎扯。。文章会在这里首先发出来:)扫描或者搜索微信号XJJ267或者搜索西加加语言就行