一、大模型(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 在实际应用中的落地潜力。未来可以尝试微调模型,实现更高质量的对话效果,满足特定领域的需求。

Logo

尧米是由西云算力与CSDN联合运营的AI算力和模型开源社区品牌,为基于DaModel智算平台的AI应用企业和泛AI开发者提供技术交流与成果转化平台。

更多推荐