AIGC实践-基于Llama3.1实现私有化部署的Chatbot
一、大模型(LLM)简介
大模型(LLM)狭义上指的是基于深度学习算法训练的自然语言处理(NLP)模型,广泛应用于自然语言理解和生成等领域;广义上还包括机器视觉(CV)大模型、多模态大模型和科学计算大模型等。近年来,随着百模大战的开启,各类开源 LLM 层出不穷,用户可以在开源模型的基础上定制化、私域化自己的大模型应用。
目前,国内外涌现了许多优秀的开源 LLM。例如:
- 国外开源模型:LLaMA、Alpaca、Falcon
- 国内开源模型:ChatGLM、BaiChuan、InternLM(书生·浦语)
这些开源 LLM 支持本地部署与私域微调,用户可以快速打造属于自己的智能应用。
二、Llama 3.1 模型介绍
2024 年 7 月 23 日,Meta 发布了迄今为止最强大的开源模型 Llama 3.1。此次发布的 Llama 3.1 版本包括:
- Llama 3.1 405B:支持上下文长度为 128K Tokens,是 Meta 史上规模最大的一次训练模型,使用了超过 1.6 万个 H100 GPU 训练。
- Llama 3.1 70B 和 8B:针对不同应用场景进行了优化。
由于资源限制,本次实践选择部署 Llama 3.1 的 8B 版本,该版本至少需要 16GB 显存。
本次实践环境为:
- 操作系统:Ubuntu 22.04
- Python 版本:3.12
- CUDA 版本:12.1
- PyTorch 版本:2.4.0
三、部署 Llama 3.1
1. 安装依赖
安装 Llama 3.1 部署所需的 Python 库:
pip install langchain==0.1.15
pip install streamlit==1.36.0
pip install transformers==4.44.0
pip install accelerate==0.32.1
2. 下载模型
下载 Llama-3.1-8B-Instruct 模型:
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
tar -xf Llama-3.1-8B-Instruct.tar
四、Chatbot 项目开发
1. 编写Web聊天机器人代码
创建 llamaBot.py
文件,实现一个简单的 Web 聊天机器人:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st
# 创建标题和副标题
st.title("💬 LLaMA3.1 Chatbot")
st.caption("🚀 A Streamlit chatbot powered by Llama 3.1")
# 模型路径
model_path = '/root/workspace/Llama-3.1-8B-Instruct'
# 获取模型和 tokenizer
@st.cache_resource
def load_model():
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16).cuda()
return tokenizer, model
tokenizer, model = load_model()
# 初始化会话状态
if "messages" not in st.session_state:
st.session_state["messages"] = []
# 显示历史消息
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(prompt, return_tensors="pt").input_ids.to('cuda')
output = model.generate(input_ids, max_new_tokens=512)
response = tokenizer.decode(output[0], skip_special_tokens=True)
st.session_state.messages.append({"role": "assistant", "content": response})
st.chat_message("assistant").write(response)
2. 运行 Streamlit 服务
在终端中启动 Web 服务:
streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 1024
五、效果展示
访问1024的端口链接,可见 Llama 3.1 Chatbot 的交互界面,用户可以直接输入问题,与 Chatbot 进行对话。
示例对话:
用户:请简述 Llama 3.1 的主要特性。
Chatbot:Llama 3.1 是 Meta 发布的最新开源模型,包含 405B、70B 和 8B 三个版本,支持 128K 上下文长度,具备更强的理解和生成能力。
六、总结
通过此次实践,我们成功部署了 Llama 3.1 8B 版本,构建了一个基于 Streamlit 的 Chatbot 应用。此次实践验证了 Llama 3.1 的性能与灵活性,展示了开源 LLM 在实际应用中的落地潜力。未来可以尝试微调模型,实现更高质量的对话效果,满足特定领域的需求。
- 点赞
- 收藏
- 关注作者
评论(0)