通过简单的代码领略一下ChatGLM3大模型
需要读者注意的是,即使问题是一样的,但是每一次运行代码得到的回答也有可能是不一样的,因为我们所使用的ChatGLM是生成式模型,前面的生成直接影响了后面的生成,而这点也是生成模型相对于一般模型不同的地方,前面的结果有了波动,后面就会发生很大的变化,会有一个滚雪球效应。另外,我们采用的CPU版本的ChatGLM3推演,可以看到此时的耗时较长,因此推荐读者尽量采用GPU版本的模型进行后续的学习。其开源
ChatGLM系列是智谱AI发布的一系列大语言模型,因为其优秀的性能和良好的开源协议,在国产大模型和全球大模型领域都有很高的知名度。其开源的第三代基座大语言模型ChatGLM3-6B,模型的性能较前一代大幅提升,可以认为是最强的中文基础大模型!
本文通过一个简单的代码示例,领略一下ChatGLM3大模型的魅力。我们首先完成CPU版本的ChatGLM3的推演。由于采用CPU进行推演,在自动下载完模型参数后,推演的耗时较长,这一点请读者注意。
在运行本示例代码之前,先安装一下PyTorch框架和魔塔社区(modelscope)的模型库,之后就可以在代码中直接下载和使用完整的ChatGLM3。
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cpu
pip install modelscope
示例代码如下:
import torch
#安装“魔塔社区(modelscope)”的模型库之后,可以直接下载和使用完整的ChatGLM3
# pip install modelscope
from modelscope import AutoTokenizer, AutoModel, snapshot_download
model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "v1.0.0")
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
with torch.no_grad():
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True) .cpu().float()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
由于第一次调用需要从网上直接下载对应的权重文件,这个权重文件比较大,因此读者需要根据自身的网络带宽情况等待文件下载结束。
从下面结果看,可以看到此时的下载较繁琐,权重文件被分成了7个部分依次下载,之后将其进行系统合并。
C:\Users\xiayu\miniconda3\python.exe C:\Users\xiayu\PycharmProjects\ChatGLM3大模型-源码\第2章\2.3.2.py
2024-05-10 10:45:55,082 - modelscope - INFO - PyTorch version 2.0.1+cu118 Found.
2024-05-10 10:45:55,084 - modelscope - INFO - Loading ast index from C:\Users\xiayu\.cache\modelscope\ast_indexer
2024-05-10 10:45:55,184 - modelscope - INFO - Loading done! Current index file version is 1.12.0, with md5 3fab013bafe9f8f82a926343eb29728c and a total number of 964 components indexed
2024-05-10 10:45:56,173 - modelscope - INFO - Use user-specified model revision: v1.0.0
Loading checkpoint shards: 100%|██████████| 7/7 [00:12<00:00, 1.76s/it]
如果有报错,可以等待1分钟后重新连接,再进行下载。全部下载完成后,ChatGLM3自动进入运行模型,在代码中可以设置需要让模型回答的普通问题,上述代码段中的结果回答如图2-25所示。注意:返回回答结果时间会长一点,请读者耐心等待一下。
图2-25 ChatGLM的回答示例
请读者自行运行代码验证。需要读者注意的是,即使问题是一样的,但是每一次运行代码得到的回答也有可能是不一样的,因为我们所使用的ChatGLM是生成式模型,前面的生成直接影响了后面的生成,而这点也是生成模型相对于一般模型不同的地方,前面的结果有了波动,后面就会发生很大的变化,会有一个滚雪球效应。另外,我们采用的CPU版本的ChatGLM3推演,可以看到此时的耗时较长,因此推荐读者尽量采用GPU版本的模型进行后续的学习。
本文节选自《ChatGLM3大模型本地化部署、应用开发与微调》,获出版社和作者授权发布。
更多推荐
所有评论(0)