当前位置: 首页 > news >正文

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署

模型介绍

BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果,对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7B 模型的 Base 和 Chat 两个版本。

模型下载链接见:

基座模型对齐模型
🤗 BlueLM-7B-Base🤗 BlueLM-7B-Chat
🤗 BlueLM-7B-Base-32K🤗 BlueLM-7B-Chat-32K
🤗 BlueLM-7B-Chat-4bits

环境准备

在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch–>1.11.0–>3.8(ubuntu20.04)–>11.3,Cuda版本在11.3以上都可以。

在这里插入图片描述

接下来打开刚刚租用服务器的 JupyterLab(也可以使用vscode ssh远程连接服务器),并且打开其中的终端开始环境配置、模型下载和运行 demo。

pip 换源加速下载并安装依赖包

# 升级pip
python -m pip install --upgrade pip
# 设置pip镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装软件依赖
pip install modelscope==1.11.0
pip install transformers==4.37.0
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1
pip install transformers_stream_generator==0.0.4

模型下载

使用Modelscope API 下载BlueLM-7B-Chat模型,模型路径为/root/autodl-tmp。在 /root/autodl-tmp 下创建model_download.py文件内容如下:

from modelscope import snapshot_download
model_dir = snapshot_download("vivo-ai/BlueLM-7B-Chat", cache_dir='/root/autodl-tmp', revision="master")

代码准备

/root/autodl-tmp路径下新建 chatBot.py 文件并在其中输入以下内容:

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig, TextStreamer
import torch
import streamlit as st# 在侧边栏中创建一个标题和一个链接
with st.sidebar:st.markdown("## BlueLM-7B-Chat")"[开源大模型食用指南 self-llm](https://github.com/datawhalechina/self-llm.git)"# 创建一个滑块,用于选择最大长度,范围在0到1024之间,默认值为512max_length = st.slider("max_length", 0, 1024, 512, step=1)# 创建一个标题和一个副标题
st.title("💬 BlueLM Chatbot")
st.caption("🚀 A streamlit chatbot powered by Self-LLM")# 定义模型路径
mode_name_or_path = '/root/autodl-tvivo-ai/BlueLM-7B-Chat'# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():# 从预训练的模型中获取tokenizertokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True)# 从预训练的模型中获取模型,并设置模型参数model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, trust_remote_code=True,torch_dtype=torch.bfloat16,  device_map="auto")# 从预训练的模型中获取生成配置model.generation_config = GenerationConfig.from_pretrained(mode_name_or_path)# 设置生成配置的pad_token_id为生成配置的eos_token_idmodel.generation_config.pad_token_id = model.generation_config.eos_token_id# 设置模型为评估模式model.eval()  return tokenizer, model# 加载BlueLM的model和tokenizer
tokenizer, model = get_model()def build_prompt(messages, prompt):"""构建会话提示信息。参数:messages - 包含会话历史的元组列表,每个元组是(用户查询,AI响应)。prompt - 当前用户输入的文本。返回值:res - 构建好的包含会话历史和当前用户提示的字符串。"""res = ""# 遍历历史消息,构建会话历史字符串for query, response in messages:res += f"[|Human|]:{query}[|AI|]:{response}</s>"# 添加当前用户提示res += f"[|Human|]:{prompt}[|AI|]:"return resclass BlueLMStreamer(TextStreamer):"""BlueLM流式处理类,用于处理模型的输入输出流。参数:tokenizer - 用于分词和反分词的tokenizer实例。"""def __init__(self, tokenizer: "AutoTokenizer"):self.tokenizer = tokenizerself.tokenIds = []self.prompt = ""self.response = ""self.first = Truedef put(self, value):"""添加token id到流中。参数:value - 要添加的token id。"""if self.first:self.first = Falsereturnself.tokenIds.append(value.item())# 将token ids解码为文本text = tokenizer.decode(self.tokenIds, skip_special_tokens=True)def end(self):"""结束流处理,将当前流中的文本作为响应,并重置流状态。"""self.first = True# 将token ids解码为文本text = tokenizer.decode(self.tokenIds, skip_special_tokens=True)self.response = textself.tokenIds = []# 初始化session状态,如果messages不存在则初始化为空,并添加欢迎信息
if "messages" not in st.session_state:st.session_state.messages = []st.session_state.messages.append(("", "你好,有什么可以帮助你吗?"))# 遍历并显示历史消息
for msg in st.session_state.messages:st.chat_message("assistant").write(msg[1])# 处理用户输入
if prompt_text := st.chat_input():prompt_text = prompt_text.strip()st.chat_message("user").write(prompt_text)messages = st.session_state.messages# 使用BlueLMStreamer处理流式模型输入streamer = BlueLMStreamer(tokenizer=tokenizer)# 构建当前会话的提示信息prompt = build_prompt(messages=messages, prompt=prompt_text)# 将提示信息编码为模型输入inputs_tensor = tokenizer(prompt, return_tensors="pt")inputs_tensor = inputs_tensor.to("cuda:0")input_ids = inputs_tensor["input_ids"]# 通过模型生成响应outputs = model.generate(input_ids=input_ids, max_new_tokens=max_length, streamer=streamer)# 将模型的响应显示给用户st.chat_message("assistant").write(streamer.response)# 更新会话历史st.session_state.messages.append((prompt_text, streamer.response))

运行 demo

在终端中运行以下命令,启动streamlit服务,并按照 autodl 的指示将端口映射到本地,然后在浏览器中打开链接 http://localhost:6006/ ,即可看到聊天界面。

streamlit run /root/autodl-tmp/chatBot.py --server.address 127.0.0.1 --server.port 6006

如下所示:

在这里插入图片描述

http://www.lryc.cn/news/338207.html

相关文章:

  • 一文了解ERC404协议
  • iOS cocoapods pod FrozenError and RuntimeError
  • 【鸿蒙开发】第二十章 Camera相机服务
  • JS阅读笔记
  • 基于spring boot的留守儿童爱心管理系统
  • python输入某年某月某日判断这一天是这一年的第几天
  • docker 上达梦导入dump文件报错:本地编码:PG GBK,导入女件编码:PGGB18030
  • 一起学习python——基础篇(19)
  • 数模 初见数建
  • windows系统搭建OCR半自动标注工具PaddleOCR
  • 01、ArcGIS For JavaScript 4.29对3DTiles数据的支持
  • Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..
  • 2023数据要素白皮书(免费下载)
  • kafka学习记录
  • 无线网络2.4和5G的区别
  • 大模型笔记:Prompt tuning
  • 【Ambari】Ansible自动化部署大数据集群
  • RTSP/Onvif视频安防监控平台EasyNVR调用接口返回匿名用户名和密码的原因排查
  • opencv基础图行展示
  • GIF在线生成器
  • 使用JavaScript制作一个简单的天气应用
  • 说说对WebSocket的理解?应用场景?
  • 网路维护基础知识
  • 【GD32】MQ-3酒精检测传感器
  • 如何在极狐GitLab 启用依赖代理功能
  • ES6中 Promise的详细讲解
  • 网站建设也会涉及商标侵权,需要注意些!
  • Leetcode算法训练日记 | day25
  • 第23次修改了可删除可持久保存的前端html备忘录:增加了百度引擎
  • vue3中使用antv-S2表格(基础功能版)