开源的大语言模型(LLM)生态系统依然生机勃勃,各种引人注目的模型不断涌现,包括像LLaMA和Alpaca这样的国际项目,以及国内开发的ChatGLM、BaiChuan和InternLM(书生·浦语)等模型。这些创新为开发者提供了在本地进行部署和个性化定制的绝佳机会,使其能够创建具有独特价值的应用程序。
在2024年7月23日,Meta公司发布了备受期待的Llama 3.1系列,这一举措为开源模型的发展设立了新的标杆。特别是Llama 3.1 405B模型,其拥有4050亿个参数和128K Tokens的上下文长度,成为Meta迄今为止最大的模型。在其训练过程中,使用了超过15万亿的Tokens和16000个H100 GPU,显示了其前所未有的规模和技术实力。
对于开发者来说,Llama 3.1系列的发布为创造更加智能和高效的系统提供了新的机会。通过这些强大的模型,开发者可以设计出更复杂、更有效的解决方案。然而,随之而来的还有如何优化这些模型以适应特定应用场景的挑战,以及确保其可解释性和安全性的问题。随着技术的不断进步,开发者必须不断创新,以迎接未来的挑战和机遇。
在这个快速发展的领域,开源模型的进展不仅推动了技术的前沿探索,也为开发者提供了丰富的资源和灵活性。借助这些模型,开发者可以更轻松地实现复杂的任务,并推动技术创新,为用户带来更好的体验。随着时间的推移,预计会有更多的突破性发展等待我们去发现和利用。
在丹摩里创建创建实例。
进入创建页面后,首先在实例配置中选择付费类型,一般短期需求可以选择按量付费或者包日,长期需求可以选择包月套餐。
在准备首次创建计算实例时,选择合适的GPU和硬盘配置是非常重要的一步。建议选择NVIDIA GeForce RTX 4090进行按需付费,该GPU提供了60GB的内存和24GB显存,完全能够支持LLaMA 3.1 8B版本的运行,该版本至少需要16GB的显存才能正常运作。
对于数据存储方面,每个实例默认配备了50GB的数据硬盘空间,这对于初次部署通常已经足够。这个默认配置可以满足大多数基础项目的存储需求,尤其是对于刚开始的用户而言。
在设置计算实例时,选择合适的操作镜像也是一个关键步骤。平台提供了多种预配置的基础镜像,帮助您快速启动项目。这些镜像内置了各种基础环境和开发框架,您可以根据需要进行选择。
为满足项目需求,我们建议挑选包含PyTorch的镜像。通过在筛选选项中勾选框架,选择PyTorch 2.4.0版本。这一版本为机器学习和深度学习项目提供了强大的支持,并能够与最新的研究和工具兼容。
为了确保登录过程的安全性,建议生成一个密钥对。首先,您需要为密钥对设置一个自定义名称,然后选择系统的自动生成功能来创建它。完成后,将生成的私钥文件下载到您的计算机上。为了便于后续的本地连接,请务必将文件后缀修改为.pem格式。
创建好密钥对后,选择刚刚创建好的密钥对,并点击立即创建,等待一段时间后即可启动成功!
等待实例创建成功,在 GPU云实例 中查看实例信息。
平台提供了在线访问实例的 JupyterLab 入口,可以直接登录实例:
一旦成功登录,您通常会直接进入 /root/workspace
目录。来让我们深入了解一下服务器中各个路径的特殊含义:
/
:此路径代表系统盘,负责存放所有系统级的数据和文件。每次当系统进行镜像替换或重置时,位于此处的数据都会被一并清空。
/root/workspace
:这是指向数据盘的路径。数据盘拥有扩展容量的特性,保证了其在保存镜像的过程中,数据不会被重置。
/root/shared-storage
:这是一个提供共享文件存储服务的路径,支持跨实例间的数据存储和访问。
记得在实例页面获取主机host和端口号,这是SSH远程登录的关键信息。
复制结果类似如下:
ssh -p 31729 root@gpu-s277r6fyqd.ssh.damodel.com
其中,gpu-s277r6fyqd.ssh.damodel.com
即主机host,31729
为端口号。
终端登录方式详见SSH登录与密钥对。
使用 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交互界面,并与其对话: