玩转大模型(二)启动一个大模型

写这篇文章是几个月前了,现在模型和框架已经更新了好几轮了,但不影响吧,后面会把这几个月的发展专门用一篇文章补上。

在上一篇中,硬件全都准备好了,软件也已经安装完成,相应的配置都已经做完,终于要开始使用大模型了,后面这些天,我们会从最最基础的开始,一步一步来玩转大模型,目前各种各样的傻瓜教程都已经很多了,不管是本地模型部署还是API形式调用openAI,都有很多教程,从大模型的部署,使用,langchain使用,微调模型等等方方面面,都有很多教程,也有以一个例子,比如如何做一个自己的私人知识库这种来讲解大模型的。

既然已经有了硬件和软件,那么我们也来整一个开胃菜吧,首先,不管怎么样,先得跑起来一个大模型吧,然后和他对对话之类的,也算对大模型的使用有个初步的了解吧,OK,啥也不说了,开始干。

选择模型

在模型的选择上,我们没有选llama这种最流行的,一是它比较大,难以下载,二是不是一般人的电脑都能跑起来的,三是原生的llama不支持中文,还需要找已经完成中文微调的模型。所以,为了简便,我们选择清华大学的ChatGLM2-6B这个模型,顾名思义,他有60亿个参数,用来玩已经足够了。

首先,找到模型所在的位置:

直接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非常好的封装性,我们只需要几行代码就可以完成模型的加载

python 复制代码
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() 经过几秒钟的加载,完成了,完成以后就可以开始推理对话了

推理对话

推理对话也非常简单,两行的事:

python 复制代码
response, history = model.chat(tokenizer, "你好", history=[])
print(response)

其中history是对话历史,每次对话都会返回一个history,可以放到下一次对话中变成整个对话的上下文,避免chatGLM自己跑题了。response就是chatGLM的回复了。 好了,至此大模型已经完成加载完了并且你也可以和他进行对话了,是不是非常简单,其实只要你机器资源够(如果有显卡的话最好,显存至少需要8GB,没有显卡也没关系,只要你的内存足够大,最好32GB以上),那么很轻松就可以加载出来,然后就可以愉快的和他玩耍了。

干点别的?

既然大模型已经加载上了并且可以进行对话了,那么接下来我们就可以根据已有的能力在上面添砖加瓦了,比如:

  • 建立一个web服务器,可以在网页上和他对话了
  • 对接到微信公众号或者钉钉机器人上,就可以在微信上和他聊天了
  • 按照LangChain框架,可以给他加上向量搜索和上下文提示,完成更为强大的功能,甚至通过插件方式让他具备联网能力,就可以回答一些实时的问题了

这里,我用他给我女儿写了一篇暑假作业。。。 总的来说,还行吧,自己再润色润色,修改修改也可以交了,你也可以试试别的,我觉得虽然说没有chatGPT3.5或者chatGPT4那么惊艳,但一般的废话文学也差不多够了,毕竟免费的,还要啥自行车。

尾声

今天通过简单的几行代码,就加载了一个大模型并且还用他为女儿写了个暑假作业,整体感觉非常简单,现在写代码已经完全不像之前了,很多东西前人都帮你搞好了,你只要像搭积木一样搭起来就可以了,这是程序员的幸福还是悲哀呢?


如果你觉得不错,欢迎转发给更多人看到,也欢迎关注我的公众号,主要聊聊搜索,推荐,广告技术,还有瞎扯。。文章会在这里首先发出来:)扫描或者搜索微信号XJJ267或者搜索西加加语言就行

相关推荐
江_小_白44 分钟前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼2 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
2401_857610034 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_4 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
珠海新立电子科技有限公司4 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
码农飞飞5 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货5 小时前
Rust 的简介
开发语言·后端·rust
IT古董5 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦5 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3