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 团队在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 上上传的检查点使用 torch_dtype = 'float16'
,AutoModel
API 将使用它将检查点从 torch.float32
转换为 torch.float16
。
在线权重的 dtype
大多无关紧要,除非在使用 model = AutoModelForCausalLM.from_pretrained("path", torch_dtype = "auto")
初始化模型时使用 torch_dtype="auto"
。原因是模型将首先被下载(使用在线检查点的 dtype
),然后它将被转换为 torch
的默认 dtype
(变为 torch.float32
),最后,如果在配置中提供了 torch_dtype
,它将被使用。
不建议在 float16
中训练模型,并且已知会产生 nan
;因此,模型应在 bfloat16
中训练。
提示
填写此表格即可获得 Llama3 模型的权重
该架构与 Llama2 完全相同。
tokenizer 是一个基于 tiktoken 的 BPE 模型(与 Llama2 的基于 sentencepiece 实现的 tokenizer 不同)。主要区别在于,当输入 token 是词汇表的一部分时,它会忽略 BPE 合并规则。这意味着,如果没有合并来生成
"hugging"
,则如果“hugging”
是词汇表的一部分,它将自动作为 token 返回,而不是具有最小的单元,例如["hug","ging"]
形成 2 个 token。原始模型使用
pad_id = -1
,这意味着没有 padding token。我们不能有相同的逻辑,请确保使用tokenizer.add_special_tokens({"pad_token":"<pad>"})
添加 padding 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)
初始化,这确保了编码 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
转换后,可以通过以下方式加载模型和 tokenizer
from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("/output/path") model = AutoModelForCausalLM.from_pretrained("/output/path")
请注意,执行此脚本需要足够的 CPU 内存以 float16 精度托管整个模型(即使最大的版本以多个检查点的形式提供,它们也各自包含模型权重的部分,因此我们需要将它们全部加载到内存中)。对于 75B 模型,因此需要 145GB 的内存。
当通过
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 上