該儲存庫包含 LLaMA 2(大型語言模型元 AI)模型的實現,這是一種生成預訓練 Transformer (GPT) 變體。實作重點在於模型架構和推理過程。程式碼經過重組並添加了大量註釋,以便於輕鬆理解架構的關鍵部分。
RMS-Normalization: RMSNorm是原始層歸一化(LayerNorm)的簡化。 LayerNorm 是一種正則化技術,可以處理內部協變量偏移問題,從而穩定層激活並提高模型收斂性。它在 LLaMA 2 中被證明是相當成功的。
激活函數: LLaMA 2 使用 SwiGLU 激活函數而不是 ReLU,從而提高了訓練性能。
旋轉位置嵌入 (RoPE):受 GPT-Neo-X 專案的啟發,LLaMA 2 在每一層都加入了旋轉位置嵌入,增強了模型的位置理解。
增加上下文長度和分組查詢注意力 (GQA): LLaMA 2 模型具有雙倍上下文視窗(從 2048 到 4096 個標記)並採用分組查詢注意力。這可以更好地處理長文件、聊天歷史和摘要任務。
KV 快取是此實作中採用的關鍵最佳化技術,用於加速語言模型 (LM) 解碼的推理過程。在自迴歸解碼過程中,每個標記都是根據先前的標記進行預測的,模型中的自註意力是因果關係。這意味著令牌的表示僅基於其自身和先前的令牌而不是未來的令牌來計算。
在自註意力中,使用鍵、值和查詢投影來投影輸入序列。 KV 快取有效地儲存鍵和值投影的結果,消除了未來解碼迭代中冗餘計算的需要。因此,可以從快取中檢索在自回歸解碼期間保持固定的令牌表示,從而顯著提高推理速度。
這種 KV 快取技術是一項關鍵的架構功能,可提高 LLaMA 模型在解碼過程中的效率和速度。
LLaMA 2 模型融合了 Shazeer (2019) 提出的多查詢注意力 (MQA) 概念的變體,這是多頭注意力 (MHA) 演算法的改進。 MQA 提高了注意力機制的效率,同時保持了最小的準確性下降。
在傳統的多頭注意力中,整個注意力計算被複製 h 次,其中 h 是注意力頭的數量。然而,GQA 透過從 K 和 V 值中刪除或顯著減少頭部尺寸 (h) 來減少計算冗餘。在 MQA 中,查詢值 (Q) 的每個「頭」都會經歷相同的 K 和 V 變換,從而優化注意力計算。
這種改進帶來了與 MHA 類似的計算性能,但顯著減少了從記憶體讀取/寫入的資料量。因此,GQA 提高了效能(透過增加算術強度)和記憶體空間效率(透過減少儲存的 KV 快取資料量),使其成為 LLaMA 架構的一個有價值的補充。
在 LLaMA 2 模型中,旋轉位置嵌入 (RoPE) 透過將位置資訊合併到令牌表示中,在增強注意力機制方面發揮著至關重要的作用。 「注意力」的概念很強大,但為了確保計算出的注意力有意義,代幣需要有一個位置的概念。
位置嵌入有兩種主要類型:絕對和相對。絕對位置嵌入對輸入短語中單字的絕對位置進行編碼,而相對位置嵌入對兩個單字之間的相對位置進行編碼。這些嵌入提供了重要的位置信息,幫助標記理解它們在序列中的上下文。
旋轉位置嵌入採用獨特的方法,利用旋轉矩陣來嵌入位置資訊。目標是確保向量 q 和 k 在位置 m 和 n 的內積只取決於 q、k 及其相對距離 (m — n)。旋轉矩陣(其中角度是向量的位置)透過矩陣乘法嵌入到原始向量中,與此標準對齊。
這種整合位置資訊的創新方法增強了模型理解令牌關係和上下文的能力,有助於改善注意力機制。
model.py
:包含 LLaMA 變壓器模型的實現,以及解釋每個組件和功能的詳細註釋。
inference.py
:示範如何使用經過訓練的 LLaMA 模型進行推理,提供對輸入和輸出處理的深入了解。
請隨意探索程式碼,糾正任何錯誤,並嘗試 LLaMA 2 模型!