声明:非广告,为用户使用体验分享

大模型(LLM)狭义上指基于深度学习算法进行训练的自然语言处理(NLP)模型,主要应用于自然语言理解和生成等领域,广义上还包括机器视觉(CV)大模型、多模态大模型和科学计算大模型等。

百模大战正值火热,开源 LLM 层出不穷。如今国内外已经涌现了众多优秀开源 LLM,国外如 LLaMA、Alpaca,国内如 ChatGLM、BaiChuan、InternLM(书生·浦语)等。开源 LLM 支持用户本地部署、私域微调,每一个人都可以在开源 LLM 的基础上打造专属于自己的独特大模型。

Llama3.1

2024 年 7 月 23 日 Meta宣布推出迄今为止最强大的开源模型——Llama 3.1 405B,同时发布了全新升级的 Llama 3.1 70B 和 8B 模型。

Llama 3.1 405B支持上下文长度为128K Tokens,在基于15万亿个Tokens、超1.6万个H100 GPU上进行训练,这也是Meta有史以来第一个以这种规模进行训练的Llama模型。

Llama 3.1 与其他模型对比:

在这里插入图片描述

在这里插入图片描述

由于资源限制,我们此次选择部署 Llama3.1 的 8B 版本,该版本至少需要GPU显存16G。

本次测试环境:

ubuntu 22.04 python 3.12 cuda 12.1 pytorch 2.4.0

部署流程

1. 创建实例

进入控制台-GPU云实例,点击创建实例:

在这里插入图片描述

进入创建页面后,首先在实例配置中选择付费类型,一般短期需求可以选择按量付费或者包日,长期需求可以选择包月套餐;

其次选择GPU数量和需求的GPU型号,首次创建实例推荐选择:

按量付费--GPU数量1--NVIDIA-GeForc-RTX-4090,该配置为60GB内存,24GB的显存(本次测试的LLaMA3.1 8B 版本至少需要GPU显存16G)

接下来配置数据硬盘的大小,每个实例默认附带了50GB的数据硬盘,首次创建可以就选择默认大小50GB

需关注
如果您通过官方预制方式下载模型,建议扩容至60GB

在这里插入图片描述

继续选择安装的镜像,平台提供了一些基础镜像供快速启动,镜像中安装了对应的基础环境和框架,可通过勾选来筛选框架,这里筛选PyTorch,选择PyTorch 2.4.0。

在这里插入图片描述

2. 登录实例

等待实例创建成功,在 GPU云实例 中查看实例信息:

在这里插入图片描述

JupyterLab 方式登录实例

平台提供了在线访问实例的 JupyterLab 入口,可以直接登录实例:

在这里插入图片描述

JupyterLab 界面:

在这里插入图片描述

3. 部署LLama3.1

我们使用 conda 管理环境,DAMODEL示例已经默认安装了 conda 24.5.0 ,直接创建环境即可:

conda create -n llama3 python=3.12

在这里插入图片描述

环境创建好后,使用如下命令切换到新创建的环境:

conda activate llama3

在这里插入图片描述

继续安装部署LLama3.1需要的依赖:

pip install langchain==0.1.15
pip install streamlit==1.36.0
pip install transformers==4.44.0
pip install accelerate==0.32.1

在这里插入图片描述

安装好后,下载 Llama-3.1-8B 模型,平台已预制 Llama-3.1-8B-Instruct 模型,执行以下命令即可内网高速下载:

wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar

在这里插入图片描述

下载完成后解压缩 /Llama-3.1-8B-Instruct.tar

tar -xf Llama-3.1-8B-Instruct.tar

在这里插入图片描述

使用教程

模型下载好后,准备加载模型及启动Web服务等工作,新建 llamaBot.py 文件并在其中输入以下内容:

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.port 可以更换端口:

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

在这里插入图片描述

需关注
需注意服务地址务必指定位0.0.0.0,否则无法通过浏览器访问

进入GPU 云实例页面,点击添加端口,添加streamlit服务对应端口:

在这里插入图片描述

添加成功后,通过访问链接即即可打开LLaMA3.1 Chatbot交互界面,并与其对话:

在这里插入图片描述

踩坑记录

1. 执行 conda activate llama3 后报错:CondaError:Run 'conda activate'

在这里插入图片描述

解决办法

  1. 关闭当前的终端会话(如果有正在运行的程序或操作,确保先妥善保存相关内容)。
  2. 重新打开一个新的终端窗口。
  3. 在新打开的终端中,输入以下命令并回车执行:
conda init

这个命令会根据你所使用的 shell(比如bash、zsh等)对Conda进行初始化设置,它会在你的 shell配置文件(例如.bashrc.zshrc等)中添加必要的代码来正确设置Conda环境变量等相关配置,以便能够正常使用Conda的各种功能,包括激活环境。

  1. 执行完conda init后,可能需要关闭当前终端并重新打开(有些情况下,新配置会在重新打开终端后生效)。
  2. 在新的终端中,再次进入到之前所在的目录(即root@ct3s8rs7v38s73e0k3h0-adtvz:~/workspace#这个路径对应的目录,如果不记得确切路径,可以通过相关命令切换到对应的工作目录,比如cd命令)。
  3. 然后再次尝试执行激活llama3环境的命令:
conda activate llama3

这样应该就可以成功激活llama3环境了。如果仍然遇到问题,可能需要检查Conda的安装是否完整、是否存在其他冲突等情况,可以进一步查看Conda的详细日志(通常可以通过设置相关环境变量来开启更详细的日志输出以排查问题)。

Logo

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

更多推荐