丹摩征文活动|AIGC实践-基于丹摩算力和Llama3.1实现私有化部署的Chatbot
本文介绍了如何利用丹摩算力平台和 Llama 3.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. 创建丹摩实例
丹摩(Damo)提供了便捷的环境配置与高性能计算资源支持,非常适合部署大型语言模型和视频生成模型。
首先,我们登录丹摩官网,创建新实例。
由于 CogVideoX 在 FP-16 精度下的推理至少需 18GB 显存,微调则需要 40GB 显存,我们这里需要选择大于 40GB 显存的实例。
硬盘选择默认的 100GB 系统盘和 50GB 数据盘。
镜像选择 PyTorch2.3.0、Ubuntu-22.04,CUDA12.1 镜像。
创建密钥对。
选择我们刚刚创建的密钥对。
配置选择完成后,点击立即创建。创建后如图:
点击操作里的JupyterLab,进入JupyterLab的页面。平台已预置了调试好的代码库,开箱即用。
点击Terminal,进入终端页面。
2. 安装依赖
安装 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
3. 下载模型
使用丹摩平台的内网高速下载 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
需注意:
- 访问地址:务必使用
0.0.0.0
,以便通过浏览器访问实例。 - 端口映射:通过丹摩平台的访问控制,将内部端口映射至公网。
3. 添加端口映射
进入 GPU 云实例页面,选择操作 -> 更多 -> 访问控制,添加 Streamlit 服务端口,映射成功后即可通过访问链接打开 Chatbot 界面。
五、效果展示
访问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)