当前位置:   article > 正文

ChatGLM3-6B部署_chatglm3-6b修改流式输出

chatglm3-6b修改流式输出

参考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
  • 1
  • 2

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用 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')
  • 1
  • 2
  • 3
  • 4

Python Client端

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

直接python client_demo.py运行结果如下:

欢迎使用 ChatGLM-6B 模型,输入内容即可进行对话,clear 清空对话历史,stop 终止程序

用户:你好

ChatGLM-6B:你好
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1019907
推荐阅读
相关标签