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
大多无关紧要,除非你在使用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合并规则。这意味着如果不存在合并来生成
"hugging"
,而不是像["hug","ging"]
这样形成2个标记,如果“hugging”是词汇表的一部分,它将自动作为一个标记返回。原始模型使用
pad_id = -1
,这意味着没有填充标记。我们不能使用相同的逻辑,确保使用tokenizer.add_special_tokens({"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")
请注意,执行脚本需要足够的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添加新的精选资源!🤗
< > Update on GitHub