AIGC实践-基于Llama3.1实现私有化部署的Chatbot

举报
Damon小智 发表于 2024/11/29 23:30:20 2024/11/29
【摘要】 本文介绍了如何利用 Llama 3.1 开源模型打造属于自己的 Chatbot。通过选择 Llama 3.1 的 8B 版本,在 Ubuntu 环境中配置 GPU 云实例,安装所需依赖,下载预制模型,并使用 Streamlit 构建 Web 应用,实现了一个功能完善的智能对话机器人,展示了开源大模型在实际应用中的强大潜力与灵活部署能力。

一、大模型(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

image.png

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

image.png


四、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)

image.png

2. 运行 Streamlit 服务

在终端中启动 Web 服务:

streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 1024

image.png


五、效果展示

访问1024的端口链接,可见 Llama 3.1 Chatbot 的交互界面,用户可以直接输入问题,与 Chatbot 进行对话。

示例对话:

用户:请简述 Llama 3.1 的主要特性。
Chatbot:Llama 3.1 是 Meta 发布的最新开源模型,包含 405B、70B 和 8B 三个版本,支持 128K 上下文长度,具备更强的理解和生成能力。

image.png


六、总结

通过此次实践,我们成功部署了 Llama 3.1 8B 版本,构建了一个基于 Streamlit 的 Chatbot 应用。此次实践验证了 Llama 3.1 的性能与灵活性,展示了开源 LLM 在实际应用中的落地潜力。未来可以尝试微调模型,实现更高质量的对话效果,满足特定领域的需求。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。