镜像社区
部署GPU实例
文档中心
常见问题(FAQ)
LLM
BlueLM-7B-WebDemo
BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,参数规模为 70 亿。需要一个4090 GPU来完成运行,这里提供了一个Web端以供使用者二次开发
0/小时
v1.0

BlueLM-7B-Chat WebDemo 部署

快速使用教程

1. 待实例初始化完成后,在控制台-应用中打开”JupyterLab“

2. 进入JupyterLab后,新建一个终端Terminal,输入以下指令

streamlit run /bluelm/compshare-tmp/chatBot.py --server.address 0.0.0.0 --server.port 11434

3. 运行出现如下结果时,即可在浏览器中访问 http://0.0.0.0:11434 ,其中0.0.0.0替换为外网ip,外网ip可以在控制台-基础网络(外)中获取

image

成功进入web界面如下图所示

image

模型介绍

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

模型下载链接见:

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

环境准备

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

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

# 安装软件依赖
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模型,模型路径为/bluelm/compshare-tmp。在 /bluelm/compshare-tmp 下创建download.py文件内容如下:

from modelscope import snapshot_download
model_dir = snapshot_download(vivo-ai/BlueLM-7B-Chat, cache_dir=/bluelm/compshare-tmp, revision=master)

代码准备

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

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig, TextStreamer
import torch
import streamlit as st

# 在侧边栏中创建一个标题和一个链接
with st.sidebar:
    st.markdown(## BlueLM-7B-Chat)
    # 创建一个滑块,用于选择最大长度,范围在0到1024之间,默认值为512
    max_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 = /bluelm/compshare-tmp/vivo-ai/BlueLM-7B-Chat

# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    # 从预训练的模型中获取tokenizer
    tokenizer = 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_id
    model.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 res


class BlueLMStreamer(TextStreamer):
    
    BlueLM流式处理类,用于处理模型的输入输出流。

    参数:
    tokenizer - 用于分词和反分词的tokenizer实例。
    
    def __init__(self, tokenizer: AutoTokenizer):
        self.tokenizer = tokenizer
        self.tokenIds = []
        self.prompt = 
        self.response = 
        self.first = True

    def put(self, value):
        
        添加token id到流中。

        参数:
        value - 要添加的token id        
        if self.first:
            self.first = False
            return
        self.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 = text
        self.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 /bluelm/compshare-tmp/chatBot.py --server.address 0.0.0.0 --server.port 11434

在浏览器打开 http://(外部ip):11434 界面,模型加载,即可使用。

镜像信息
@敢敢のwings
已使用
6
镜像大小50GB
最近编辑2024-11-28
支持卡型
RTX40系48G RTX40系
+2
框架版本
PyTorch-CUDA-12.4
CUDA版本
12.4
应用
JupyterLab: 8888
版本
v1.0
2025-06-23
PyTorch:CUDA-12.4 | CUDA:12.4 | 大小:50.00GB