大模型系列文章
本地电脑离线部署大模型
配置:MAC-M1-8GB
10min本地安装Qwen1.5-0.5B-Chat
- 大模型系列文章
- 前言
- 一、下载Qwen1.5-0.5B-Chat
- 二、构造函数chatBot.py
- 三、启动命令
- 1、放置脚本
- 2、启动命令
- 3、效果图
前言
在人工智能领域,大模型无疑是最炙手可热的话题。之前曾尝试使用阿里云的服务器来部署和学习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之间,默认值为512max_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():# 从预训练的模型中获取tokenizertokenizer = 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