亲身体验Llama 3.1:开源模型的部署与应用之旅
文章目录
- 1 Llama 3.1系列的诞生
- 2 大型模型的未来发展
- 3 使用教程
- 4 Llama 3.1在客户服务中的运用
1 Llama 3.1系列的诞生
在人工智能的浪潮中,大型语言模型(LLM)正以其独特的魅力和潜力,成为深度学习领域的一颗耀眼明星。
这些模型不仅在自然语言处理(NLP)领域取得了令人瞩目的成就,还在计算机视觉(CV)、多模态学习和科学计算等多个领域展现出了巨大的应用前景。
开源LLM的兴起,为全球的开发者和研究者提供了一个广阔的舞台,他们可以在这个舞台上自由地探索、实验和创新。
2024年7月23日,Meta公司发布了Llama 3.1系列,这一事件无疑为开源模型领域注入了新的活力。
Llama 3.1 405B模型,以其4050亿的参数量和128K Tokens的上下文长度,成为了Meta公司迄今为止最大规模的训练成果之一。
这一成就的背后,是超过15万亿的Tokens和超过1.6万个H100 GPU的庞大计算资源的支撑。
Llama 3.1在规模和性能上的显著提升,不仅在技术上实现了飞跃,更在多种任务中展现出了前所未有的灵活性和潜力。
2 大型模型的未来发展
作为一名AI工程师,我对这一进展感到无比兴奋。
这些大型模型的出现,不仅推动了技术的进步,也为我们的日常工作带来了新的挑战和机遇。
它们提供了强大的工具,使我们能够构建更加智能和高效的系统,我们也面临着如何优化这些模型以适应特定应用场景的问题,以及如何确保这些模型的可解释性和安全性。
在体验这些大型模型的过程中,我深刻感受到了它们的强大能力。例如,Llama 3.1 405B模型在处理长文本数据时的出色表现,让我对自然语言的理解有了新的认识。
它能够理解和生成连贯、逻辑性强的文本,这在以往的模型中是难以想象的,并且它在多语言支持方面的能力也令人印象深刻,这对于全球化的应用开发来说是一个巨大的优势。
3 使用教程
(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
模型,执行以下命令即可内网高速下载:
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
(5)下载完成后解压缩/Llama-3.1-8B-Instruct.tar
tar -xf Llama-3.1-8B-Instruct.tar
(6)模型下载好后,准备加载模型及启动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)
(7)在终端中运行以下命令,启动 streamlit 服务,server.port
可以更换端口:
streamlit run llamaBot.py --server.address 0.0.0.0 --server.port 1024
需注意服务地址务必指定位0.0.0.0,否则无法通过浏览器访问
(8)接下来我们需要通过丹摩平台提供的端口映射能力,把内网端口映射到公网;
进入GPU 云实例页面,点击操作-更多-访问控制:
(9)点击添加端口,添加streamlit服务对应端口:
(10)添加成功后,通过访问链接即即可打开LLaMA3.1 Chatbot交互界面,并与其对话:
4 Llama 3.1在客户服务中的运用
在实际应用中,我尝试将Llama 3.1 405B模型集成到一个客户服务机器人中,这个机器人需要处理大量的用户查询,并提供准确的回答。
通过使用Llama 3.1 405B模型,机器人能够更好地理解用户的意图,提供更加个性化的服务。这不仅提高了用户的满意度,也提高了服务的效率。
我还尝试将Llama 3.1 405B模型应用于一个复杂的数据分析项目中,在这个项目中,模型需要从大量的数据中提取有价值的信息,并生成报告。
Llama 3.1 405B模型的上下文理解能力,使得它能够从数据中提取出更深层次的关联和模式,这对于数据分析来说是非常宝贵的。