前言
LLaMA 3.1 是 Meta(Facebook 母公司)发布的系列大语言模型之一,属于 LLaMA(Large Language Model Meta AI)模型系列。该模型的目标是通过更高效的设计在保持性能的前提下,显著降低计算和资源需求。作为最新版本,它继承了前代的技术优势,并在架构、训练数据和推理能力上进行了改进。
一、LLaMA 3.1 的特点
LLaMA 3.1 主要具备以下四个核心特点:
- 规模较大且高效:参数量相比前代有所增加,但设计注重效率,能在较少资源下达到与更大模型相似的性能水平。
- 更多的训练数据:通过更广泛、丰富的语料库训练,覆盖更多领域信息,提升了回答问题、生成内容及自然语言理解的能力。
- 优化的推理性能:通过对推理算法和模型架构的优化,减少了推理时间,提高了不同任务上的响应速度。
- 开源的方式:继续采用开源模式,允许研究人员和开发人员在此基础上进行进一步的研究和开发,推动社区共同进步。
二、LLaMA 3.1 的优势
相较于 OpenAI 的 GPT 系列或 Google 的 PaLM 系列,LLaMA 系列的核心优势在于高效性。它在保持较高生成能力和理解能力的同时,资源消耗更低。LLaMA 3.1 通过对模型结构的精简和训练数据的多样化,在许多任务上能够提供接近甚至超过主流模型的性能。
三、LLaMA 3.1 部署流程
(一)准备 GPU 环境
首先需要在云端创建一个 GPU 实例。建议选择按量付费模式,配置至少一张 NVIDIA-L40S 显卡以确保推理流畅度。GPU 和数据硬盘可按默认设置,镜像框架推荐选择 PyTorch 2.4.0 版本,并创建密钥对后启动实例。
(二)登录与初始化
实例运行后,通过 JupyterLab 或终端登录。首次使用 Conda 管理环境时,建议先进行初始化操作,然后重新打开终端窗口生效。
conda init
(三)构建 Python 环境
使用 Conda 创建独立的虚拟环境,避免依赖冲突。这里我们指定 Python 3.12 版本。
conda create -n llama3 python=3.12
conda activate llama3
接下来安装 LLaMA 3.1 运行所需的依赖库。包括 LangChain 用于编排、Streamlit 用于前端展示、Transformers 用于模型加载以及 Accelerate 用于加速推理。
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-Instruct 模型文件。可以通过内网源或 Hugging Face 获取。下载完成后解压缩至工作目录。
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
tar -xf Llama-3.1-8B-Instruct.tar
(五)编写聊天应用
新建 llamaBot.py 文件,利用 Streamlit 快速构建交互界面。代码中使用了 @st.cache_resource 来缓存模型加载过程,避免每次请求都重复加载,提升响应速度。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st
# 创建一个标题和一个副标题
st.title()
st.caption()
model_name_or_path =
():
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_name_or_path,
torch_dtype=torch.bfloat16
).to()
tokenizer, model
tokenizer, model = get_model()
st.session_state:
st.session_state[] = []
msg st.session_state.messages:
st.chat_message(msg[]).write(msg[])
prompt := st.chat_input():
st.chat_message().write(prompt)
st.session_state.messages.append({: , : prompt})
input_ids = tokenizer.apply_chat_template(
st.session_state[],
tokenize=,
add_generation_prompt=
)
model_inputs = tokenizer([input_ids], return_tensors=).to()
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=
)
generated_ids = [
output_ids[(input_ids):]
input_ids, output_ids (model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=)[]
st.session_state.messages.append({: , : response})
st.chat_message().write(response)
(st.session_state)


