Transformers 文件

Llama3

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Llama3

PyTorch Flax
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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.