LLaMA 3.1 模型本地部署与 Streamlit 聊天机器人实战
前言
LLaMA 3.1 是 Meta(Facebook 母公司)发布的系列大语言模型之一,属于 LLaMA(Large Language Model Meta AI)模型系列。该模型的目标是通过更高效的设计在保持性能的前提下,显著降低计算和资源需求。作为最新版本,它继承了前代的技术优势,并在架构、训练数据和推理能力上进行了改进。
LLaMA 3.1 的特点
LLaMA 3.1 主要具备以下四个特点:
- 规模较大且高效:参数量相比前代有所增加,但设计注重效率,能在较少资源下达到与更大模型相似的性能水平。
- 更多的训练数据:通过更广泛、丰富的语料库训练,覆盖更多领域信息,提升了回答问题、生成内容及自然语言理解的能力。
- 优化的推理性能:优化了推理算法和模型架构,减少了推理时间,提高了响应速度。
- 开源方式:继续采用开源模式,研究人员和开发人员可在此基础上进行进一步研究和开发,推动社区共同进步。
LLaMA 3.1 的优势
相较于 OpenAI 的 GPT 系列或 Google 的 PaLM 系列,LLaMA 系列模型的优势在于其高效性。它在保持较高的生成能力和理解能力的同时,资源消耗更低。通过对模型结构的精简和训练数据的多样化,LLaMA 3.1 在许多任务上能够提供接近甚至超过主流模型的性能。
部署流程
准备 GPU 环境
首先需要在云端或本地准备好 GPU 实例。登录控制台后,选择 GPU 云实例并创建。
- 付费类型:建议选择按量付费,根据需求选择配置(例如 NVIDIA L40S)。
- 硬件配置:GPU 和数据硬盘通常使用默认配置即可满足运行需求。
- 镜像框架:选择 PyTorch 版本(如 2.4.0),设置密钥对后点击立即创建。
- 启动实例:等待实例状态变为'运行中'即表示创建成功。
登录与初始化
通过 JupyterLab 或 SSH 登录实例终端。确保环境中已安装 conda 用于管理 Python 环境。
如果首次使用 conda,需要先进行初始化:
conda init
执行完成后重新打开终端,然后创建新的虚拟环境:
conda create -n llama3 python=3.12
激活环境:
conda activate llama3
安装依赖与模型
安装 LLaMA 3.1 运行所需的依赖包。建议使用 pip 指定版本以确保兼容性:
pip install langchain==0.1.15
pip install streamlit==1.36.0
pip install transformers==4.44.0
pip install accelerate==0.32.1
接下来下载模型文件。这里以内网下载为例,实际使用时请替换为 HuggingFace 或其他官方源地址:
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
解压模型文件:
tar -xf Llama-3.1-8B-Instruct.tar
构建聊天机器人
模型下载完成后,新建 llamaBot.py 文件,编写 Streamlit 交互代码。这段代码负责加载模型、处理对话历史并展示界面。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st
# 创建一个标题和一个副标题
st.title("💬 LLaMA3.1 Chatbot")
st.caption("🚀 A streamlit chatbot powered by Self-LLM")
# 定义模型路径
mode_name_or_path = '/root/workspace/Llama-3.1-8B-Instruct'
# 定义一个函数,用于获取模型和 tokenizer
@st.cache_resource
def get_model():
# 从预训练的模型中获取 tokenizer
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
).cuda()
return tokenizer, model
# 加载 LLaMA3 的 model 和 tokenizer
tokenizer, model = get_model()
# 如果 session_state 中没有"messages",则创建一个包含默认消息的列表
if "messages" not in st.session_state:
st.session_state["messages"] = []
# 遍历 session_state 中的所有消息,并显示在聊天界面上
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)
# 将用户输入添加到 session_state 中的 messages 列表中
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=512)
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)
print(st.session_state)
启动服务
在终端中运行以下命令启动 Streamlit 服务。注意 server.address 设置为 0.0.0.0 以允许外部访问,端口可根据实际情况调整:
streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 8501
配置好网络端口映射后,通过公网 IP 和端口访问链接即可打开 LLaMA 3.1 Chatbot 交互界面,开始与机器人对话。
总结
本文记录了 LLaMA 3.1 模型的特点、优势以及在 GPU 环境下的部署流程。LLaMA 3.1 是 Meta 发布的最新大语言模型,具有高效的计算设计和优异的推理性能。其主要优势在于相较于其他主流模型,在消耗较少资源的情况下依然能够提供强大的生成和理解能力。
文章详细描述了如何通过 GPU 实例部署 LLaMA 3.1 的步骤,从创建实例、配置环境(使用 conda 管理 Python 环境),到安装必要的依赖和下载模型文件。最后展示了如何构建一个基于 Streamlit 的聊天机器人,通过 LLaMA 3.1 生成对话内容并与用户交互。

