自学内容网 自学内容网

10min本地安装Qwen1.5-0.5B-Chat

大模型系列文章

本地电脑离线部署大模型
配置:MAC-M1-8GB



前言

在人工智能领域,大模型无疑是最炙手可热的话题。之前曾尝试使用阿里云的服务器来部署和学习ChatGLM-6B,并试图在本地电脑上进行部署,但由于内存限制,处理一个问题需要耗费几分钟的时间。在探索了多个开源的大模型后,发现Qwen1.5-0.5B-Chat可以在本地进行部署,尽管其响应速度相对较慢,大约在10秒左右,但已经是一个可行的选择。接下来,计划基于这个本地模型,进一步探索大模型的应用与发展。


一、下载Qwen1.5-0.5B-Chat

git clone https://www.modelscope.cn/qwen/Qwen1.5-0.5B-Chat.git

二、构造函数chatBot.py

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

# 在侧边栏中创建一个标题和一个链接
with st.sidebar:
    st.markdown("## Qwen1.5 LLM")
    "[开源大模型食用指南 self-llm](https://github.com/datawhalechina/self-llm.git)"
    # 创建一个滑块,用于选择最大长度,范围在0到1024之间,默认值为512
    max_length = st.slider("max_length", 0, 1024, 512, step=1)

# 创建一个标题和一个副标题
st.title("💬 Qwen1.5 Chatbot")
st.caption("🚀 A streamlit chatbot powered by Self-LLM")

# 定义模型路径
mode_name_or_path = '/mnt/workspace/20241105/Qwen1.5-0.5B-Chat'

device = "cpu"

# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    # 从预训练的模型中获取tokenizer
    tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, use_fast=False)
    # 从预训练的模型中获取模型,并设置模型参数
    model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16,  device_map="auto").to(device)
  
    return tokenizer, model

# 加载Qwen1.5-4B-Chat的model和tokenizer
tokenizer, model = get_model()

# 如果session_state中没有"messages",则创建一个包含默认消息的列表
if "messages" not in st.session_state:
    st.session_state["messages"] = [{"role": "assistant", "content": "有什么可以帮您的?"}]

# 遍历session_state中的所有消息,并显示在聊天界面上
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

# 如果用户在聊天输入框中输入了内容,则执行以下操作
if prompt := st.chat_input():
    # 将用户的输入添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "user", "content": prompt})
    # 在聊天界面上显示用户的输入
    st.chat_message("user").write(prompt)
    
    # 构建输入     
    input_ids = tokenizer.apply_chat_template(st.session_state.messages,tokenize=False,add_generation_prompt=True)
    #model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')
    #model_inputs = tokenizer([input_ids], return_tensors="pt").to('cpu')
    model_inputs = tokenizer([input_ids], return_tensors="pt").to(device)
    #generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
    generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=256)
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    # 将模型的输出添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "assistant", "content": response})
    # 在聊天界面上显示模型的输出
    st.chat_message("assistant").write(response)


三、启动命令

1、放置脚本

可以把chatBot.py与下载下来的Qwen1.5-0.5B-Chat放置在一个目录下,方便调用
在这里插入图片描述

2、启动命令

streamlit run chatBot.py --server.address 127.0.0.1 --server.port 6006

3、效果图

在这里插入图片描述


原文地址:https://blog.csdn.net/weixin_39797176/article/details/143518284

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!