环境准备
1 2 3 4 5 6
| ---------------- ubuntu 22.04 python 3.12 cuda 12.1 pytorch 2.3.0 ----------------
|
本文默认学习者已安装好以上 Pytorch(cuda) 环境,如未安装请自行安装。
pip 换源加速下载并安装依赖包
1 2 3 4 5 6 7 8 9
| # 升级 pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope==1.18.0 pip install streamlit==1.37.0 pip install transformers==4.44.2 pip install accelerate==0.34.2
|
考虑到部分同学配置环境可能会遇到一些问题,我们在 AutoDL 平台准备了 Qwen2.5 的环境镜像,点击下方链接并直接创建 Autodl 示例即可。
https://www.codewithgpu.com/i/datawhalechina/self-llm/Qwen2.5-self-llm
模型下载
使用 modelscope 中的 snapshot_download 函数下载模型,第一个参数为模型名称,参数 cache_dir 为模型的下载路径。
在 /root/autodl-tmp 路径下新建 download.py 新建 model_download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件。并运行 python /root/autodl-tmp/model_download.py 执行下载,模型大小为 15 GB,下载模型需要一些时间。
1 2 3 4 5
| import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os
model_dir = snapshot_download('qwen/Qwen2.5-7B-Instruct', cache_dir='/root/autodl-tmp', revision='master')
|
注意:记得修改 cache_dir 为你的模型下载路径哦~
代码准备
在/root/autodl-tmp路径下新建 chatBot.py 文件并在其中输入以下内容,粘贴代码后记得保存文件。下面的代码有很详细的注释,大家如有不理解的地方,欢迎提出 issue。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| from transformers import AutoTokenizer, AutoModelForCausalLM import torch import streamlit as st
with st.sidebar: st.markdown("## Qwen2.5 LLM") "[开源大模型食用指南 self-llm](https://github.com/datawhalechina/self-llm.git)" max_length = st.slider("max_length", 0, 8192, 512, step=1)
st.title("💬 Qwen2.5 Chatbot") st.caption("🚀 A streamlit chatbot powered by Self-LLM")
mode_name_or_path = '/root/autodl-tmp/qwen/Qwen2___5-7B-Instruct'
@st.cache_resource def get_model(): tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True) tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16, device_map="auto")
return tokenizer, model
tokenizer, model = get_model()
if "messages" not in st.session_state: st.session_state["messages"] = [{"role": "assistant", "content": "有什么可以帮您的?"}]
for msg in st.session_state.messages: st.chat_message(msg["role"]).write(msg["content"])
if prompt := st.chat_input():
st.chat_message("user").write(prompt)
st.session_state.messages.append({"role": "user", "content": 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') generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=max_length) 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]
st.session_state.messages.append({"role": "assistant", "content": response}) st.chat_message("assistant").write(response)
|
运行 demo
在终端中运行以下命令,启动 streamlit 服务,server.port 可以更换端口
1
| streamlit run /root/autodl-tmp/chatBot.py --server.address 127.0.0.1 --server.port 6006
|
在本地浏览器中打开链接 http://localhost:6006/ ,即可查看部署的 WebDemo 聊天界面。运行效果如下:
