网站域名space,广东省建设工程协会网站,百度一下百度网站,国内移动端网站做的最好的BlueLM-7B-Chat WebDemo 部署
模型介绍
BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型#xff0c;参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果#xff0c;对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…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.3Cuda版本在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 modelscope1.11.0
pip install transformers4.37.0
pip install streamlit1.24.0
pip install sentencepiece0.1.99
pip install accelerate0.24.1
pip install transformers_stream_generator0.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, revisionmaster)代码准备
在/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, step1)# 创建一个标题和一个副标题
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_codeTrue)# 从预训练的模型中获取模型并设置模型参数model AutoModelForCausalLM.from_pretrained(mode_name_or_path, trust_remote_codeTrue,torch_dtypetorch.bfloat16, device_mapauto)# 从预训练的模型中获取生成配置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_tokensTrue)def end(self):结束流处理将当前流中的文本作为响应并重置流状态。self.first True# 将token ids解码为文本text tokenizer.decode(self.tokenIds, skip_special_tokensTrue)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(tokenizertokenizer)# 构建当前会话的提示信息prompt build_prompt(messagesmessages, promptprompt_text)# 将提示信息编码为模型输入inputs_tensor tokenizer(prompt, return_tensorspt)inputs_tensor inputs_tensor.to(cuda:0)input_ids inputs_tensor[input_ids]# 通过模型生成响应outputs model.generate(input_idsinput_ids, max_new_tokensmax_length, streamerstreamer)# 将模型的响应显示给用户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如下所示