Transformers 文档

Llama3

Hugging Face's logo
加入 Hugging Face 社区

并获取增强版文档体验

入门

Llama3

import transformers
import torch

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

pipeline = transformers.pipeline("text-generation", model=model_id, model_kwargs={"torch_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,现已开放使用。此版本包含 80 亿和 700 亿参数的预训练和指令微调语言模型,可以支持各种用例。下一代 Llama 在广泛的行业基准测试中展示了最先进的性能,并提供了新的功能,包括改进的推理能力。我们相信这些是同类中最好的开源模型,没有之一。为了支持我们长期以来的开放理念,我们将 Llama 3 交付给社区。我们希望推动 AI 在整个技术栈中下一波的创新浪潮——从应用程序到开发者工具,再到评估、推理优化等等。我们迫不及待地想看到你构建了什么,并期待你的反馈。

查看所有 Llama3 模型检查点 这里。作者的原始代码可以在 这里 找到。

使用技巧

Llama3 模型使用 bfloat16 训练,但原始推理使用 float16。上传到 Hub 的检查点使用 torch_dtype = 'float16'AutoModel API 将使用它将检查点从 torch.float32 转换为 torch.float16

在线权重的 dtype 大多无关紧要,除非在使用 torch_dtype="auto" 初始化模型时(例如 model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto"))。原因是模型将首先被下载(使用在线检查点的 dtype),然后它将被转换为 torch 的默认 dtype(变为 torch.float32),最后,如果配置中提供 torch_dtype,它将被使用。

不建议在 float16 中训练模型,已知会导致 nan;因此,模型应该在 bfloat16 中训练。

技巧

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

  • 架构与 Llama2 完全相同。

  • 分词器是基于 tiktoken 的 BPE 模型(与 Llama2 中基于 sentencepiece 实现的分词器不同)。主要区别在于它忽略了 BPE 合并规则,当输入 token 是词汇表的一部分时。这意味着如果不存在合并规则来生成 "hugging",则不会以最小的单元形式(例如 ["hug","ging"])形成两个 token,如果 “hugging” 是词汇表的一部分,它将自动作为单个 token 返回。

  • 原始模型使用 pad_id = -1,这意味着没有填充 token。我们不能使用相同的逻辑,请确保使用 tokenizer.add_special_tokens({"pad_token":"<pad>"}) 添加填充 token 并相应地调整 token 嵌入。你还应该设置 model.config.pad_token_id。模型的 embed_tokens 层使用 self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx) 初始化,这确保了对填充 token 的编码将输出零,因此在初始化时传递它是一个好习惯。

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

    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")

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

  • 当使用 Flash Attention 2(通过 attn_implementation="flash_attention_2")时,不要将 torch_dtype 传递给 from_pretrained 类方法,并使用自动混合精度训练。当使用 Trainer 时,只需将 fp16bf16 设置为 True 即可。否则,请确保使用 torch.autocast。这是必需的,因为 Flash Attention 仅支持 fp16bf16 数据类型。

资源

Llama2 文档页面上,已经提供了大量很棒的资源,并邀请贡献者在这里添加专门针对 Llama3 的新资源!🤗

< > 更新 在 GitHub 上