大 AI 時代將至,你不可不讀的語言模型獨門祕笈
帶你輕鬆遨遊生成式 AI 的世界
本書內容改編自第15屆 iThome 鐵人賽 AI & Data 組冠軍系列文章《LLM 學習筆記》,這是個生成式 AI 崛起的年代,其中又以 ChatGPT 為首的大型語言模型(Large-Scale Language Model, LLM)們最為令人驚豔,但是每當我們提到 LLM 時,腦中浮現的可能都是一些參數量龐大、架構絢麗又複雜、沒有個幾千幾百張 GPU 跑不動的超複雜數學模型!
其實掌握語言模型並沒有那麼困難,本書介紹了許多在建立 LLM 相關應用時會使用到的技術:在雲端可以透過簡單的 ChatGPT API 打造有趣的塔羅占卜應用;在地端有 Hugging Face TGI、vLLM、llama.cpp 等推論框架,就算只有單顯卡也能高速部署、輕鬆玩轉各式各樣 Open Source 的 LLM。透過多種量化技術減少記憶體開銷,小顯卡也能推動大模型!還有許多文本檢索的技巧,帶你一步步構築出 RAG 實務應用。最後當然少不了,透過 LoRA 訓練手法輕鬆打造專屬於你的客製化語言模型!
筆者根據自身的實務經驗,介紹深入但是易懂的理論,使用簡單但是務實的技術,帶領大家瞭解如何在低成本、低資源的環境中打造 LLM 相關應用。無論你是求知若渴的研究員,或是躍躍欲試的工程師,都能從本書中得到滿滿的收穫!
重點摘要
✦ 語言模型
雲有 ChatGPT,地有 Llama
✦ 推論部署
不只高速生成,還要低成本量化
✦ 檢索應用
掌握提示工程,徹底瞭解 RAG
✦ 微調訓練
活用 LoRA 訓練,打造客製化模型
本書可以學到哪些知識
● 量化:減少模型的顯示卡記憶體使用量。
● 部署:將模型以後端服務的形式進行部署。
● 推論:如何達到更快速的文字生成速度。
● 微調:調整訓練模型的權重以符合應用需求。
● 檢索:從外部知識庫搜尋相關資料輔助模型生成。
● 應用:結合以上技術搭建出一個實際的應用。
目標讀者
.對 LLM 充滿好奇的讀者
.想要嘗試涉足 AI 領域的初學者
.想要簡單瞭解 LLM 相關理論的領導者
.想要深入學習 LLM 相關技術的工程師
.想要一本 AI 相關的書籍,又不想要內容太深澀難懂的休閒玩家
.擁有自己的機器,想要實際動手玩轉語言模型的深度玩家
.大 AI 時代來臨,手邊卻還沒有一本 AI 相關書籍的朋友
專業推薦
本書在鐵人賽文章的基礎上增加了更多內容。除了介紹各種常見的語言模型及其使用方式外,還補充了許多細節和實作部分,書中的程式碼附有連結至 GitHub 供參考。本書內容涵蓋了 ChatGPT 的各項使用、延伸應用及工具,還有各種神經網路語言模型的說明,例如 Transformer、LLaMa ,並且介紹了台灣常見的大型語言模型,如 Breeze、Taiwan LLM、TAIDE 等。當然,書中也詳細指導如何透過開放源碼的語言模型來建立並訓練自己的 AI 應用。感謝作者花費大量時間編寫此書,清楚地整理及介紹了大型語言模型。對於想學習大型語言模型並打造屬於自己 AI 的讀者,相信本書可以讓你事半功倍。──── 徐千洋|台灣駭客年會創辦人、CYBAVO 共同創辦人
威廷在求學時期就是個興趣廣泛的人,一聽到新觀念,會馬上深入研究。頗有心得時,還會將筆記分享給大家,是那種資工系最歡迎的自動自發的學生。長期在網路世界打滾的他也深諳網路語彙,由他來寫這本書真是再適合不過了。這本書有理論、有程式,有實作運用演練,也有趨勢新知的分享。內容論述深入淺出,範例鮮明。整本書居然涵蓋了二十多種主題,簡直物超所值,收穫滿滿!期待這本書能點燃許多人心中對 LLM 的好奇心,並成為踏入 AI 世界的最大支援火力!──── 林川傑|國立臺灣海洋大學資訊工程學系 助理教授
不管你是什麼原因想要認識 AI:是正要開始認識 AI 的新手小白,或是突然接到一個 AI 專案導入並且要馬上有一番通盤概念的苦命工程師,都非常適合閱讀這本書。本書中前半的篇章淺顯易懂,讓完全的新手也能夠輕易讀懂難啃的專業術語,後面的篇章有很多實作的專案練習;而我作為一名本科仔,依然可以透過這些實作加深印象,也補足了離校至今的新知。書中同時也穿插了許多情境式的帶入及豐富的額外小知識補充,再搭配詳細的文獻資料可供延伸學習以及深入解析。相信這本書一定可以讓大家更容易進入 AI 的世界,成為 LLM 大師指日可待!──── 林俊廷 JT Lin|iThome 鐵人賽戰友、NZXT 軟體工程師、花生大師追隨者
作者
陳威廷(Penut Chen)
在新店角落默默無聞a樂天派技術宅,不只喜歡寫程式,也喜歡跟大家分享技術,除了在網路上發表教學文章、範例專案以外,也主持過技術分享的讀書會。主要的專業在自然語言處理領域,原本從一個乏人問津的 NLP 實驗室畢業,沒想到遇上了 ChatGPT 帶來的生成式 AI 熱潮,一夜之間大家對 LLM 興趣水漲船高,然而我的薪水身價卻依然四平八穩,於是決定到 iThome 鐵人賽上抖出我的渾身解數,很榮幸的獲得了 AI & Data 組的冠軍。
在成長的路上受到許多師長與前輩的開導,深深感受到知識與學習對於一個人是如此重要,在我的心中相當尊敬這些撰寫知識、傳播知識的人們,本著「取之於社會,用之於社會」的心情,來向大家分享我對這個領域的理解與熱忱!
目錄
Ch 01 語言模型能吃嗎?
1.1 語言模型不能吃
1.2 語言模型的種類
1.2.1 N-Gram 模型
1.2.2 隱藏式馬可夫模型
1.2.3 循環神經網路
1.2.4 Transformer
1.3 Bigram 語言模型實作
1.3.1 爬取文本
1.3.2 統計建模
1.3.3 文本生成
1.4 結論
Ch 02 神經網路語言模型
2.1 文字向量
2.2 遞歸神經網路
2.3 Transformer 模型與注意力機制
2.4 Transformer 語言模型架構種類
2.4.1 Encoder 語言模型
2.4.2 Encoder-Decoder 語言模型
2.4.3 Decoder 語言模型
2.5結論
Ch 03 ChatGPT
3.1 ChatGPT 狂熱
3.2 提示 Prompt
3.2.1 Zero-Shot & Few-Shot Prompt
3.2.2 Chain-of-Thought
3.2.3 System Prompt
3.3 ChatGPT Plus
3.3.1 GPT-4
3.3.2 My GPTs
3.3.3 Ai PDF
3.4 結論
Ch 04 OpenAI API
4.1 Token
4.2 Tiktoken
4.3 Pricing
4.4 ChatGPT API
4.4.1 認證
4.4.2 基礎用法 Non-Streaming
4.4.3 串流用法 Streaming
4.4.4 文字介面聊天範例
4.4.5 文字向量 API
4.4.6 Rate Limits
4.4 結論
Ch 05 AI 實戰應用:貓貓塔羅
5.1 Gradio
5.1.1 基本用法 gr.Blocks
5.1.2 圖片元件 gr.Image
5.1.3 聊天室元件 gr.Chat
5.2 貓貓塔羅
5.2.1 素材蒐集
5.2.2 核心應用
5.2.3 完整應用
5.3 結論
Ch 06 ChatGPT 的挑戰者們
6.1 土豆挑戰 Peanut Challenge
6.2 Google Gemini
6.3 Anthropic Claude
6.4 Microsoft Copilot
6.5 訊飛星火
6.6 BreeXe
6.7 結論
Ch 07 ChatGPT 相關應用
7.1 ChatPDF
7.2 CloudGPT
7.3 Gogolook 袋鼠金融
7.4 Hotoke 佛祖 AI
7.5 AutoGPT & AgentGPT
7.6 OSENSE Qubby AI
7.7 薯條塔羅
7.8 結論
Ch 08 檢索與生成
8.1 生成式資訊檢索
8.1.1 封閉生成式資訊檢索
8.1.2 開放生成式資訊檢索
8.2 論文閱讀問答機器人實做
8.2.1 索引階段 Index Phase
8.2.2 查詢階段 Query Phase
8.2.3 分析
8.2 結論
Ch 09 走訪 LLM 訓練流程
9.1 監督式微調
9.1.1 預訓練
9.1.2 指令微調
9.2 增強式學習
9.2.1 獎勵模型
9.2.2 近端策略最佳化 PPO
9.2.3 直接偏好最佳化 DPO
9.2.4 增強式學習框架 TRL
9.3 結論
Ch 10 建立開發環境
10.1 作業系統
10.2 NVIDIA 顯示卡驅動程式
10.3 虛擬環境管理 Conda
10.3.1 安裝 Miniconda
10.3.2 Conda 基本操作
10.4 常用套件安裝
10.4.1 CMake
10.4.2 CUDA
10.5 Docker
10.6 Colab
10.7 GPU
10.8 結論
Ch 11 擁抱開源的微笑 Hugging Face Transformers
11.1 讀取模型
11.2 讀取分詞器
11.3 自動類別
11.4 文本生成
11.5 串流輸出
11.6 提示樣板
11.7 取樣參數
11.8 設定停止點
11.9 自迴歸解碼
11.10 多顯卡推論
11.11 到底是在「大」什麼?
11.12 結論
Ch 12 數若繁星的語言模型們
12.1 英文模型
12.1.1 Llama
12.1.2 Alpaca
12.1.3 Vicuna
12.1.4 TinyLlama
12.1.5 Phi
12.1.6 Mistral & Mixtral
12.2 中文模型
12.2.1 Qwen
12.2.2 Yi
12.3 臺灣模型
12.3.1 Breeze & BreeXe
12.3.2 Taiwan LLM
12.3.3 TAIDE
12.3.4 Bailong
12.3.5 FFM
12.4 其他資源
12.4.1 Awesome LLM
12.4.2 Open LLMs
12.4.3 Open LLM Leaderboard
12.5 結論
Ch 13 語言模型也懂寫程式!
13.1 StarCoder
13.2 CodeGen
13.3 CodeLlama
13.4 DeepSeek Coder
13.5 結論
Ch 14 貧民英雄,量化超人
14.1 基礎概念
14.1.1 說文解字
14.1.2 簡單推論
14.2 量化方法
14.2.1 BitsAndBytes
14.2.2 Quanto
14.2.3 GPTQ
14.2.4 AWQ
14.3 困惑度
14.4 結論
Ch 15 ggml & llama.cpp
15.1 ggml
15.2 llama.cpp
15.3 環境建置
15.4 格式轉換
15.5 主程式 main
15.6 量化工具 quantize
15.7 伺服器 server
15.8 Python Binding
15.9 速度比較
15.10 結論
Ch 16 Text Generation Inference
16.1 架設服務
16.2 基本用法
16.3 量化選項
16.4 Token 數量設定
16.5 TGI Client
16.6 速度測試
16.7 結論
Ch 17 vLLM & Paged Attention
17.1 Key-Values Cache
17.2 Paged Attention
17.3 基本用法
17.4 LLM Service
17.5 速度比較
17.6 結論
Ch 18 情境學習In-Context Learning
18.1 起源
18.2 基本
18.3 翻譯應用
18.4 文字正規化應用
18.4 結論
Ch 19 再訪檢索模型
19.1 關鍵字
19.2 BM25 Best Matching Ranking
19.3 文本向量
19.4 Text Embedding Inference
19.5 相似度
19.6 Faiss
19.7 結論
Ch 20 任務導向聊天機器人
20.1 任務導向到底是什麼呢?
20.2 有了 LLM 的 TOD 系統天下無敵?
20.3 Rasa
20.4 結論
Ch 21 LangChain
21.1 題目發想
21.2 資料來源
21.3 資料爬取
21.4 LLM
21.5 Prompt Template
21.6 Embedding Model
21.7 Vector Store
21.8 Few-Shot Prompt Template
21.9 Example Selector
21.10 Chain!
21.11 結論
Ch 22 微調語言模型DIY!
22.1 任務設計
22.2 建立資料集
22.3 訓練流程
22.4 評估測試
22.5 結論
Ch 23 PEFT & LoRA
23.1 LoRA 簡介
23.2 LoRA 原理
23.2.1 FFT 運算
23.2.2 LoRA 運算
23.2.3 合併 運算
23.3 回顧 LoRA 程式碼
23.4 LoRA 推論
23.5 QLoRA
23.6 權重合併
23.7 訓練細節
23.8 結論
Ch 24 永遠不夠長!
24.1 ChatGPT & Claude
24.2 Gradient Checkpointing
24.3 內插法 & 外插法
24.4 LongLoRA
24.5 StreamingLLM & Attention Sinks
24.6 結論
Ch 25 資料何其多,硬碟何其小
25.1 Hugging Face Datasets
25.2 預訓練資料集
25.2.1 Common Crawl
25.2.2 Project Gutenberg
25.2.3 The Pile
25.2.4 C4 & mC4
25.2.5 Stack Exchange
25.2.6 RedPajama & SlimPajama
25.2.7 The Stack & StarCoderData
25.3 對話資料集
25.3.1 Databricks Dolly
25.3.2 OASST
25.3.3 ShareGPT
25.3.4 LMSYS Chat
25.4 中文資料來源
25.4.1 政府資料開放平台
25.4.2 維基文庫
25.4.3 開放文學
25.4.4 漢籍全文資料庫
25.4.5 TAIDE
25.5 評估資料集
25.6 模型生成資料
25.7 結論
Ch 26 授權條款與社會責任
26.1 什麼是「權」?
26.2 常見授權條款
26.2.1 MIT
26.2.2 GPL & LGPL
26.2.3 Apache 2.0
26.2.4 BSD
26.2.5 CC
26.3 特殊授權條款
26.3.1 OpenRAIL
26.3.2 Llama2 License
26.4 相關爭議
26.5 結論
Ch 27 學海無涯,學無止境
27.1 論文
27.2 GitHub趨勢
27.3 Hugging Face
27.3.1 Blog
27.3.2 Trending
27.3.3 Daily Paper
27.4 iThome
27.5 與人互動
27.6 未來發展