Meta 发布 Llama 3 开源大模型,8B 与 70B 双规格上线 Hugging Face
Welcome Llama 3 - Meta's new open LLM
Meta 发布 Llama 3,包含 8B 和 70B 两种参数规模,各有 base 与 instruct 微调版本,并同步推出基于 Llama 3 8B 微调的安全模型 Llama Guard 2,共 5 个开放权重模型上线 Hugging Face。
梳理 Llama 3 四款模型的规格、tokenizer 变化与 Hugging Face 生态集成方式,便于评估其部署与微调成本。
简介
Meta 的 Llama 3,即开放获取的 Llama 系列的下一个迭代版本,现已发布,并可在 HF Mirror 上获取。很高兴看到 Meta 继续其对开放 AI 的承诺,我们非常激动能够通过在 HF Mirror 生态系统中的全面集成来全力支持这一发布。
Llama 3 提供了两种规格:8B 适用于在消费级 GPU 上进行高效部署和开发,而 70B 则适用于大规模 AI 本地应用。两者均提供基础版和指令微调版。此外,除了这 4 个模型外,还基于 Llama 3 8B 微调了新版本的 Llama Guard,并作为 Llama Guard 2(安全微调版)发布。
我们与 Meta 合作,确保最佳地集成到 HF Mirror 生态系统中。您可以在 Hub 上找到全部 5 个开放获取模型(2 个基础模型、2 个微调模型及 Llama Guard)。在发布的功能和集成中,我们包括:
- Hub 上的模型,附有模型卡和许可证
- 🤗 Transformers 集成
- Meta Llama 3 70b 的 Hugging Chat 集成
- 推理集成至推理端点、Google Cloud 和 Amazon SageMaker
- 使用 🤗 TRL 在单个 GPU 上微调 Llama 3 8B 的示例
目录
Llama 3 有哪些新特性?
Llama 3 的发布带来了 4 款基于 Llama 2 架构的新开放大语言模型。它们有两种规格:8B 和 70B 参数,每种规格均包含基础版(预训练)和指令调优版。所有变体均可在多种消费级硬件上运行,且具有 8K 令牌的上下文长度。
- Meta-Llama-3-8b:基础 8B 模型
- Meta-Llama-3-8b-instruct:基础 8b 模型的指令微调版
- Meta-Llama-3-70b:基础 70B 模型
- Meta-Llama-3-70b-instruct:基础 70b 模型的指令微调版
除了这 4 个基础模型,Llama Guard 2 也已发布。它基于 Llama 3 8B 微调而成,是 Llama Guard 系列的最新迭代。Llama Guard 2 面向生产用例构建,旨在对 LLM 输入(提示)以及 LLM 响应进行分类,以检测在风险分类中被视为不安全的内容。
与 Llama 2 相比,Llama 3 的一个重大变化是使用了一个新的分词器,将词汇量扩大到了 128,256(此前版本为 32K 令牌)。这种更大的词汇量可以更高效地对文本进行编码(无论是输入还是输出),并有可能增强多语言能力。然而,这也带来了代价:嵌入输入和输出矩阵变得更大,这在小型模型参数数量增加中占了相当一部分:从 Llama 2 的 7B 增加到 Llama 3 的 8B。此外,8B 版本的模型现在使用了分组查询注意力(GQA),这是一种高效的表示方式,应有助于处理更长的上下文。
Llama 3 模型在两个拥有 24,000 个 GPU 的集群上,使用超过 15 万亿个 token 的新混合公开在线数据,训练数据量大约增加了 8 倍。我们不知道训练数据混合的精确细节,只能猜测更大规模且更细致的数据整理是性能提升的重要因素。Llama 3 Instruct 针对对话应用进行了优化,并在超过 1000 万个人工标注的数据样本上进行了训练,结合了监督微调(SFT)、拒绝采样、近端策略优化(PPO)和直接策略优化(DPO)。
关于许可条款,Llama 3 附带了一个宽松的许可证,允许再分发、微调和衍生作品。明确署名要求是 Llama 3 许可证中的新增内容,在 Llama 2 中并未出现。例如,衍生模型需要在其名称开头包含“Llama 3”,并且您还需要在衍生作品或服务中提及“Built with Meta Llama 3”。有关完整详情,请务必阅读官方许可证。
Llama 3 评估
在这里,您可以看到模型列表及其Open LLM Leaderboard分数。这不是一个详尽的列表,我们鼓励您查看完整的排行榜。请注意,LLM Leaderboard 特别适用于评估预训练模型,因为还有其他针对对话模型的基准测试。
| 模型 | 许可证 | 预训练长度 [tokens] | 排行榜分数 |
|---|---|---|---|
| MPT-7B | Apache 2.0 | 1,000B | 5.98 |
| Falcon-7B | Apache 2.0 | 1,500B | 5.1 |
| Llama-2-7B | Llama 2 许可证 | 2T | 8.72 |
| Qwen 2 7B | Apache 2.0 | ? | 23.66 |
| Llama-3-8B | Llama 3 许可证 | 15T | 13.41 |
| Llama-2-13B | Llama 2 许可证 | 2T | 10.99 |
| Falcon-40B | Apache 2.0 | 1,000B | 11.33 |
| Falcon-40B | Apache 2.0 | 1,000B | 11.33 |
| Llama-2-70B | Llama 2 许可证 | 2T | 18.25 |
| Llama-3-70B | Llama 3 许可证 | 15T | 26.37 |
| Mixtral 8x22B | Apache 2 | ? | 25.49 |
如何提示 Llama 3
基础模型没有提示格式。与其他基础模型一样,它们可以用于以合理的延续方式继续输入序列,或用于零样本/少样本推理。它们也是针对您自己的用例进行微调的绝佳基础。Instruct 版本使用以下对话结构:
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
{{ system_prompt }}<|eot_id|><|start_header_id|>user<|end_header_id|>
{{ user_msg_1 }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
{{ model_answer_1 }}<|eot_id|>
为了有效使用,必须完全重现此格式。稍后我们将展示如何使用 transformers 中可用的聊天模板轻松重现 instruct 提示。
演示
您可以在 Hugging Chat 上与 Llama 3 70B instruct 聊天!请查看此链接:https://hf-mirror.com/chat/models/meta-llama/Meta-Llama-3-70B-instruct
使用 🤗 Transformers
借助 Transformers 4.40 版本,您可以使用 Llama 3 并利用 HF Mirror 生态系统中的所有工具,例如:
- 训练和推理脚本及示例
- 安全文件格式(
safetensors) - 与 bitsandbytes(4 位量化)、PEFT(参数高效微调)和 Flash Attention 2 等工具的集成
- 使用模型运行生成的实用程序和辅助工具
- 导出模型以进行部署的机制
此外,Llama 3 模型与带有 CUDA 图的 torch.compile() 兼容,在推理时可提供约 4 倍的速度提升!
要将 Llama 3 模型与 transformers 一起使用,请确保安装最新版本的 transformers:
pip install --upgrade transformers
以下代码片段展示了如何将 Llama-3-8b-instruct 与 transformers 一起使用。它需要约 16 GB 的 RAM,包括 3090 或 4090 等消费级 GPU。
from transformers import pipeline
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipe = pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
{"role": "user", "content": "Who are you?"},
]
terminators = [
pipe.tokenizer.eos_token_id,
pipe.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipe(
messages,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
Arrrr,我的伙计!我叫Captain Chat,是七大洋上最卑鄙的海盗聊天机器人!我来这里是要用我可靠的回答擦洗你们思想的甲板,明白吗?我准备好升起海盗旗,扬帆起航,去享受一场虚张声势的好时光了,老兄!那么,是什么把你带到这片美丽的海域来的?
几个细节:
- 我们在
bfloat16中加载了模型。这是Meta发布的原始检查点所使用的类型,因此这是推荐的运行方式,以确保最佳精度或进行评估。对于实际使用,也可以安全地使用float16,根据你的硬件,它可能更快。 - 助手回复可能会以特殊标记
<|eot_id|>结尾,但如果发现常规EOS标记,我们也必须停止生成。我们可以通过在eos_token_id参数中提供一个终止符列表来提前停止生成。 - 我们使用了从原始meta代码库中获取的默认采样参数(
temperature和top_p)。我们还没有时间进行广泛的测试,请随意探索!
你还可以自动量化模型,以8位甚至4位模式加载它。4位加载大约需要7 GB内存来运行,使其兼容许多消费级显卡以及Google Colab中的所有GPU。以下是如何以4位加载生成管道:
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={
"torch_dtype": torch.float16,
"quantization_config": {"load_in_4bit": True},
"low_cpu_mem_usage": True,
},
)
有关使用transformers的模型的更多详细信息,请查看模型卡片。
推理集成
在本节中,我们将介绍运行Llama 3模型推理的不同方法。在使用这些模型之前,请确保你已在官方 Meta Llama 3 代码库中请求访问其中一个模型。
与推理端点集成
你可以在HF Mirror的 推理端点上部署Llama 3,它使用文本生成推理作为后端。文本生成推理 是由HF Mirror开发的生产级推理容器,可轻松部署大型语言模型。它具有连续批处理、令牌流式传输、多GPU快速推理的张量并行以及生产级日志记录和跟踪等功能。
要部署Llama 3,请转到 模型页面 并点击 部署 -> 推理端点小部件。你可以在之前的博客文章中了解更多关于使用HF Mirror推理端点部署LLM的信息。推理端点通过文本生成推理支持消息API,这使你可以仅通过更改URL就从另一个封闭模型切换到开放模型。
from openai import OpenAI
# initialize the client but point it to TGI
client = OpenAI(
base_url="<ENDPOINT_URL>" + "/v1/", # replace with your endpoint url
api_key="<HF_API_TOKEN>", # replace with your token
)
chat_completion = client.chat.completions.create(
model="tgi",
messages=[
{"role": "user", "content": "Why is open-source software important?"},
],
stream=True,
max_tokens=500
)
# iterate and print stream
for message in chat_completion:
print(message.choices[0].delta.content, end="")
与Google Cloud集成
你可以通过Vertex AI或Google Kubernetes Engine(GKE)在Google Cloud上部署Llama 3,使用文本生成推理。
要从HF Mirror部署Llama 3模型,请转到 模型页面 并点击部署 -> Google Cloud。这将带你进入Google Cloud控制台,在那里你可以一键在Vertex AI或GKE上部署Llama 3。
与Amazon SageMaker集成
你可以通过AWS Jumpstart或使用HF Mirror LLM容器在Amazon SageMaker上部署和训练Llama 3。
要从 HF Mirror 部署 Llama 3 模型,请前往 模型页面 并点击 Deploy -> Amazon SageMaker。 这将显示一个代码片段,您可以复制并在您的环境中执行。Amazon SageMaker 将创建一个专用推理端点,您可以使用它来发送请求。
使用 🤗 TRL 进行微调
训练大语言模型在技术和计算上都可能具有挑战性。在本节中,我们将了解 HF Mirror 生态系统中可用的工具,以便在消费级 GPU 上高效训练 Llama 3。以下是在 No Robots 数据集上微调 Llama 3 的示例命令。我们使用 4 位量化,QLoRA 和 TRL 的 SFTTrainer 会自动将数据集格式化为 chatml 格式。让我们开始吧!
首先,安装最新版本的 🤗 TRL。
pip install -U transformers trl accelerate
如果您只想在终端中与模型聊天,可以使用 TRL CLI 的 chat 命令(更多信息请参阅文档):
trl chat \
--model_name_or_path meta-llama/Meta-Llama-3-8B-Instruct \
--device cuda \
--eos_tokens "<|end_of_text|>,<|eod_id|>"
您还可以使用 TRL CLI 在您自己的自定义数据集上监督微调(SFT)Llama 3。使用 trl sft 命令并将您的训练参数作为 CLI 参数传递。确保您已登录并有权访问 Llama 3 检查点。您可以使用 huggingface-cli login 来完成此操作。
trl sft \
--model_name_or_path meta-llama/Meta-Llama-3-8B \
--dataset_name HuggingFaceH4/no_robots \
--learning_rate 0.0001 \
--per_device_train_batch_size 4 \
--max_seq_length 2048 \
--output_dir ./llama3-sft \
--use_peft \
--load_in_4bit \
--log_with wandb \
--gradient_checkpointing \
--logging_steps 10
这将从您的终端运行微调,在单个 A10G 上训练大约需要 4 小时,但可以通过将 --num_processes 调整为您可用的 GPU 数量来轻松并行化。
注意:您还可以用 yaml 文件替换 CLI 参数。在此处了解更多关于 TRL CLI 的信息。
其他资源
致谢
在生态系统中发布这样的模型并提供支持和评估,离不开许多社区成员的贡献,包括
- Clémentine Fourrier、Nathan Habib 和 Eleuther Evaluation Harness 用于 LLM 评估
- Olivier Dehaene 和 Nicolas Patry 提供 Text Generation Inference 支持
- Arthur Zucker 和 Lysandre Debut 在 transformers 和 tokenizers 中添加 Llama 3 支持
- Nathan Sarrazin、Victor Mustar 和 Kevin Cathaly 使 Llama 3 在 Hugging Chat 中可用。
- Yuvraj Sharma 提供 Gradio 演示。
- Xenova 和 Vaibhav Srivastav 对量化和提示模板进行调试和实验。
- Brigitte Tousignant、Florent Daudens、Morgan Funtowicz 和 Simon Brandeis 在发布期间处理不同事项!
- 感谢整个 Meta 团队,包括 Samuel Selvan、Eleonora Presani、Hamid Shojanazeri、Azadeh Yazdan、Aiman Farooq、Ruan Silva、Ashley Gabriel、Eissa Jamil、Binh Tang、Matthias Reso、Lovish Madaan、Joe Spisak 和 Sergey Edunov。
感谢 Meta 团队发布 Llama 3 并将其提供给开源 AI 社区!
来源:Hugging Face Blog · hf-mirror.com