Transformers documentation

Llama3

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2024-07-31 在 HF papers 上发布,并于 2024-04-24 贡献至 Hugging Face Transformers。

Llama3

Tensor parallelism
import torch

import transformers


model_id = "meta-llama/Meta-Llama-3-8B"

pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"dtype": torch.bfloat16}, device_map="auto")
pipeline("Hey how are you doing today?")

概述

Llama3 模型由 Meta AI 团队在 Introducing Meta Llama 3: The most capable openly available LLM to date 中提出。

该博客文章的摘要如下:

今天,我们很高兴地宣布,下一代 Llama 的前两个模型——Meta Llama 3——现已开放供广泛使用。此次发布包含具有 8B 和 70B 参数的预训练语言模型以及指令微调语言模型,能够支持多种应用场景。这一代 Llama 在广泛的行业基准测试中展现了最先进的性能,并提供了包括推理能力增强在内的新特性。我们认为,这些是同类中最好的开源模型,没有之一。秉承我们一贯的开放理念,我们将 Llama 3 交到社区手中。我们希望借此推动 AI 全栈的下一波创新浪潮——从应用、开发者工具、评估到推理优化等。我们迫不及待想看到大家构建的成果,并期待收到您的反馈。

所有 Llama3 模型检查点均可在此处查看。 作者的原始代码可在此处找到。

使用技巧

Llama3 模型是使用 bfloat16 进行训练的,但原始推理使用的是 float16。上传到 Hub 的检查点使用了 dtype = 'float16',AutoModel API 将利用该设置将检查点从 torch.float32 转换为 torch.float16。

在线权重的 dtype 通常无关紧要,除非你在初始化模型时使用了 dtype="auto",例如 model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto")。原因是模型会先被下载(使用在线检查点的 dtype),然后被转换为 torch 的默认 dtype(即 torch.float32,device_map="auto"),最后,如果配置中提供了 dtype 或 torch_dtype,则会使用该值。

不建议以 float16 训练模型,因为已知这会产生 nan;因此,应以 bfloat16 训练模型。

提示:

  • Llama3 模型的权重可通过填写此表单获取

  • 该架构与 Llama2 完全相同。

  • 分词器是一个基于 tiktoken 的 BPE 模型(而 Llama2 使用的是基于 sentencepiece 实现的版本)。它的主要区别在于,当输入 token 本身属于词表时,它会忽略 BPE 合并规则。这意味着,如果不存在用于生成 "hugging" 的合并规则,那么它不会像 ["hug","ging"] 那样被拆分为两个最小单元 token;如果 "hugging" 属于词表,它将被直接作为一个 token 返回。

  • 原始模型使用 pad_id = -1,这意味着没有填充标记。我们不能沿用相同的逻辑,请务必使用 tokenizer.add_special_tokens({"pad_token":"<pad>"}) 添加一个填充标记,并相应地调整 token 嵌入的大小。您还应该设置 model.config.pad_token_id。模型的 embed_tokens 层通过 self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx) 进行初始化,这确保了编码填充标记时会输出零,因此建议在初始化时传入该参数。

  • 原始检查点可以使用转换脚本进行转换。可以使用以下(示例)命令调用该脚本:

    python src/transformers/models/llama/convert_llama_weights_to_hf.py \
        --input_dir /path/to/downloaded/llama/weights --model_size 7B --output_dir /output/path --llama_version 3
  • 转换完成后,可以通过以下方式加载模型和分词器:

    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    tokenizer = AutoTokenizer.from_pretrained("/output/path")
    model = AutoModelForCausalLM.from_pretrained("/output/path", device_map="auto")

    请注意,运行该脚本需要足够的 CPU 内存,以在 float16 精度下容纳整个模型(即使最大规模的模型由多个检查点组成,每个检查点都包含模型各权重的一部分,因此我们需要将它们全部加载到内存中)。对于 75B 模型,因此需要 145GB 的内存。

  • 通过 attn_implementation="flash_attention_2" 使用 Flash Attention 2 时,请勿向 from_pretrained 类方法传递 dtype,并改用自动混合精度训练。如果使用 Trainer,只需将 fp16 或 bf16 设置为 True 即可。否则,请确保你正在使用 torch.autocast。这是必需的,因为 Flash Attention 仅支持 fp16 和 bf16 数据类型。

资源

Llama2 的文档页面已经提供了大量优质资源,欢迎贡献者在此添加专为 Llama3 精选的新资源!🤗

Update on GitHub