开源LLM生态系统的活力不减,涌现出许多引人注目的模型,如LLaMA和Alpaca,以及国内的ChatGLM、BaiChuan和InternLM(书生·浦语)。这些模型为开发者提供了在本地环境中进行部署和定制的可能性,使我们能打造具有独特价值的应用。
2024年7月23日,Meta公司发布了Llama 3.1系列,标志着开源模型发展的新里程碑。尤其是Llama 3.1 405B模型,以4050亿参数和128K Tokens的上下文长度,成为Meta迄今最大的模型。在训练上,涉及超过15万亿的Tokens和1.6万个H100 GPU,规模空前。
对于开发者而言,这一系列模型的推出打开了新的机遇大门。通过这些模型,我们能开发出更智能、更高效的系统。然而,这也带来了优化模型以适应特定场景,以及确保其可解释性和安全性的挑战。技术不断进步,更多创新和突破正在路上。
1. 创建实例。
2. 进入创建页面后,首先在实例配置中选择付费类型,一般短期需求可以选择按量付费或者包日,长期需求可以选择包月套餐。
3. 选择GPU数量和需求的GPU型号,首次创建实例推荐选择:
- 按量付费--GPU数量1--NVIDIA-GeForc-RTX-4090,该配置为60GB内存,24GB的显存(本次测试的LLaMA3.1 8B 版本至少需要GPU显存16G)。
- 配置数据硬盘的大小,每个实例默认附带了50GB的数据硬盘,首次创建可以就选择默认大小50GB。
4. 继续选择安装的镜像,平台提供了一些基础镜像供快速启动,镜像中安装了对应的基础环境和框架,可通过勾选来筛选框架,这里筛选PyTorch,选择PyTorch 2.4.0。
5. 为保证安全登录,创建密钥对,输入自定义的名称,然后选择自动创建并将创建好的私钥保存的自己电脑中并将后缀改为.pem,以便后续本地连接使用。
6. 创建好密钥对后,选择刚刚创建好的密钥对,并点击立即创建,等待一段时间后即可启动成功!
1. 等待实例创建成功,在 GPU云实例 中查看实例信息。
2. 平台提供了在线访问实例的 JupyterLab 入口,可以直接登录实例:
3. 登录后一般会在 /root/workspace 目录下,服务器各个路径具体意义如下:
1. `/`:系统盘,替换镜像,重置系统时系统盘数据都会重置。
2. `/root/workspace`:数据盘,支持扩容,保存镜像时此处数据不会重置。
3. `/root/shared-storage`:共享文件存储,可跨实例存储。
4. SSH登录:
SSH只是登录方式,工具可以是系统自带终端、Xshell、MobaXterm等。
SSH登录一般需要以下 4 个信息:
在实例页面获取主机host和端口号:
复制结果类似如下:
ssh -p 31729 root@gpu-s277r6fyqd.ssh.damodel.com
其中,gpu-s277r6fyqd.ssh.damodel.com` 即主机host,`31729` 为端口号。
终端登录方式详见[SSH登录与密钥对](https://doc.damodel.com/gpu/ssh.html)。
1. 使用 `conda` 管理环境,DAMODEL示例已经默认安装了 `conda 24.5.0` ,直接创建环境即可:
conda create -n llama3 python=3.12
2. 环境创建好后,使用如下命令切换到新创建的环境:
conda activate llama3
3. 继续安装部署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
4. 安装好后,下载 `Llama-3.1-8B` 模型,平台已预制`Llama-3.1-8B-Instruct`模型,执行以下命令即可内网高速下载:
```bash
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
5. 下载完成后解压缩`/Llama-3.1-8B-Instruct.tar`
```bash
tar -xf Llama-3.1-8B-Instruct.tar
1. 模型下载好后,准备加载模型及启动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)
```
2. 在终端中运行以下命令,启动 streamlit 服务,`server.port` 可以更换端口:
streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 1024
> 需注意服务地址务必指定位0.0.0.0,否则无法通过浏览器访问
接下来我们需要通过丹摩平台提供的端口映射能力,把内网端口映射到公网;
进入[GPU 云实例页面](https://www.damodel.com/console/instance),点击操作-更多-访问控制:
点击添加端口,添加streamlit服务对应端口:
添加成功后,通过访问链接即即可打开LLaMA3.1 Chatbot交互界面,并与其对话: