丹摩
1.前言
Llama3.1是Meta 公司发布的最新开源大型语言模型,相较于之前的版本,它在规模和功能上实现了显著提升,尤其是最大的 4050亿参数版本,成为开源社区中非常强大的竞争者,能够在许多场景下与封闭模型如 OpenAI 的 GPT-4 相媲美。以下是 Llama3.1的一些主要特性:
- 上下文窗口扩展
Llama3.1支持最长 128K tokens 的上下文窗口,这使得它能够处理更长的文本内容,特别适用于长文档总结和复杂对话场景。 - 多语言支持
Llama 3.1 支持包括英语、西班牙语、法语、德语、意大利语等八种语言的生成和理解功能,非常适合全球化应用。 - 增强的推理与工具使用能力
Meta 声称 Llama 3.1 在数学计算、逻辑推理和工具调用方面表现卓越,这使其在许多基准测试中表现出色。 - 高效部署与训练优化
通过量化技术(将计算从 BF16 缩减到 FP8),Llama 3.1 的推理和训练成本显著降低,适合单节点服务器的部署。此外,它支持监督微调和生成高质量的合成数据。 - 开源与社区支持
Llama 3.1 完全开源,开发者可以通过 Meta 平台和 Hugging Face 下载模型,并在本地或云端环境中运行,充分保障数据隐私与安全。同时,Meta 提供了完善的开发工具和生态系统支持,例如支持增强的检索生成(RAG)工作流。
2.丹摩的配置
下面我会从打开丹摩平台开始一步一步的教导大家配置。
- 首先我们打开丹摩平台,然后点击创建实例。
- 进入下一个页面后点击绿框中的配置。推荐选择按需支付模式。
- 根据图片选择配置
- 开始设置镜像,平台提供多种基础镜像,便于用户快速启动应用。这些镜像都预装了必要的环境和工具,用户可以根据需求轻松选择,推荐选择绿色框选内容。
- 创建密钥对,密钥对是为了确保安全登录,可以自定义名称,选择自动生成,并将生成的私钥下载到本地计算机。
密钥创建成功后,选择新生成的密钥对,点击立即创建,稍等片刻,系统便会成功启动。 - 使用密钥对登录
7.完成
平台提供了可以直接登录的JupyterLab在线入口,让你轻松访问和管理实例。
进入终端。
3.Llama3.1的本地配置
环境创建好后。使用以下指令创建新环境:
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
安装好后,下载Llama3.1-88
模型,由于平台已经预装了。可以直接使用以下指令高速在内网下载。
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
完成后进行解压
tar -xf Llama-3.1-8B-Instruct.tar
Llama3的配置
创建一个名为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.1Chatbot交互界面。