本地部署自己的chatglm大模型02——streamlit模型推理可视化

前言

本来不值得写这篇博客,但是运行官方demo时,出现了各种奇奇怪怪的报错,觉着有必要记录下

一、streamlit运行脚本

注意到文件web_demo_streamlit.py,通过streamlit命令能够可视化模型推理过程,运行命令

streamlit run .\basic_demo\web_demo_gradio.py

在这里插入图片描述

二、模型参数

max_length

  • 控制文本最大生成的token数,避免产出过长文本。

top_p

  • 控制输出token在最有可能的top_p范围内。假设top_p = 0.1,模型会依据累计概率,在token池中选择概率最高的10%的token作为预备输出。top_p越大,阈值放得更宽,备选token基数更多,更具多样性;反之阈值收得更窄,备选token基数更少,多样性降低。
  • 举个例子,如果选去吃饭的10家店,按概率顺排:(老乡鸡、胡子大厨、…、杨国福),如果top_p=0.1,那么生成的很有可能就是老乡鸡。为什么说很可能,而不是一定,假设吃饭提议服从先来后到原则,已经选定10家店(胡子大厨、…、杨国福、大米先生),这时再有人提议吃老乡鸡,该店无法再入选了。

temperature

  • 控制输出token本身的概率分布,赋予不同token生成的可能性。区别于top_p根据阈值的大小控制多样性,temperature通过调整概率分布,让一些本不太可能生成的词,也得到了生成的机会,增加了不可预测性。
  • 举个例子,如果永远都是(老乡鸡、胡子大厨、…、杨国福、大米先生)这些店,选择未免太单调,缺乏了随机性和多样性,假如突然有人提议吃路边的煎饼果子,没准大伙真就考虑吃它了。

三、报错解决

问题1

  • TypeError: WebSocketHandler.init() missing 2 required positional arguments: ‘application’ and ‘request’

解决方案

  • 看异常栈,来自tonado库web.py文件中的super().init(),源码中注释掉该行即可。

问题2

  • 官方给的样例在执行第二轮对话就开始报错

解决方案

  • 其实没太搞懂demo无法开箱即用的原因,可能是依赖版本问题。反正代码逻辑比较简单,自己改了改
import os
import streamlit as st
import torch
from transformers import AutoModel, AutoTokenizer

MODEL_PATH = os.environ.get('MODEL_PATH', 'E:/Agi/chatglm-6b')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)

st.set_page_config(
    page_title="ChatGLM3-6B Streamlit Simple Demo",
    page_icon=":robot:",
    layout="wide"
)


@st.cache_resource
def get_model():
    tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)
    # model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto").half().eval()
    model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).half().quantize(bits=4,
                                                                                          device="cuda").cuda().eval()
    return tokenizer, model


# 加载Chatglm3的model和tokenizer
tokenizer, model = get_model()

if "history" not in st.session_state:
    st.session_state.history = []
if "past_key_values" not in st.session_state:
    st.session_state.past_key_values = None

max_length = st.sidebar.slider("max_length", 0, 32768, 8192, step=1)
top_p = st.sidebar.slider("top_p", 0.0, 1.0, 0.8, step=0.01)
temperature = st.sidebar.slider("temperature", 0.0, 1.0, 0.6, step=0.01)

buttonClean = st.sidebar.button("清理会话历史", key="clean")
if buttonClean:
    st.session_state.history = []
    st.session_state.past_key_values = None
    if torch.cuda.is_available():
        torch.cuda.empty_cache()
    st.rerun()

for message in st.session_state.history:
    for i, content in enumerate(message):
        if i == 0:
            with st.chat_message(name="user", avatar="user"):
                st.markdown(content)
        else:
            with st.chat_message(name="assistant", avatar="assistant"):
                st.markdown(content)

with st.chat_message(name="user", avatar="user"):
    input_placeholder = st.empty()
with st.chat_message(name="assistant", avatar="assistant"):
    message_placeholder = st.empty()

prompt_text = st.chat_input("请输入您的问题")
if prompt_text:
    input_placeholder.markdown(prompt_text)
    history = st.session_state.history
    line = ''
    for response, history in model.stream_chat(
            tokenizer,
            prompt_text,
            history,
            max_length=max_length,
            top_p=top_p,
            temperature=temperature,
            return_past_key_values=True,
    ):
        message_placeholder.markdown(response)
        line = response
    st.session_state.history.append((prompt_text, line))
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开源大模型本地化部署是指将开源的大型模型部署到本地环境中,以便在本地进行模型推理和应用开发。这种部署方式可以提供更高的性能和更好的隐私保护,同时也可以避免依赖于云服务的限制和成本。 在进行开源大模型本地化部署时,通常需要以下几个步骤: 1. 模型选择:选择适合自己需求的开源大模型,例如BERT、GPT等。这些模型通常在公开的代码库中可以找到。 2. 模型训练:根据自己的数据集和任务需求,对选择的模型进行训练。这一步需要有一定的机器学习和深度学习知识,并且需要有足够的计算资源。 3. 模型转换:将训练好的模型转换为适合本地部署的格式。通常情况下,需要将模型转换为常见的推理引擎支持的格式,如ONNX、TensorFlow Lite等。 4. 部署环境搭建:搭建本地的部署环境,包括安装相应的推理引擎、依赖库和硬件设备(如GPU)等。这一步需要根据具体的模型部署需求进行配置。 5. 模型部署:将转换好的模型加载到部署环境中,并编写相应的代码进行模型推理。这一步需要根据具体的推理引擎和编程语言进行操作。 6. 性能优化:根据实际需求,对模型进行性能优化,如模型量化、剪枝等技术,以提高模型推理速度和资源利用率。 7. 测试和调优:对部署好的模型进行测试和调优,确保模型在本地环境中的性能和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值