Transformers 文档
Llama3
并获得增强的文档体验
开始使用
该模型于 2024-04-18 发布,并于 2024-04-24 添加到 Hugging Face Transformers。
Llama3
import transformers
import torch
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',AutoModelAPI 将使用此设置将检查点从torch.float32转换为torch.float16。在线权重的数据类型(
dtype)大多数情况下都不重要,除非你在使用model = AutoModelForCausalLM.from_pretrained("path", dtype = "auto")初始化模型时使用dtype="auto"。原因是模型将首先被下载(使用在线检查点的dtype),然后转换为torch的默认dtype(变为torch.float32),最后,如果配置中提供了dtype或torch_dtype,则会使用它。不建议使用
float16训练模型,这可能会导致nan;因此,模型应该使用bfloat16进行训练。
技巧
Llama3 模型的权重可以通过填写 此表格 获取。
其架构与 Llama2 完全相同。
分词器是一个基于 tiktoken 的 BPE 模型(而 Llama2 基于 sentencepiece 实现)。主要区别在于,当输入 token 是词汇表的一部分时,它会忽略 BPE 合并规则。这意味着,如果不存在将“hugging”合并的规则,它不会像通常那样将“hugging”分解为最小单元,例如
["hug","ging"]形成 2 个 token。如果“hugging”本身是词汇表的一部分,它将被自动作为一个 token 返回。原始模型使用
pad_id = -1,这意味着没有 padding token。我们不能采用相同的逻辑,请确保使用tokenizer.add_special_tokens({"pad_token":"<pad>"})添加一个 padding token 并相应地调整 token 嵌入的大小。您还应该设置model.config.pad_token_id。模型的embed_tokens层使用self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)初始化,这确保了对 padding 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 RAM 来以 float16 精度托管整个模型(即使最大的版本有几个检查点,它们每个都包含模型权重的某一部分,因此我们需要将它们全部加载到 RAM 中)。对于 75B 模型,这意味着需要 145GB 的 RAM。
通过
attn_implementation="flash_attention_2"使用 Flash Attention 2 时,请勿将dtype传递给from_pretrained类方法,并使用自动混合精度训练。当使用Trainer时,只需将fp16或bf16设置为True。否则,请确保您正在使用torch.autocast。这是必需的,因为 Flash Attention 仅支持fp16和bf16数据类型。
资源
Llama2 的文档页面上有许多很棒的资源,欢迎贡献者在此处添加为 Llama3 精选的新资源!🤗
在 GitHub 上更新