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