Transformers 文档
Llama3
并获得增强的文档体验
开始使用
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 团队在《推出 Meta Llama 3:迄今为止最强大的开放式 LLM》一文中提出。
博文摘要如下:
今天,我们激动地宣布,下一代 Llama 模型——Meta Llama 3 的前两个模型已正式发布,供大家广泛使用。此次发布包含了参数量为 8B 和 70B 的预训练和指令微调语言模型,能够支持广泛的用例。新一代 Llama 在众多行业基准测试中展现了最先进的性能,并提供了包括增强推理在内的新能力。我们坚信,这些是同类中最出色的开源模型,没有之一。为支持我们长期的开放策略,我们将 Llama 3 交到社区手中。我们希望在 AI 技术栈的各个层面——从应用、开发者工具到评估、推理优化等等——掀起下一波创新浪潮。我们迫不及待地想看到您的创造,并期待您的反馈。
请在此处查看所有 Llama3 模型的 checkpoints。作者的原始代码可在此处找到。
使用技巧
Llama3
模型使用 bfloat16
进行训练,但原始推理使用 float16
。Hub 上传的 checkpoints 使用 torch_dtype = 'float16'
,AutoModel
API 将用此设置将 checkpoints 从 torch.float32
转换为 torch.float16
。
在线权重的 `dtype` 基本上无关紧要,除非您在使用 `model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto")` 初始化模型时使用了 `torch_dtype="auto"`。原因是模型会首先被下载(使用在线 checkpoints 的 `dtype`),然后被转换为 `torch` 的默认 `dtype`(变为 `torch.float32`),最后,如果配置中提供了 `torch_dtype`,则会使用该 `dtype`。
不建议在 `float16` 模式下训练模型,已知这会产生 `nan`;因此,模型应在 `bfloat16` 模式下进行训练。
技巧
可以通过填写此表格获取 Llama3 模型的权重。
其架构与 Llama2 完全相同。
Tokenizer 是一个基于 tiktoken 的 BPE 模型(而 Llama2 基于 sentencepiece 实现)。主要区别在于,当输入 token 是词汇表的一部分时,它会忽略 BPE 合并规则。这意味着,如果没有合并规则可以生成 `"hugging"`,并且 `"hugging"` 是词汇表的一部分,那么它将自动作为一个 token 返回,而不是像 `["hug","ging"]` 这样由最小单元组成 2 个 token。
原始模型使用 `pad_id = -1`,这意味着没有填充 token。我们不能使用相同的逻辑,请务必使用 `tokenizer.add_special_tokens({"pad_token":"
"})` 添加填充 token,并相应地调整 token embedding 的大小。您还应该设置 `model.config.pad_token_id`。模型的 `embed_tokens` 层通过 `self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.config.padding_idx)` 初始化,这确保编码填充 token 将输出零,因此建议在初始化时传递它。 原始 checkpoint 可以使用转换脚本进行转换。该脚本可以通过以下(示例)命令调用:
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
转换后,可以通过以下方式加载模型和 tokenizer:
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("/output/path") model = AutoModelForCausalLM.from_pretrained("/output/path")
请注意,执行该脚本需要足够的 CPU RAM 来容纳 float16 精度的整个模型(即使最大版本分为多个 checkpoints,每个 checkpoint 也包含模型每个权重的一部分,因此我们需要将它们全部加载到 RAM 中)。对于 75B 模型,因此需要 145GB 的 RAM。
当通过 `attn_implementation="flash_attention_2"` 使用 Flash Attention 2 时,不要将 `torch_dtype` 传递给 `from_pretrained` 类方法,并使用自动混合精度训练。当使用 `Trainer` 时,只需将 `fp16` 或 `bf16` 设置为 `True`。否则,请确保您正在使用 `torch.autocast`。这是必需的,因为 Flash Attention 仅支持 `fp16` 和 `bf16` 数据类型。
资源
Llama2 的文档页面上已经有大量很酷的资源,欢迎贡献者在此添加为 Llama3 精心准备的新资源!🤗
< > 在 GitHub 上更新