大型语言模型(LLM)已成为深度学习领域的重要力量,在自然语言处理、多模态学习等方向展现出巨大潜力。2024 年 7 月 Meta 推出的 Llama 3.1 系列标志着开源模型发展的新阶段,特别是 405B 参数版本拥有惊人的上下文长度和训练规模。对于开发者而言,利用这些工具构建智能系统既是机遇也伴随着挑战,例如如何优化模型以适应特定场景及确保安全性。
环境准备与实例创建
部署前需准备一台具备足够显存的云服务器。短期需求可选按量付费,长期则建议包月。首次创建推荐配置如下:
- GPU 型号:NVIDIA GeForce RTX 4090(60GB 内存,24GB 显存),Llama 3.1 8B 版本至少需要 16G 显存。
- 硬盘大小:默认 50GB 数据盘即可满足初期需求。
- 镜像选择:筛选 PyTorch 框架,推荐使用 PyTorch 2.4.0 基础镜像。
为保障安全登录,建议创建密钥对并保存私钥文件(后缀改为.pem),以便后续本地连接使用。
登录与管理实例
实例启动后,可通过云控制台查看信息。平台通常提供在线 JupyterLab 入口直接访问,也可通过 SSH 连接。
SSH 登录是更通用的方式,需要以下信息:主机域名或 IP、端口号、用户名(通常为 root)、以及本地私钥。命令示例如下:
ssh -p 端口号 root@主机域名
服务器路径结构通常如下:
/:系统盘,重置系统时数据会丢失。/root/workspace:数据盘,支持扩容,保存镜像时数据保留。/root/shared-storage:共享存储,可跨实例访问。
部署 Llama3.1
1. 环境搭建
使用 conda 管理 Python 环境。若平台未预装,可直接创建虚拟环境:
conda create -n llama3 python=3.12
激活环境后安装必要依赖:
pip install langchain==0.1.15
pip install streamlit==1.36.0
pip install transformers==4.44.0
pip install accelerate==0.32.1
2. 模型下载与解压
平台通常预制了部分模型权重,可通过内网高速下载。若无预制资源,可从官方渠道获取。
wget http://file.s3/damodel-openfile/Llama3/Llama-3.1-8B-Instruct.tar
tar -xf Llama-3.1-8B-Instruct.tar
运行 Web 服务
模型就绪后,编写 Python 脚本加载模型并启动 Streamlit 服务。新建 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 =
():
tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
mode_name_or_path,
torch_dtype=torch.bfloat16
).cuda()
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)


