跳到正文
原文
Hugging Face Blog·· 2024-04-18精选AI 评分78

Meta 发布 Llama 3 开源大模型,8B 与 70B 双规格上线 Hugging Face

Welcome Llama 3 - Meta's new open LLM

AI 导读

Meta 发布 Llama 3,包含 8B 和 70B 两种参数规模,各有 base 与 instruct 微调版本,并同步推出基于 Llama 3 8B 微调的安全模型 Llama Guard 2,共 5 个开放权重模型上线 Hugging Face。

推荐理由

梳理 Llama 3 四款模型的规格、tokenizer 变化与 Hugging Face 生态集成方式,便于评估其部署与微调成本。

正文 · AI 翻译

简介

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)。在发布的功能和集成中,我们包括:

目录

Llama 3 有哪些新特性?

Llama 3 的发布带来了 4 款基于 Llama 2 架构的新开放大语言模型。它们有两种规格:8B 和 70B 参数,每种规格均包含基础版(预训练)和指令调优版。所有变体均可在多种消费级硬件上运行,且具有 8K 令牌的上下文长度。

除了这 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 的信息。

其他资源

致谢

在生态系统中发布这样的模型并提供支持和评估,离不开许多社区成员的贡献,包括

感谢 Meta 团队发布 Llama 3 并将其提供给开源 AI 社区!

来源:Hugging Face Blog · hf-mirror.com