🐦 原作者的 X • 🤗 原作者的Hugging Face • 💻 原作者的Blog • 📙 Hands-on GNN(原作者的Github) • 🗣️ Interactive GPT(原作者做的GPTS)
建議:邊學邊做自己需要或感興趣的項目是最好的,不用一步一步跟著介紹學,挑自己需要的學跟做就好了。
此 LLM 課程心得分成三個部分:
- 🧩 LLM 基礎 涵蓋了數學,Python 和神經網路等基礎知識.
- 🧑🔬 LLM 模型工程 專注在使用最新的技巧,技術搭建現階段個人可實現最好的LLMs.
- 👷 LLM 應用工程 專注在創建 LLM 驅動的應用以及部署.
與大型語言模型相關的 colab notebook 和文章清單。
名稱 | 敘述 | 連結 |
---|---|---|
🧐 LLM AutoEval | 使用 RunPod 自動評估您的LLMs | |
🥱 LazyMergekit | 使用 mergekit 一鍵輕鬆合併模型. | |
⚡ AutoGGUF | 一鍵量化 GGUF 格式的 LLM. | |
🌳 Model Family Tree | 可視化合併模型的樹狀結構圖. |
名稱 | 敘述 | 文章 | 連結 |
---|---|---|---|
Fine-tune Llama 2 in Google Colab | 微調您的第一個 Llama 2 模型的逐步指南。 | Article | |
Fine-tune LLMs with Axolotl | 最先進微調工具的端到端指南。 | Article | |
Fine-tune Mistral-7b with DPO | 使用 DPO 提升監督微調模型的性能 | Article |
名稱 | 敘述 | 文章 | 連結 |
---|---|---|---|
1. Introduction to Quantization | 使用 8 位元量化的大型語言模型最佳化。 | Article | |
2. 4-bit Quantization using GPTQ | 量化您自己的開源 LLM 以在消費性硬體上運行它們。 | Article | |
3. Quantization with GGUF and llama.cpp | 使用 llama.cpp 量化 Llama 2 模型並將 GGUF 版本上傳到 HF Hub。 | Article | |
4. ExLlamaV2: The Fastest Library to Run LLMs | 量化並執行 EXL2 模型並將其上傳至 HF Hub。 | Article |
名稱 | 敘述 | 文章 | 連結 |
---|---|---|---|
Decoding Strategies in Large Language Models | 從波束搜尋(beam search)到核採樣(nucleus sampling)的文本生成指南 | Article | |
Visualizing GPT-2's Loss Landscape | 基於權重擾動的損失景觀三維圖(3D plot of the loss landscape based on weight perturbations.) | Tweet | |
Improve ChatGPT with Knowledge Graphs | 用知識圖譜增強 ChatGPT 的答案 | Article | |
Merge LLMs with mergekit | 輕鬆創建您自己的模型,無需 GPU! | Article |
一般來說入門的話其實只要看動手深度學習中預備知識內章了解運作並能使用pytorch ,tensorflow 或 numpy 實現基本的功能就可以了。
推薦閱讀:
電子書:
在掌握機器學習之前,了解支撐了這些演算法的基本數學概念非常重要。
- 線性代數: 這對於理解許多演算法至關重要,尤其是深度學習中使用的演算法。關鍵概念包括向量、矩陣、行列式、特徵值和特徵向量、向量空間和線性變換。
- 微積分: 許多機器學習演算法涉及連續函數的最佳化,這需要了解導數、積分、極限和級數。另外多變量微積分和梯度的概念也很重要。
- 機率和統計: 這些對於理解模型如何從數據中學習並做出預測至關重要。 關鍵概念包括機率論、隨機變數、機率分佈、期望、變異數、協方差、相關性、假設檢定、信賴區間、最大似然估計和貝葉斯推理。
📚 參考資源:
- 繁中的深度學習中的數學相關資料
- 用 Python 學微積分
- 機器學習的數學基礎:矩陣篇
- 機器學習的數學基礎:向量篇
- 機器學習的數學基礎:線性代數進階篇
- Python for Probability, Statistics, and Machine Learning
- Think Bayes
- 統計分佈 方開泰教授 王元教授
- 概率論與數理統計 陳希孺教授
- Linear Regression in Python with Scikit-Learn
- 線性代數自學課程,國內外學習資源: 本文彙整國內外線性代數自學課程,提供給規劃學習線性代數的朋友們參考。
- 3Blue1Brown - 線性代數的本質: 此系列的影片介紹幾何相關的概念
- StatQuest with Josh Starmer - 統計基礎知識: 為許多統計概念提供簡單明了的解釋。
- Aerin女士的AP統計直觀理解: 提供每個機率分佈背後的Medium文章清單。
- 沉浸式線性代數: 線性代數的另一種圖像化詮釋.
- Khan Academy - 線性代數: 非常適合初學者,因為它以非常直觀的方式解釋了概念。
- Khan Academy - 微積分: 一門涵蓋微積分所有基礎知識的互動課程。
- Khan Academy - 機率與統計: 以易於理解的格式提供材料。
Python 是一種強大而靈活的程式語言,由於其可讀性、一致性和強大的資料科學庫生態系統,特別適合機器學習。
- Python基礎: Python程式設計需要很好地理解基本語法、資料類型、錯誤處理和物件導向程式設計。
- 推薦閱讀,應用-Into Python in one video
- 資料科學函式庫: 包括熟悉用於數值運算的 NumPy、用於資料操作和分析的 Pandas、用於資料視覺化的 Matplotlib 和 Seaborn。
- 推薦閱讀,應用-Visualization Curriculum
- 推薦閱讀,應用-Python資料科學分享-3.資料視覺化(1)
- 推薦閱讀,應用-Python資料科學分享-3.資料視覺化(2)
- 資料預處理: 這涉及特徵縮放和標準化、處理缺失資料、異常值檢測、分類資料編碼以及將資料拆分為訓練集、驗證集和測試集。
- 推薦閱讀,應用- 概覽[資料分析&機器學習] 第2.4講:資料前處理(Missing data, One-hot encoding, Feature Scaling)
- 推薦閱讀,應用-Python資料科學分享—2.資料處理
- 推薦閱讀,應用-[機器學習筆記]數據預處理
- 機器學習函式庫: 熟練使用 Scikit-learn(一個提供多種監督和非監督學習演算法的函式庫)至關重要。了解如何實現線性迴歸、邏輯迴歸、決策樹、隨機森林、k 最近鄰 (K-NN) 和 K 均值聚類等演算法非常重要。PCA 和 t-SNE 等降維技術也有助於視覺化高維度資料。
- 推薦閱讀,應用(裡面有ipynb)-Introducing Scikit-Learn
- 推薦閱讀,應用(裡面有ipynb)-Python 資料科學手冊(裡面有ipynb ,colab): 免費的數位書籍,是學習 pandas、NumPy、Matplotlib 和 Seaborn 的絕佳資源。
📚 資源:
- Real Python: 綜合資源,包含初學者和進階 Python 概念的文章和教學。
- freeCodeCamp - 學習 Python: 長影片,完整介紹了 Python 中的所有核心概念。
- Python 資料科學手冊: 免費的數位書籍,是學習 pandas、NumPy、Matplotlib 和 Seaborn 的絕佳資源。
- freeCodeCamp - 適合所有人的機器學習: 為初學者介紹不同的機器學習演算法。
- Udacity - 機器學習簡介: 免費課程,涵蓋 PCA 和其他幾個機器學習概念。
- 基礎知識: 這包括理解神經網路的結構,例如層、權重、偏差和激活函數(sigmoid、tanh、ReLU 等)
- 3Blue1Brown - 什麼是神經網路?: 該影片直觀地解釋了神經網路及其內部運作原理。
- 深度學習框架: 目前是在深度學習框架方面還是 Pytorch 最熱門,但是有些老應用跟某些 Google 相關的應用仍還是使用 Tensorflow 。假如要入門的話建議下面四個連結找一個入門並實作一個應用即可。
- freeCodeCamp - 深度學習速成課程: 此影片簡潔地介紹了深度學習中所有最重要的概念。
- 動手深度學習官網
- 動手深度學習包含 tensorflow,pytorch 程式碼的教學,不過要自己debug
- pytorch官網教學:建議學習路線: Introduction to PyTorch ->Image and Video ,Audio ,Text 按需學習,只學需要的就好(建議只先選一個)。
- tensorflow 官網教學: Begginner -> Adanced(也是建議按需學習)
- 訓練與最佳化: 熟悉反向傳播和不同類型的損失函數,例如均方誤差 (MSE) 和交叉熵。了解各種最佳化演算法,例如梯度下降、隨機梯度下降、RMSprop 和 Adam。 神經網路是許多機器學習模型的基本組成部分,特別是在深度學習領域。為了有效地利用它們,全面了解它們的設計和機制至關重要。
- 過度擬合: 了解過度擬合的概念(模型在訓練資料上表現良好,但在未見過的資料上表現不佳)並學習各種正則化技術(dropout、L1/L2 正則化、提前停止、資料增強)來防止過度擬合。
- 實作多層感知器 (MLP): 使用 PyTorch 建構 MLP,也稱為全連接網路。
📚 其他資源:
- Patrick Loeber - PyTorch 教學: 為初學者學習 PyTorch 的系列影片。
NLP 是人工智慧的一個令人著迷的分支,它彌合了人類語言和機器理解之間的差距。從簡單的文字處理到理解語言的細微差別,NLP 在翻譯、情緒分析、聊天機器人等許多應用中發揮著至關重要的作用。
- 文字預處理: 學習各種文字預處理步驟,例如分詞(將文字分割成單字或句子)、詞幹擷取(將單字還原為其詞根形式)、詞形還原(與詞幹擷取類似,但考慮上下文)、停用詞刪除等。
- 特徵提取技術: 熟悉將文字資料轉換為機器學習演算法可以理解的格式的技術。主要方法包括詞袋 (BoW)、詞頻-逆文檔頻率 (TF-IDF) 和 n-gram。
- 詞嵌入: 詞嵌入是一種詞表示形式,允許具有相似意義的詞具有相似的表示形式。主要方法包括 Word2Vec、GloVe 和 FastText。
- Jay Alammar - The Illustration Word2Vec:了解著名 Word2Vec 架構的一個好材料。
- 遞歸神經網路 (RNN): 了解 RNN 的工作原理,RNN 是一種設計用於處理序列資料的神經網路。探索 LSTM 和 GRU,這兩種能夠學習長期依賴關係的 RNN 變體。
- Jake Tae - PyTorch RNN from Scratch: 在 PyTorch 中實用且簡單地實作 RNN、LSTM 和 GRU 模型。
- colah's blog - Understanding LSTM Networks: 一篇更理論性的 LSTM 網路文章。
- 基於 Transformer 跟預訓練模型的 NLP: 由於基於類 Transformer 的模型能處理之前其他 經典 NLP 模型處理的任務,並且大部分任務能做得更好,所以我覺得這是必學的一部分。
📚 Resources:
- RealPython - NLP with spaCy in Python: 有關 Python 中用於 NLP 任務的 spaCy 函式庫的詳細指南。
- Kaggle - NLP Guide:一些 notebooks 和資源,用於 Python 中 NLP 的實踐解釋。
本課程的這一部分重點在於學習如何使用最新技術來建立最好的 LLMs。
雖然不需要深入了解 Transformer 架構,但深入了解其輸入(tokens 令牌)和輸出(logits)非常重要。普通的注意力機制是另一個需要掌握的關鍵組成部分,稍後會介紹它的改進版本。
-
高階視圖 High-level view: 重新審視編碼器-解碼器 Transformer 架構,更具體地說,是僅解碼器的 GPT 架構,該架構在每個最近的 LLM 中基本都有使用。
-
LLM Foundations: 影片搭配教材的講解。
-
Let's build GPT: from scratch, in code, spelled out.: 影片搭配教材的講解。
-
LLM-from-scratch.ipynb: 實際簡單版的程式碼。
-
[1hr Talk] Intro to Large Language Models: 影片搭配教材的講解。
-
-
標記化 Tokenization: 了解如何將原始文字資料轉換為模型可以理解的格式,這涉及將文字拆分為標記(通常是單字或子單字)。
- Let's build the GPT Tokenizer: 影片搭配教材的講解。
-
注意力機制: 掌握注意力機制背後的理論,包括自註意力和縮放點積注意力,這使得模型在產生輸出時能夠專注於輸入的不同部分。
- 動手深度學習-注意力機制 ( 其實上面的影片有覆蓋到 )
-
文字生成: 了解模型產生輸出序列的不同方式。常見的策略包括貪婪解碼(greedy decoding)、波束搜尋(beam searc)、top-k 採樣(top-k sampling)和核採樣(nucleus sampling)。
- HuggingFace的 Transformer教學:建議以建立應用為目標,從導入,微調,部署整個流程跑一遍。
- 史丹佛的Transformers課,從架構到應用都有 CS25: Transformers United V3
- Youtube Transformers United 上課錄影Stanford CS25: V1 I Transformers United: DL Models that have revolutionized NLP, CV, RL
📚 參考資料:
- Building LLMs from Scratch 從零開始 build LLMs。
- Transformer 插圖 by Jay Alammar: Transformer 模型的直觀解釋。
- GPT-2圖解 by Jay Alammar: 此文比上一篇文章想對更重要些,它專注於和 Llama 非常相似的 GPT 架構。
- LLM Visualization by Brendan Bycroft: 以 3D 視覺化方式呈現 LLM 內部發生的情況。
- nanoGPT by Andrej Karpathy:一段 2 小時長的 YouTube 影片,用於從頭開始重新實現 GPT(以程式設計師的視角)。
- Attention? Attention! by Lilian Weng: 以更正式的方式介紹注意力的必要性。
- Decoding Strategies in LLMs: 提供對生成文本的不同解碼策略的圖像化介紹以及程式碼。
雖然從維基百科和其他網站找到原始資料很容易,但在很多的環境中收集成對的指示,範例和答案卻很困難。與傳統機器學習一樣,資料集的品質將直接影響模型的品質,這就是為什麼它可能是微調過程中最重要的組成部分。
- 類似 Alpaca-的資料集: 使用 OpenAI API (GPT) 從頭開始產生合成資料。您可以指定種子和系統提示來建立多樣化的資料集。
- 進階技巧: 了解如何使用Evol-Instruct改進現有資料集,如何產生和Orca 和 phi-1 論文中類似的高品質合成資料.
- 資料過濾: 涉及正規表示式、刪除近似重複項、關注具有大量標記的答案等的傳統技巧.
- 相關內容如參考資料
- 提示詞模板: 目前還沒有真正的標準方法來格式來標準化說明範本和答案,這就是為什麼了解不同的聊天範本很重要, 像是 ChatML, Alpaca 等.
- 相關內容如參考資料
📚 參考資料:
- Preparing a Dataset for Instruction tuning by Thomas Capelle: Alpaca 和 Alpaca-GPT4 資料集的探索以及如何標準化資料.
- Generating a Clinical Instruction Dataset by Solano Todeschini: 有關如何使用 GPT-4 建立綜合指導資料集的教學.
- GPT 3.5 for news classification by Kshitiz Sahay: 使用 GPT 3.5 建立範例資料集來微調 Llama 2 的新聞分類.
- Dataset creation for fine-tuning LLM: 包含一些過濾資料集和上傳結果技術的 Notebook .
- Chat Template by Matthew Carrigan: 關於提示模板的 Hugging Face 頁面
預訓練是一個非常漫長且成本高昂的過程,這就是為什麼這不是本課程的重點。但是對預訓練期間發生的情況有一定程度的了解是很好的。簡單來說,了解可以,實現沒四千萬別做,目前已知花最少錢訓練的是10萬美元,另外,我從新聞得知通常的訓練成本是1200萬美元左右。
-
目前號稱完全開源的預訓練模型:
- 1.olmo:號稱真正開源!AI2釋出OLMo語言模型和所有相關資料
- 2.LLM 360: 開源大語言模型框架,包含訓練和資料準備代碼、資料、指標和模型。
- 3.全球首個完全開源的大語言模型Dolly,性能堪比 GPT3.5!
-
資料處理流程: 預訓練需要龐大的資料集 (例如: Llama 2 使用 2 兆個tokens進行訓練) ,需要將這些資料集過濾、標記化並與預先定義的詞彙進行整理。
- LLMDataHub by Junhao Zhao: 用於預訓練、微調和 RLHF 的精選資料集清單。
- Training a causal language model from scratch by Hugging Face: 使用 Transformers 庫從頭開始預先訓練 GPT-2 模型。
- TinyLlama by Zhang et al.: 可在此項目很好地了解 Llama 模型是如何從頭開始訓練的。
- 使用pytorch,用搭积木的方式实现完整的Transformer模型
-
因果語言建模(Causal language modeling): 了解因果語言建模和掩碼語言建模(causal and masked language modeling)之間的區別,以及本例中使用的損失函數。更多高效率的預訓練知識可前往 Megatron-LM 或gpt-neox了解。
- Causal language modeling by Hugging Face: 解釋因果語言建模和屏蔽語言建模之間的差異以及如何快速微調 DistilGPT-2 模型。
-
縮放的規律: 縮放的規律 根據模型大小、資料集大小和用於訓練的計算量描述預期的模型性能。
- Chinchilla's wild implications by nostalgebraist: 討論縮放定律並解釋它們對大語言模型的意義。
-
高效能運算: 這有點超出了本文的範圍,但如果您打算從頭開始創建自己的LLMs(大語言模型)(硬體、分散式工作負載等),那麼更多有關 HPC 的知識是對你而言是必要的。
📚 參考資料:
- BLOOM by BigScience: 描述如何建立 BLOOM 模型的 Notion 頁面,其中包含大量有關工程部分和遇到問題的有用資訊。
- OPT-175 Logbook by Meta: 研究日誌顯示出了什麼錯的以及什麼是正確的。如果您計劃預先訓練非常大的語言模型(在本例中為 175B 參數),則非常有用。
預訓練模型僅針對下一個標記(next-token)預測任務進行訓練,這就是為什麼它們不是有用的助手。SFT 允許您調整它們以回應指令。此外,它允許您根據任何資料(私人資料、GPT-4 無法看到的資料等)微調您的模型並使用它,而無需支付 OpenAI 等 API 的費用。
- 簡介跟教學:
- 用人話講解微調技術:請只專注技術。
- Finetuning Large Language Models: Deeplearning.ai 的微調技術短課程,適合快速入門。
- 全微調: 全微調是指訓練模型中的所有參數 ( 就是模型訓練,只是資料量不多,並且資料通常是特定任務或子領域上的 )。這不是一種有效的技術,但它會產生稍微好一點的結果.
- The Novice's LLM Training Guide by Alpin: 概述微調 LLM 時要考慮的主要概念和參數.
- LoRA: 一種基於低階適配器(low-rank adapters)的高效參數微調技術(PEFT)。我們不訓練所有參數,而是只訓練這些適配器(adapters)。
- LoRA insights by Sebastian Raschka: 有關 LoRA 以及如何選擇最佳參數的實用見解.
- Fine-Tune Your Own Llama 2 Model: 有關如何使用 Hugging Face 庫微調 Llama 2 模型的實作教學.
- Padding Large Language Models by Benjamin Marie: 為因果LLMs(causal LLMs)填充訓練範例的最佳實踐
- QLoRA: 另一個基於 LoRA 的 PEFT,它還將模型的權重量化為 4 bits,並引入分頁優化器來管理記憶體峰值。將其與Unsloth結合使用,可以在免費的 Colab 筆記本上運行。
- Axolotl: 一種用戶友好且功能強大的微調工具,用於許多最先進的開源模型。
- A Beginner's Guide to LLM Fine-Tuning: 有關如何使用 Axolotl 微調 CodeLlama 模型的教學.
- DeepSpeed: 針對多 GPU 和多節點設定的 LLM 的高效預訓練和微調(在 Axolotl 中實現)。
📚 參考資料:
經過監督微調後,RLHF 是用來使 LLM 的答案與人類期望保持一致的一個步驟。這個想法是從人類(或人工)回饋中學習偏好,這可用於減少偏見、審查模型或使它們以更有用的方式行事。它比 SFT 更複雜,並且通常被視為可選項之一。
-
簡介與入門:
- An Introduction to Training LLMs using RLHF by Ayush Thakur: 這解釋了為什麼 RLHF 對於減少大語言模型的偏見和提高績效是可取的。
- Illustration RLHF by Hugging Face: RLHF 簡介,包括獎勵模型訓練和強化學習微調.
- RLHF from Deeplearning.ai: Deeplearning.ai 的RLHF短課程,適合快速入門。
-
偏好資料集: 這些資料集通常包含具有某種排名的多個答案,這使得它們比指令資料集更難產生.
- StackLLaMA by Hugging Face: 使用 Transformer 函式庫有效地將 LLaMA 模型與 RLHF 對齊的教學.
-
近端策略最佳化: 此演算法利用獎勵模型來預測給定文字是否被人類排名較高。然後使用該預測來最佳化 SFT 模型,並根據 KL 散度進行獎懲。
-
直接偏好優化: DPO 透過將其重新定義為分類問題來簡化流程。它使用參考模型而不是獎勵模型(無需訓練),並且只需要一個超參數,使其更加穩定和高效。
📚 參考資料:
- LLM Training: RLHF and Its Alternatives by Sebastian Rashcka: RLHF 流程和 RLAIF 等替代方案的概述.
- Fine-tune Mistral-7b with DPO:使用 DPO 微調 Mistral-7b 模型並重現NeuralHermes-2.5 的教學.
- [RL] Fine-Tuning Language Models from Human Preferences (RLHF) 論文筆記-ChatGPT鍊成術
- 详解大模型RLHF过程(配代码解读)
- LLM基石:RLHF及其替代技术
- 图解大模型RLHF系列之:人人都能看懂的PPO原理与源码解读
- RLAIF细节分享&个人想法
評估大型語言模型(LLMs)是流程中一個被低估的部分,因為評估這一個過程耗時且相對可靠性較低。你的下游任務應該指明你想要評估的內容,但記得古德哈特定律(Goodhart's law)提到的:“當一個衡量指標變成了目標,它就不再是一個好的衡量指標。”
-
簡介與入門:
- Evaluating and Debugging Generative AI Models Using Weights and Biases: Deeplearning AI 的短課程,適合快速入門。
- LLM Evaluation 如何评估一个大模型?: 別人的心得,可以參考下。
-
傳統指標 Traditional metrics: 像困惑度(perplexity)和BLEU分數這樣的指標不再像以前那樣受歡迎,因為在大多數情況下它們是有缺陷的。但了解它們以及它們適用的情境仍然很重要。
- 固定長度輸入(有最大輸入限制)模型的困惑度 by Hugging Face: 困惑度(perplexity)的概述,並使用 Transformer 庫實現了它的程式碼。
- BLEU 使用風險 by Rachael Tatman: BLEU 分數及其許多問題的概述,並提供了示例。
-
通用基準 General benchmarks: 基於語言模型評估工具箱 Language Model Evaluation Harness,Open LLM排行榜 Open LLM Leaderboard 是用於通用大型語言模型(如ChatGPT)的主要基準。還有其他受歡迎的基準,如BigBench, MT-Bench等。
- 大型語言模型評估調查 by Chang et al.: 關於評估什麼、在哪裡評估以及如何評估的綜合性論文。
-
任務特定基準 Task-specific benchmarks: 如摘要、翻譯和問答等任務有專門的基準、指標甚至子領域(醫療、金融等),例如用於生物醫學問答 PubMedQA。
-
人類評估 Human evaluation: 最可靠的評估是用戶的接受度或由人類所做的比較。如果你想知道一個模型表現得如何,最簡單但最確定的方式就是自己使用它。
📚 參考文獻:
- 聊天機器人排行榜 by lmsys: 基於人類比較的通用大型語言模型的Elo評分。
量化或壓縮是將模型的權重(和啟動值)轉換成更低精度表示的過程。例如,原本使用16位元儲存的權重可以轉換成4位元表示。這種技術愈來愈重要,用來減少與大型語言模型(LLMs)相關的計算與記憶體成本。
-
簡介:
- 量化簡介: 量化概述,absmax與零點量化,以及使用 LLM.int8()在程式碼上。
- 目前针对大模型进行量化的方法有哪些?
- 大语言模型量化相关技术
-
基礎技術: 瞭解不同的精確度層級(FP32、FP16、INT8等)以及如何使用absmax與零點技術(zero-point techniques)進行簡單的量化。
-
GGUF和llama.cpp: 最初設計用於在CPU上運行,llama.cpp 和GGUF格式已成為在消費級硬體上運行LLMs的最受歡迎的工具。
- 使用llama.cpp量化Llama模型: 關於如何使用llama.cpp和GGUF格式量化Llama 2模型的教學。
-
GPTQ和EXL2: GPTQ ,特別是 EXL2 ,提供了較快的速度,但只能在GPU上運行。模型量化也需要很長時間。
- 使用GPTQ進行4位元LLM量化:關於如何使用GPTQ演算法和AutoGPTQ量化LLM的教學。
- ExLlamaV2: 運行LLMs的最快程式庫: 指南;關於如何使用EXL2格式量化Mistral模型,並使用ExLlamaV2程式庫運行。
-
AWQ: 這種新格式比GPTQ更準確(困惑度更低),但使用的顯存更多,速度也不一定更快。
- 了解啟動感知權重量化 by FriendliAI: AWQ技術及其優勢的概述。
📚 參考文獻:
- LLM Note Day 14 - 量化 Quantization :筆記式版本的量化介紹。
- 位置嵌入 Positional embeddings: 了解大型語言模型(LLMs)如何編碼位置,特別是像 RoPE 這樣的相對位置編碼方案。實現 YaRN (通過溫度因子乘以注意力矩陣) or ALiBi (基於token距離的注意力獎懲) 來擴展上下文長度。
- Extending the RoPE by EleutherAI: 總結不同位置編碼技術的文章.
- Understanding YaRN by Rajat Chawla: 對YaRN的介紹.
- 模型融合 Model merging: 將訓練好的模型合併已成為一種流行的方式,用於創建表現優異的模型,無需任何微調。流行的 mergekit 庫實現了最受歡迎的融合方法,如e SLERP, DARE, 和 TIES。模型融合通常指的是將多個已訓練的模型合併成一個單一模型的過程。這不僅僅是平均或投票決定輸出,而是在模型的權重和結構層面上進行合併。這個過程不需要再次訓練,可以通過數學操作(如球面線性內插(SLERP)或其他融合技術)將不同模型的知識整合起來。模型融合用於創建一個表現更佳、更強大的模型,通常是將多個模型在特定任務上的優勢結合起來。
- Merge LLMs with mergekit: 關於使用mergekit進行模型融合的教程.
- 專家混合 Mixture of Experts: Mixtral 因其卓越的性能而重新使MoE架構流行起來。 與此同時,OSS社區出現了一種frankenMoE,通過融合像 Phixtral這樣的模型,這是一個更經濟且性能良好的選項。MoE是一種結構,它包含多個子模型或“專家”,每個專家專門處理不同的任務或數據子集。在MoE架構中,一個“gate”或調度器決定對於給定的輸入,哪個專家被使用。這是一種稀疏啟動方法,可以大幅提升模型的容量和效率,因為不是所有的專家都會對每個輸入進行響應。
- Mixture of Experts Explained by Hugging Face: 關於MoE及其工作方式的詳盡指南.
- 多模態模型 Multimodal models: 這些模型( CLIP, Stable Diffusion, 或 LLaVA) 處理多種類型的輸入(文本、圖像、音頻等)與統一的嵌入空間,從而解鎖了強大的應用,如文本到圖像。
- Large Multimodal Models by Chip Huyen: 對多模態系統及其近期發展歷史的概述.
- sora可能架構的解析
📚 參考文獻:
- 模型融合、混合专家、更小的LLM,几篇论文看懂2024年LLM发展方向:可以參考下,寫得算全面的。
- Ten Noteworthy AI Research Papers of 2023: 這篇文章回顧了2023年十篇值得注意的AI研究論文。涵蓋了從大規模訓練運行的洞察、開放基礎和微調聊天模型到量化LLM的高效微調等多個方面。作者強調了這些研究在透明度、方法創新和特定領域應用方面的重要性,並期待未來的研究能夠帶來更多類似的高質量論文。這篇跟上一篇是同一個作者。
本課程的這一部分重點是學習如何建立可在生產中使用的由 LLM 支援的應用程序,重點主要在增強模型和部署它們。
由於硬體要求高,運行大型語言模型可能會有困難。根據您的使用案例,您也可能只想通過API(如GPT-4)簡單地使用模型,或者在本地運行它。無論哪種情況,額外的提示和指導技術都可以改善或限制您的應用程序的輸出。
-
LLM APIs: APIs是部署LLMs的便捷方式。這個領域分別有私有LLMs (OpenAI, Google, Anthropic, Cohere, 等.) 和開源LLMs (OpenRouter, Hugging Face, Together AI, 等.).
- Building Systems with the ChatGPT API: Deeplearning AI的短課程,有興趣或需要的可以嘗試看看。
- How Business Thinkers Can Start Building AI Plugins With Semantic Kernel: Deeplearning AI的短課程,使用的是微軟的技術棧跟雲端,有興趣或需要的可以嘗試看看。
- LangChain for LLM Application Development : Deeplearning AI的短課程,這個比較偏入門級的,使用的是LangChain 的技術棧。
- Functions, Tools and Agents with LangChain : Deeplearning AI的短課程,這個稍微深入,使用的是LangChain 的技術棧,並能學會使用函數,代理Agent以集相關的工具。
-
開源 LLMs: Hugging Face Hub 是尋找LLMs的好地方。 您可以直接在 Hugging Face Spaces中運行一些模型, 或者下載並在像 LM Studio 這樣的應用程序中本地運行以及通過CLI使用 llama.cpp 或 Ollama。
- Run an LLM locally with LM Studio by Nisha Arya: 關於如何使用LM Studio的簡短指南。
-
提示工程 Prompt engineering: 常見技術包括零提示詞、少量提示詞、思維鏈與ReAct。它們在更大的模型上工作得更好,但也可以適應較小的模型。
- Prompt engineering guide by DAIR.AI: 帶有示例的提示技術的詳盡列表。
- ChatGPT Prompt Engineering for Developers : Deeplearning AI的短課程,這個比較偏入門級的。
-
結構化輸出 Structuring outputs: 許多任務需要結構化的輸出,如嚴格的模板或JSON格式。像 LMQL, Outlines, Guidance, 等庫可以用來指導生成並遵循給定的結構。
- Outlines - Quickstart: Outlines啟用的指導生成技術的列表。
- LMQL - Overview: 對LMQL語言的介紹。
創建向量儲存是建立檢索增強生成(Retrieval Augmented Generation,簡稱RAG)流程的第一步。文件被加載、拆分,並使用相關的片段來產生向量表示(嵌入),這些向量表示將被存儲以便在推理過程中使用。
- 文檔導入 Ingesting documents: 文檔加載器是方便的包裝器,可以處理多種格式: PDF, JSON, HTML, Markdown, 等。 它們還可以直接從一些數據庫和API(GitHub, Reddit, Google Drive, 等)檢索數據。
- 文檔拆分 Splitting documents: 文本拆分器將文檔拆分成較小的、語義上有意義的片段。通常最好不要在n個字符後拆分文本,而是按照標題或遞迴地拆分,並附帶一些額外的元數據。
- LangChain - Text splitters: LangChain實現的不同文本拆分器列表。
- LangChain: Chat with Your Data : Deeplearning AI的短課程,使用的是LangChain的技術棧跟雲端,有興趣或需要的可以嘗試看看。
- 嵌入模型 Embedding models: 嵌入模型將文本轉換為向量表示。這允許對語言進行更深入、更細膩的理解,這對於進行語義搜索至關重要。
- Understanding and Applying Text Embeddings: 使用google家的產品了解詞向量。
- Sentence Transformers library: 流行的嵌入模型庫。
- MTEB Leaderboard: 嵌入模型的排行榜。
- 向量數據庫 Vector databases: 向量數據庫(如 Chroma, Pinecone, Milvus, FAISS, Annoy, 等)專為儲存嵌入向量而設計。它們支援基於向量相似性有效檢索與查詢最相似的數據。
- The Top 5 Vector Databases by Moez Ali: 最佳和最流行的向量數據庫比較。
- Vector Databases: from Embeddings to Applications : Deeplearning AI的短課程,使用的是Weaviate的技術棧跟雲端,有興趣或需要的可以嘗試看看。
- Building Applications with Vector Databases : Deeplearning AI的短課程,使用的是pinecone的技術棧跟雲端,有興趣或需要的可以嘗試看看。
借助 RAG,LLMs 可以從資料庫中檢索上下文文檔,以提高答案的準確性。RAG 是一種無需任何微調即可增強模型知識的流行方法。
- Orchestrators 協作器: Orchestrators 協作器 (如 LangChain, LlamaIndex, FastRAG, 等)是流行的框架,用於將您的 LLM 與工具、資料庫、記憶體等連接起來並增強他們的能力。
- Llamaindex - High-level concepts: 建造 RAG 管道時需要了解的主要概念。
- Building and Evaluating Advanced RAG Applications: Deeplearning AI 跟 Llamaindex共同推出的短課程。
- Pinecone - Retrieval Augmentation: 檢索增強流程概述。
- Retrievers 檢索器: 使用者指令未針對檢索進行最佳化。可以應用不同的技術(例如,多查詢檢索器、 HyDE, 等)來重新表述/擴展它們並提高效能。
- LangChain - Q&A with RAG: 建立典型 RAG 管道的逐步教學。
- 記憶: 為了記住先前的說明和答案,LLM 和 ChatGPT 等聊天機器人會將此歷史記錄添加到其上下文視窗中。此緩衝區可以透過匯總(例如,使用較小的 LLM)、向量儲存 + RAG 等來改進。
- LangChain - Memory types: 不同類型記憶體及其相關用途的清單。
- 評估: 我們需要評估文件檢索(上下文精確度和召回率)和生成階段(可信度和答案相關性)。可以使用 Ragas 和 DeepEval工具進行簡化。
- RAG pipeline - Metrics: 用於評估 RAG 管道的主要指標的概述。
現實應用程式可能需要複雜的管道,包括 SQL 或圖形資料庫,以及自動選擇相關工具和 API。這些先進技術可以改進基準解決方案並提供附加功能。
- 查詢建構: 儲存在傳統數據庫中的結構化數據需要特定的查詢語言,如SQL、Cypher、元數據等。我們可以直接將用戶指令翻譯成查詢,通過查詢建構來存取數據。
- LangChain - Query Construction查詢建構: 關於不同類型查詢建構的博客文章.
- LangChain - SQL: 教程,介紹如何利用LLMs與SQL數據庫互動,包括Text-to-SQL和可選的SQL代理。
- 代理與工具: 代理透過自動選擇最相關的工具來增強LLMs的回答能力。這些工具可以像使用Google或Wikipedia那麼簡單,或者像Python解釋器或Jira這樣複雜。
- Pinecone - LLM agents(代理): 介紹不同類型的代理和工具。
- LLM Powered Autonomous Agents(代理) by Lilian Weng: 關於LLM代理的更理論性文章。
- 後處理: 處理輸入到LLM的最後一步。它通過重新排序、RAG融合和分類來增強檢索文檔的相關性和多樣性。
- LangChain - OpenAI's RAG: 概述OpenAI使用的RAG策略,包括後處理。
文本生成是一個成本高昂的過程,需要昂貴的硬體設備。除了量化之外,還有各種技術被提出以最大化吞吐量並降低推論成本。
- 主要內容:
- GPU Inference by Hugging Face: 解釋如何在GPU上優化推論.
- LLM Inference by Databricks: 實際運作中優化LLM推論的最佳實踐。
- Flash Attention 閃存注意力: 優化注意力機制,將其複雜性從二次方變成線性以加快訓練和推論速度。
- Optimizing LLMs for Speed and Memory by Hugging Face: 解釋三種主要的速度和記憶體優化技術,即量化、閃存注意力和架構創新。
- Key-value cache 鍵值快取: 請多了解鍵值快取以及多查詢注意力(Multi-Query Attention (MQA))和(分組查詢注意力Grouped-Query Attention (GQA))帶來的改進。
- Speculative decoding 投機解碼: 使用小型模型產生草稿,然後由更大的模型審核,以加快文本生成速度。
- Assisted Generation by Hugging Face: HF版本的投機解碼,這是一篇有趣的博客文章,介紹了它的工作原理及其實現代碼。
在大規模部署大型語言模型(LLMs)是一項工程壯舉,可能需要多個GPU集群。在其他情景下,演示和本地應用可以更簡單的實現運作。
- Local deployment 本地部署: 隱私是開源LLMs相對於私有LLMs的一個重要優勢。 本地LLM服務器 (LM Studio, Ollama, oobabooga, kobold.cpp, 等)利用這一優勢為本地應用提供動力。
- Demo deployment 演示部署:像 Gradio 和 Streamlit 這樣的框架有助於原型應用的開發和演示的分享。您也可以輕鬆地在線上部署,例如使用 Hugging Face Spaces。
- Streamlit - Build a basic LLM app: 使用Streamlit創建類似ChatGPT的基礎應用的教學。
- Server deployment 服務器部署: 大規模部署LLMs需要雲端 (詳見 SkyPilot) 或內部部署的基礎設施,並經常利用優化的文本生成框架,如 TGI, vLLM等。
- HF LLM Inference Container: D使用Hugging Face的推論容器在Amazon SageMaker上部署LLMs。
- Edge deployment 邊緣(中低算力)部署: 在受限環境中,高性能框架如 MLC LLM 和 mnn-llm 可以在網頁瀏覽器、Android和iOS中部署LLM。
- Philschmid blog by Philipp Schmid: 關於使用Amazon SageMaker部署LLM的高質量文章集。
- Optimizing latence 優化延遲 by Hamel Husain:比較TGI、vLLM、CTranslate2和mlc在吞吐量和延遲方面的性能。
除了與軟體相關的傳統安全問題外,由於訓練和提示的方式,大型語言模型(LLMs)還有特定的弱點。
- Prompt hacking 提示詞攻擊: 與提示工程相關的技術略有不同,提示詞注入(使用額外指令以劫持模型的答案)、數據/提示洩漏(檢索其原始數據/提示)和越獄(製作提示詞以繞過安全特性)都算在此範圍內。
- OWASP LLM Top 10 by HEGO Wiki: LLM應用程序中10個最嚴重的漏洞清單。
- Prompt Injection Primer by Joseph Thacker: 專門針對工程師的提示注入短指南。
- Backdoors 後門: 攻擊向量可以針對訓練數據本身,通過污染訓練數據(例如,使用錯誤信息)或創建後門(觸發器在推論期間秘密的改變模型行為)。
- Defensive measures 防禦措施: 保護您的LLM應用程序的最佳方式是對這些漏洞進行測試 (e.g., 例如,使用紅隊測試和像garak這樣的檢查 ) 並在實際的環境中觀察它們(使用像langfuse這樣的框架)。
📚 References:
- LLM Security by @llm_sec: 與LLM安全相關的廣泛資源列表。
- Red teaming LLMs by Microsoft: 關於如何執行LLM紅隊測試的指南。
This roadmap was inspired by the excellent DevOps Roadmap from Milan Milanović and Romano Roth.
Special thanks to:
- Thomas Thelen for motivating me to create a roadmap
- André Frade for his input and review of the first draft
- Dino Dunn for providing resources about LLM security
Disclaimer: I am not affiliated with any sources listed here.