0.前言
目前关于 Llama 3.1 的详细安装和使用指南在网络上较为分散,对于许多想要深入了解和应用该模型的人来说,缺乏一个系统、全面的指导资料。为了填补这一空白,本文应运而生。旨在为广大读者提供从 Llama 3.1 的安装到熟练使用的全方位指南,涵盖从创建丹摩实例、登录实例、部署模型到实践操作的每一个步骤,帮助读者能够顺利地在本地环境中部署和应用 Llama 3.1,充分挖掘其潜在价值。
1.Llama3.1背景
开源大型语言模型(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。
开发者面临着新的挑战,包括如何优化这些模型以适应特定场景,并确保它们的可解释性和安全性。随着技术的不断进步,更多的创新和突破正在到来,为未来的发展带来了更多期待。
2.部署丹摩实例教程
创建实例。
进入创建页面后,首先在实例配置中选择付费类型,一般短期需求可以选择按量付费或者包日,长期需求可以选择包月套餐。
在首次创建实例时,建议选择按需付费模式,并为GPU配置选择1块NVIDIA GeForce RTX 4090。这款设备提供60GB的内存和24GB的显存,能够满足多种计算需求。
这种配置适合各种应用场景,尤其是在需要高性能计算的项目中,能够提供强大的支持。凭借RTX 4090显卡的高效能和灵活的按需付费选项,用户可以自由探索和实验新应用,而无需过多担心硬件限制。
在选择镜像安装时,平台提供了一系列基础镜像以供用户快速启动。这些镜像已经预装了必要的环境和框架,方便用户根据需要进行选择。通过勾选不同的选项,用户可以轻松筛选出所需的框架。在这个过程中,我们建议筛选并选择PyTorch,并选用其2.4.0版本。
为保证安全登录,创建密钥对,输入自定义的名称,然后选择自动创建并将创建好的私钥保存的自己电脑中并将后缀改为.pem,以便后续本地连接使用。
创建好密钥对后,选择刚刚创建好的密钥对,并点击立即创建,等待一段时间后即可启动成功!
3.登录实例
等待实例创建成功,在 GPU云实例 中查看实例信息。
平台提供了在线访问实例的 JupyterLab 入口,可以直接登录实例:
登录到服务器后,通常会进入到/root/workspace目录。服务器路径的具体用途如下:
/
:这是系统盘所在位置。每当替换镜像或重置系统时,系统盘上的数据将被清除并重置。/root/workspace
:此为数据盘,支持容量扩展。保存镜像时,这里的数据不会被清空。/root/shared-storage
:用于跨多个实例的共享存储空间,便于文件共享。- SSH登录:SSH是一种登录方式,支持的工具包括系统自带终端、Xshell、MobaXterm等。
要通过SSH进行登录,通常需要提供以下信息:
- 用户名:root
- 远程主机的域名或IP(这里以host域名为例):可从实例页面获取
- 端口号:也需从实例页面获取
- 登录凭证(在此使用密钥):在创建实例时已保存到本地
了解这些路径和信息,能够帮助用户有效地管理和操作服务器资源,确保数据的安全性和操作的方便性。
在实例页面获取主机host和端口号:
复制结果类似如下:
ssh -p 31729 root@gpu-s277r6fyqd.ssh.damodel.com
其中,gpu-s277r6fyqd.ssh.damodel.com
即主机host,31729
为端口号。
终端登录方式详见SSH登录与密钥对。
4.部署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
5.实践教程
模型下载好后,准备加载模型及启动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():# 从预训练的模型中获取tokenizertokenizer = 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交互界面,并与其对话:
以上就是教程的全部内容,有不明白的地方可在评论区留言。