Transformers documentation

Llama3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
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