赞
踩
参考ChatGLM3-6B仓库https://github.com/THUDM/ChatGLM-6B/和仓库https://github.com/datawhalechina/self-llm/blob/master,这里使用的是autodl平台的3090(24G)的显卡机器,镜像选择Pytorch->2.0.0->3.8(ubuntu20.04)->11.8
。
创建一个独立的环境,AutoDL不支持conda activate
conda create -n chatglm3-6b python=3.8
source activate chatglm3-6b
pip换源和安装依赖包
# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install fastapi==0.104.1
pip install uvicorn==0.24.0.post1
pip install requests==2.25.1
pip install modelscope==1.9.5
pip install transformers==4.37.2
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1
使用 modelscope
中的snapshot_download
函数下载模型,第一个参数为模型名称,参数cache_dir
为模型的下载路径。
在 /root/autodl-tmp
路径下新建 download.py
文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/autodl-tmp/download.py
执行下载,模型大小为 14 GB,下载模型大概需要 10~20 分钟
import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('ZhipuAI/chatglm3-6b', cache_dir='/root/autodl-tmp', revision='master')
client_demo.py
import os # 导入os模块,用于操作系统功能 import platform # 导入platform模块,用于获取操作系统信息 from transformers import AutoTokenizer, AutoModel # 从transformer导入AutoTokenizer和AutoModel类 # 初始化分词器tokenizer和模型,将其放到GPU上运行,使用半精度浮点数减少内存使用 tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/ZhipuAI/chatglm3-6b", trust_remote_code=True) model = AutoModel.from_pretrained("/root/autodl-tmp/ZhipuAI/chatglm3-6b", trust_remote_code=True).half().cuda() model = model.eval() # 设置模型评估模式 os_name = platform.system() # 获取当前操作系统的名称 clear_command = 'cls' if os_name == 'Windows' else 'clear' # 根据操作系系统设置清屏命令,Windows使用cls,其他使用clear def build_prompt(history): # 定义一个函数,用于构建聊天的提示信息 prompt = "欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序" for item in history: if item['role'] == 'user': query = item['content'] prompt += f"\n\n用户:{query}" elif item['role'] == 'assistant': response = item['content'] prompt += f"\n\nChatGLM-6B:{response}" return prompt def main(): # 定义主函数 history = [] # 初始化对话历史列表 while True: query = input("\n用户:") # 用户输入文本,如果输入stop则退出循环,如果输入clear则清空对话历史 if query == "stop": break if query == "clear": history = [] os.system(clear_command) print("欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序") continue count = 0 for response, history in model.stream_chat(tokenizer, query, history=history): # 调用模型的stream_chat方法,进行流式输出 count += 1 if count % 8 == 0: # 每8次输出后清屏并打印当前的对话历史 os.system(clear_command) print(build_prompt(history), flush=True) os.system(clear_command) # 在一轮对话结束后清屏 print(build_prompt(history), flush=True) # 打印最终的对话历史 if __name__ == "__main__": main()
直接python client_demo.py
运行结果如下:
欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序
用户:你好
ChatGLM-6B:你好声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1019907
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。