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

大模型-qwen1.5-本地部署

参照

https://www.modelscope.cn

https://www.modelscope.cn/models/Qwen/Qwen1.5-0.5B-Chat

https://blog.csdn.net/weixin_39797176/article/details/143518284?fromshare=blogdetail&sharetype=blogdetail&sharerId=143518284&sharerefer=PC

Qwen1.5-0.5B-Chat:大模型

前置要求

transformers:自然语言处理

pytorch:机器学习和深度学习框架

TensorFlow:机器学习平台

streamlit:python应用开发库

环境要求

硬件环境

在macos上,安装virtualbox,并新建虚拟机,配置1cpu、8g内存、60g硬盘。

软件环境

包括:python3、pip

ubuntu22 server内置python3,如下所示

pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py --user

将/root/.local/bin加入到PATH环境变量

按照以上设置,PATH环境变量设置错误(path等号之后,不允许有空格),导致无法执行vi、ls等常见命令。临时更改环境变量,执行vi .profile修改。

安装transformers、torch包

pip install transformers torch -i https://pypi.tuna.tsinghua.edu.cn/simple

安装streamlit包

pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple

部署模型

下载模型、构造函数、启动测试

下载模型

打开模型文件

https://www.modelscope.cn/models/Qwen/Qwen1.5-0.5B-Chat/files

pip install modelscope

pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

modelscope download --model Qwen/Qwen1.5-0.5B-Chat

默认下载路径:~/.cache/modelscope/hub/models/Qwen

构造函数

构造函数代码如下

modelscope默认下载模型位置如下,照此调整构造函数中模型路径

构造函数最好放入此路径,与模型根文件夹在同一文件夹下,否则肯能无法启动

代码

# 导入所需的库

from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

import torch

import streamlit as st

import os

torch.classes.__path__ = [os.path.join(torch.__path__[0], torch.classes.__file__)]

# 在侧边栏中创建一个标题和一个链接

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 = '~/.cache/modelscope/hub/models/Qwen/Qwen1.5-0.5B-Chat'

mode_name_or_path = './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)

启动测试

启动

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

加入图表

引入依赖包

pandas、numpy

pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

代码处理

聊天界面追加图形,代码调整如下

显示效果如下

问题处理

问题一

报错如下所示

按照提示执行

pip install 'accelerate>=0.26.0'

问题二

pip install --upgrade jinja2 -i https://pypi.tuna.tsinghua.edu.cn/simple

问题三

浏览器打开连接时,服务器控制台会有如下报错,但还可以在浏览器进行交互问答。

第一个错误是

Sliding Window Attention is enabled but not implemented for `sdpa`; unexpected results may be encountered.

出现该警告的原因在于模型启用了滑动窗口注意力(Sliding Window Attention),但当前使用的PyTorchsdpa(Scaled Dot Product Attention)实现尚未支持该功能,可能导致注意力计算不符合预期。

可以通过指定attn_implementation参数,例如

若GPU支持(如Ampere架构及以上),安装flash-attn并指定使用Flash Attention 2:

pip install flash-attn -i https://pypi.tuna.tsinghua.edu.cn/simple

报错无法安装,没有英伟达显卡、CUDA。仍未解决。

第二个错误是冲突

在streamlit应用中,使用torch报了错误:Tried to instantiate class '__path__._path', but it does not exist! Ensure that it is registered via torch::class_

则是二者冲突所致

可在代码中添加

相关文章:

  • 针对Docker配置常用镜像加速器站点
  • YOLO脚本合集
  • 基于SIMP算法的材料结构拓扑优化matlab仿真
  • 【32期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股融资融券历史走势股数据及接口API说明文档
  • Pseduo LiDAR(CVPR2019)
  • 【玩泰山派】2、制作buildroot镜像,并烧录
  • SQL Server 数据库实验报告
  • CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发
  • 虚拟机第十三章-垃圾回收
  • 大咖访谈:Ftrans飞驰云联王泽瑞:安全即效率:数据交换新范式
  • 嵌入式Linux驱动开发基础知识(三)
  • Vue的学习总结-day01
  • 3.字节输出流FileOutputStream写出数据的三种方式
  • (C语言)单链表(1.0)(单链表教程)(数据结构,指针)
  • Python爬虫教程007:scrapy结合实际案例的简单使用
  • 深入讲解:智能合约中的读写方法
  • NumPy性能调优实战:从调试到性能分析的完整指南
  • Linux进阶——shell脚本语言
  • Bash详解
  • 轻量化大模型微调工具XTuner指令微调实战(下篇)
  • 泉州网站建设推广服务/重庆人力资源和社会保障网
  • 带数据库的网页怎么制作/网站seo思路
  • 织梦大气金融类通用企业网站模板/企业seo如何优化
  • 自己做国际网站/夸克浏览器网页版入口
  • 枣阳网站建设等服务/企业新网站seo推广
  • 微信二维码网站制作/可免费投放广告的平台