一、简介:
本次实验,基于MindNLP和ChatGLM6B模型搭建一个小的聊天应用,ChatGLM6B 是基于 GLM-4 模型开发的开源对话机器人,拥有 62 亿个参数,能够进行自然流畅的语言交流。在对话中,ChatGLM6B 可以胜任文案写作、代码调试等任务,还能够根据用户需求进行角色扮演,满足用户在虚拟场景中的互动需求。同时,ChatGLM6B 也具备多模态理解能力,可以解析图片、视频等多种类型的信息,进一步拓展了其在实际应用中的场景。
二、环境准备:
首先还是需要下载MindSpore和MindNLP两个基础包。下载MindSpore可以参考昇思25天学习打卡营第1天|快速入门-CSDN博客,mindnlp直接使用pip命令下载即可,并进行网络配置:
# 配置网络环境以方便拉取huggingface的模型
export HF_ENDPOINT=https://hf-mirror.com
三、具体实践:
使用mindnlp库加载"ChatGLM-6B"的预训练序列到序列语言模型和相应的分词器,并使用半精度浮点数来减少内存使用。通过设置模型为评估模式,代码为使用gradio创建Web界面进行文本生成任务做好了准备,同mdtex2html时间库可用于处理和显示生成的文本
from mindnlp.transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import gradio as gr
import mdtex2htmlmodel = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
model.set_train(False)
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")
下载完权重就可以和ChatGLM6B聊天了(doge):
prompt = '你好'
history = []
response, _ = model.chat(tokenizer, prompt, history=history, max_length=20)
print(response)
如果想和ChatGLM6B展开多轮对话,可以使用下面的代码:
prompt = '你好'
history = []print("输入'exit'结束对话。")while True:# 生成回应response, _ = model.chat(tokenizer, prompt, history=history, max_length=200)print(response)print("输入'exit'结束对话。")# 更新对话历史history.append((prompt, response))# 获取用户下一轮的输入prompt = input("用户: ")if prompt.lower() == "exit":print("结束对话")break# 清除历史中的"exit",以避免影响模型生成回应if prompt.lower() == "exit":history.pop()
就是有点慢,大家最好用好一点的显卡(狗头)