- rasbt/LLMs-from-scratch เป็นรีโพซิทอรีที่มีโค้ดสำหรับ พัฒนา, pretrain และ fine-tune LLM คล้าย GPT และเป็นรีโพซิทอรีโค้ดอย่างเป็นทางการของหนังสือ Manning Build a Large Language Model (From Scratch)
- แนวทางการเรียนรู้ถูกจัดเป็นกระบวนการสร้าง โมเดลขนาดเล็กแต่ใช้งานได้จริง ตั้งแต่เริ่มต้นเพื่อวัตถุประสงค์ด้านการศึกษา โดยดำเนินไปในลักษณะคล้ายกับแนวทางการสร้างโมเดลฐานขนาดใหญ่ที่อยู่เบื้องหลัง ChatGPT
- เนื้อหามีโค้ดและโน้ตบุ๊กแยกตามบท ครอบคลุมการประมวลผลข้อมูลข้อความ, กลไก attention, การสร้าง GPT, การ pretrain ด้วยข้อมูลไม่มี label, การ fine-tune สำหรับการจำแนกข้อความ ไปจนถึง instruction-following fine-tuning
- โค้ดของบทหลักออกแบบมาให้รันได้ภายในเวลาที่เหมาะสมบนโน้ตบุ๊กทั่วไป ใช้ GPU โดยอัตโนมัติ เมื่อมี และสร้างด้วย PyTorch โดยไม่ใช้ไลบรารี LLM ภายนอก
- ภาคผนวกและเนื้อหาโบนัสขยายไปถึง LoRA, KV Cache, MoE, การสร้างโมเดลตระกูล Llama/Qwen/Gemma, การประเมินผล, DPO และตัวอย่าง UI ช่วยให้ขยายการฝึก LLM แบบลงมือทำได้กว้างขึ้น
วัตถุประสงค์ของรีโพซิทอรีและความสัมพันธ์กับหนังสือ
- rasbt/LLMs-from-scratch เป็นรีโพซิทอรีโค้ดสำหรับ สร้าง LLM คล้าย GPT ตั้งแต่เริ่มต้น
- จัดทำเป็นรีโพซิทอรีโค้ดอย่างเป็นทางการของหนังสือ Manning Build a Large Language Model (From Scratch)
- หนังสือมีโครงสร้างเพื่อทำความเข้าใจว่า LLM ทำงานภายในอย่างไรผ่านการเขียนโค้ดทีละขั้นตอน
- คำอธิบายประกอบด้วยข้อความ ไดอะแกรม และตัวอย่าง
- ผู้อ่านจะได้พัฒนาและฝึกโมเดลขนาดเล็กแต่ใช้งานได้จริงเพื่อการศึกษาโดยตรง
- รีโพซิทอรียังมีโค้ดสำหรับโหลด น้ำหนักโมเดลที่ผ่านการ pretrain ขนาดใหญ่กว่าเพื่อนำมา fine-tune
- ข้อมูลหนังสือ:
การติดตั้งและการใช้โค้ด
- สามารถรับรีโพซิทอรีได้ด้วยการดาวน์โหลด ZIP หรือใช้
git clone
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
- หากได้รับชุดโค้ดจากเว็บไซต์ Manning จะมีคำแนะนำให้ตรวจสอบอัปเดตล่าสุดจากรีโพซิทอรีทางการบน GitHub
- การติดตั้ง Python และแพ็กเกจ รวมถึงการตั้งค่าสภาพแวดล้อมโค้ด อธิบายไว้ใน setup/README.md
- เอกสารแก้ปัญหามีให้ใน Troubleshooting Guide
ลำดับการเรียนรู้ตามบท
- หนังสือและรีโพซิทอรีแบ่งการสร้าง LLM เป็น หลักสูตรแบบเป็นขั้นตอน
- โครงสร้างบทหลัก:
- Ch 1: ทำความเข้าใจ LLM, ไม่มีโค้ด
- Ch 2: จัดการข้อมูลข้อความ
- Ch 3: สร้างกลไก attention
- Ch 4: สร้างโมเดล GPT ตั้งแต่เริ่มต้น
- Ch 5: pretrain ด้วยข้อมูลไม่มี label
- Ch 6: fine-tune สำหรับการจำแนกข้อความ
- Ch 7: instruction-following fine-tuning
- ภาคผนวกมีบทนำสู่ PyTorch, เอกสารอ้างอิง, เฉลยแบบฝึกหัด, การปรับปรุง training loop และ parameter-efficient fine-tuning ด้วย LoRA
ความรู้พื้นฐานและสภาพแวดล้อมในการรัน
- ความรู้พื้นฐานที่สำคัญที่สุดคือพื้นฐาน การเขียนโปรแกรม Python
- หากมีประสบการณ์กับโครงข่ายประสาทเทียมด้าน deep learning จะช่วยให้คุ้นเคยกับบางแนวคิดมากขึ้น
- โค้ดสร้างขึ้นตั้งแต่เริ่มต้นด้วย PyTorch โดยไม่ใช้ไลบรารี LLM ภายนอก
- ไม่จำเป็นต้องเชี่ยวชาญ PyTorch
- ความรู้พื้นฐานของ PyTorch จะเป็นประโยชน์
- Appendix A ให้คำแนะนำสั้น ๆ เกี่ยวกับ PyTorch
- โค้ดในบทหลักออกแบบมาให้รันได้ภายในเวลาที่เหมาะสมบนโน้ตบุ๊กทั่วไป
- ไม่จำเป็นต้องใช้ฮาร์ดแวร์พิเศษ และหากมี GPU จะใช้งานโดยอัตโนมัติ
วิดีโอคอร์สและหนังสือภาคต่อ
- Manning มี วิดีโอคอร์สประกอบความยาว 17 ชั่วโมง 15 นาที ที่เดินตามโครงสร้างของหนังสือ
- สะท้อนโครงสร้างของแต่ละบทและแต่ละส่วนในหนังสือ
- ใช้เป็นทางเลือกแบบแยกเดี่ยว หรือเป็นสื่อเสริมสำหรับเขียนโค้ดตามได้
- มีการแนะนำหนังสือที่มีลักษณะเป็นภาคต่อ Build A Reasoning Model (From Scratch) ด้วย
- เป็นหนังสือแยกเล่ม แต่ถือได้ว่าเป็นภาคต่อของ Build A Large Language Model (From Scratch)
- เริ่มจากโมเดลที่ผ่านการ pretrain แล้ว และสร้างแนวทางเพื่อยกระดับความสามารถด้าน reasoning
- แนวทางที่รวมอยู่: inference-time scaling, reinforcement learning, distillation
- รีโพซิทอรีที่เกี่ยวข้อง: rasbt/reasoning-from-scratch
แบบฝึกหัดและเนื้อหาโบนัส
- แต่ละบทมี แบบฝึกหัด หลายข้อ
- เฉลยสรุปไว้ใน Appendix C และโน้ตบุ๊กโค้ดที่สอดคล้องกันอยู่ในโฟลเดอร์ของแต่ละบท
- สามารถรับ PDF ฟรี 170 หน้า Test Yourself On Build a Large Language Model (From Scratch) ได้จากเว็บไซต์ Manning
- มีควิซและเฉลยประมาณ 30 ข้อต่อบท
-
หัวข้อโบนัสหลัก
- Setup:
- เคล็ดลับการตั้งค่า Python
- การติดตั้งแพ็กเกจและไลบรารี
- การตั้งค่าสภาพแวดล้อม Docker
- Ch 2:
- สร้าง BPE tokenizer ตั้งแต่เริ่มต้น
- เปรียบเทียบการสร้าง BPE หลายแบบ
- ความแตกต่างระหว่าง embedding layer กับ linear layer
- สร้างความเข้าใจเชิงสัญชาตญาณเกี่ยวกับ dataloader ด้วยตัวเลขง่าย ๆ
- Ch 3:
- เปรียบเทียบการสร้าง multi-head attention ที่มีประสิทธิภาพ
- ทำความเข้าใจ PyTorch buffers
- Ch 4:
- วิเคราะห์ FLOPs
- KV Cache
- Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
- Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
- Mixture-of-Experts
- Ch 5:
- วิธีโหลดน้ำหนักทางเลือก
- pretrain ด้วยชุดข้อมูล Project Gutenberg
- ปรับปรุง training loop
- เพิ่มประสิทธิภาพ hyperparameter
- UI สำหรับโต้ตอบกับ LLM ที่ผ่านการ pretrain
- แปลง GPT เป็น Llama
- โหลดน้ำหนักโมเดลแบบประหยัดหน่วยความจำ
- ขยาย Tiktoken BPE tokenizer
- เคล็ดลับประสิทธิภาพ PyTorch สำหรับฝึก LLM ให้เร็ว
- การสร้าง Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4
- Ch 6:
- การทดลองเพิ่มเติมเพื่อ fine-tune เลเยอร์อื่นและโมเดลที่ใหญ่ขึ้น
- fine-tune การจำแนกด้วยชุดข้อมูลรีวิวภาพยนตร์ IMDb 50k รายการ
- UI ตัวจำแนกสแปมบนพื้นฐาน GPT
- Ch 7:
- ยูทิลิตีชุดข้อมูลสำหรับตรวจจับรายการซ้ำใกล้เคียงและสร้างรายการ passive voice
- ประเมินคำตอบตามคำสั่งด้วย OpenAI API และ Ollama
- สร้างและปรับปรุงชุดข้อมูล instruction fine-tuning
- สร้าง preference dataset ด้วย Llama 3.1 70B และ Ollama
- สร้างการ align LLM ด้วย DPO
- UI โมเดล GPT ที่ผ่าน instruction fine-tuning
การมีส่วนร่วมและการอ้างอิง
- รับฟีดแบ็กและคำถามผ่าน Manning Forum หรือ GitHub Discussions
- เนื่องจากเป็นรีโพซิทอรีโค้ดที่สอดคล้องกับหนังสือฉบับพิมพ์ ปัจจุบันจึงไม่รับการมีส่วนร่วมที่ขยายเนื้อหาของ main chapter code
- เป็นข้อจำกัดเพื่อไม่ให้เกิดความแตกต่างระหว่างหนังสือฉบับเล่มกับโค้ด
- หากหนังสือหรือโค้ดมีประโยชน์ต่องานวิจัย แนะนำให้อ้างอิง
- มี citation แบบ Chicago-style และรายการ BibTeX ให้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ตอนนี้ดูเหมือนว่า คู่มือการ fine-tuning จะเป็นแหล่งข้อมูลที่ดีที่สุด
https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
LLM เป็นหัวข้อสำคัญ แต่มีวิดีโอและบทความจำนวนมากที่อธิบายแบบผ่าน ๆ ไป ผมคิดว่าการเขียนโค้ด LLM จากระดับล่างสุดขึ้นมาจะช่วยให้หลายแนวคิดชัดเจนขึ้น
เป้าหมายรองคือช่วยให้คนที่ต้องการสามารถสร้าง LLM ของตัวเองได้ ในหนังสือจะเขียนโค้ดทั้ง pipeline รวมถึง pretraining และ fine-tuning แต่เพราะมองว่าการ pretrain LLM ด้วยตัวเองไม่สมจริงในเชิงการเงิน จึงมีแผนจะแสดงวิธี โหลดน้ำหนักที่ pretrain ไว้แล้ว ด้วย
ใช้ LLM ที่คล้าย GPT-2 เพื่อทำทุกอย่างตั้งแต่ต้น และเปิดให้โหลดน้ำหนักได้ตั้งแต่โมเดล 124M ที่รันบนโน้ตบุ๊กได้ ไปจนถึงโมเดล 1558M ที่รันบน GPU ขนาดเล็กได้ ในทางปฏิบัติจริงก็คงใช้เฟรมเวิร์กอย่าง HF transformers หรือ axolotl แต่หวังว่าวิธีลงมือทำเองแบบนี้จะทำให้กระบวนการดูเป็น black box น้อยลง
import torchก็คงไม่ใช่การ สร้างตั้งแต่ต้นจริง ๆ ล่ะมั้ง :-)ไม่มีใครที่ทำงานในสายนี้คำนวณอนุพันธ์ของโมเดลแบบนี้ด้วยมือกันอยู่แล้ว การคิดในกรอบของ differentiable programming เป็นสมมติฐานพื้นฐาน และในกรณีนี้ก็นับว่าเป็น “ตั้งแต่ต้น” ได้อย่างเพียงพอ
ทุกครั้งที่เห็นคอมเมนต์แบบนี้ก็อดสงสัยไม่ได้ว่าคนพูดอาจยังไม่ค่อยเข้าใจว่าข้างในเกิดอะไรขึ้น หรือ machine learning สมัยใหม่ทำงานอย่างไร
[1] https://karpathy.ai/zero-to-hero.html
เข้าถึงง่ายกว่ามากสำหรับนักพัฒนาทั่วไป และไม่ได้ตั้งสมมติฐานว่าต้องมีพื้นฐานคณิตศาสตร์ เป็นจุดเริ่มต้นที่ดี และหลังจากนั้นคุณจะเริ่มเข้าใจแหล่งข้อมูลแนวเดียวกันอื่น ๆ ได้ดีขึ้น
การทำสื่อการสอนต้องใช้แรงงานมหาศาลแบบไม่น่าเชื่อ และต่อให้หนังสือเล่มนี้ประสบความสำเร็จมากแค่ไหน ถ้า rasbt เอาเวลาที่ลงไปมาเทียบกับรายได้ ก็คงออกมาเป็นค่าแรงต่อชั่วโมงที่ไม่สมเหตุสมผลอยู่ดี
มีคนมากมายที่เข้าใจหัวข้อนี้ แต่พวกเขาเอาความรู้นั้นไปทำอะไร? ก็เก็บไว้คนเดียว ไปทำงานที่ OpenAI และรักษาความรู้นั้นไว้แบบไม่เปิดเผย พร้อมหาเงินได้มากกว่านี้อีกมาก
ถ้าคุณอยากอยู่ในโลกที่ความรู้แบบนี้เปิดกว้าง ผมคิดว่าอย่างน้อยก็ควรหลีกเลี่ยงการออกมาบ่นต่อสาธารณะเรื่องราคาหนังสือที่พอ ๆ กับมื้อเย็นดี ๆ หนึ่งมื้อ
เป้าหมายคือให้บางอย่างเรียนรู้การลงจอด คล้ายยานลงจอดบนดวงจันทร์ โดยเริ่มแบบง่าย ๆ ที่ความสูง 100 ฟุต ให้แรงขับไปทางเดียว และลองซ้ำไปเรื่อย ๆ จนทำหลุมน้อยลง
จากนั้นอยากเพิ่มตัวแปรอย่างการเคลื่อนที่แนวนอน ใส่ thruster แนวนอน แล้วต่อมาก็เอา thruster แนวนอนออกและให้ยานลงจอดหมุนได้ เป็นการค่อย ๆ ขยายโจทย์
ผมไม่รู้เลยว่าควรเริ่มจากตรงไหน และเพราะหนังสือเล่มนี้ดูเป็น machine learning แบบ “กระแสหลัก” เลยสงสัยว่าจะช่วยได้ไหม
ในไลบรารี gymnasium[1] ของ Python มี environment สำหรับยานลงจอดให้ดูเป็นตัวอย่าง ซึ่งเป็น environment ที่ผมโฟกัสมากที่สุดตอนเรียน และเคยลองแก้มาหลายวิธี
คุณยังดูโน้ตบุ๊กของผม2 ที่ใช้ตอน implement Soft Actor Critic ด้วย PyTorch ได้ด้วย อาจไม่ได้เป็นสื่อสอนที่ดีนัก แต่บางทีอาจพอได้อะไรจากมัน
[0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
[1]: https://gymnasium.farama.org/environments/box2d/
แม้แต่สิ่งอย่าง AlphaGo ก็ยังอาจมองได้ว่าใกล้เคียงกับการใช้โครงข่ายประสาทเชิงลึกเป็นอินพุตให้กับเทคนิคการเรียนรู้แบบเสริมกำลังแบบคลาสสิก
Reinforcement Learning: An Introduction ของ Sutton และ Barto ได้รับการยอมรับอย่างกว้างขวางว่าเป็นตำราเริ่มต้นที่เป็นมาตรฐานของหัวข้อนี้
มีหนังสือแมชชีนเลิร์นนิง/ดีปเลิร์นนิงทั่วไปบางเล่มที่เขียนบทแนะนำการเรียนรู้แบบเสริมกำลังไว้ค่อนข้างยาว(https://github.com/rasbt/machine-learning-book/tree/main/ch1...) แต่ถึงอย่างนั้น ในกรณีนี้หนังสือเฉพาะทางด้านการเรียนรู้แบบเสริมกำลังก็ยังเหมาะกว่าอย่างที่คนอื่นพูดไว้
https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
[0] https://www.youtube.com/watch?v=kCc8FmEb1nY
แทนที่จะทำ LLM ระดับอักขระ จะพาไปสร้าง LLM ระดับคำ จริง ๆ แสดงการโหลดค่าน้ำหนักพรีเทรนหลังการพรีเทรน และทำ instruction fine-tuning ให้กับ LLM นั้น
นอกจากนี้ยังมีการโค้ดกระบวนการจัดแนวของ LLM ที่ผ่าน instruction fine-tuning แล้ว และแสดงการ fine-tuning สำหรับงานจัดประเภทด้วย ทั้งเล่มมีภาพประกอบเยอะมาก แค่บทที่ 3 ก็มีภาพ 26 ภาพแล้ว :)
วิดีโอก็ดูยอดเยี่ยมเช่นกัน เพราะยาว 2 ชั่วโมงจึงน่าจะเป็นสื่อเสริมสำหรับผู้เริ่มต้นที่แน่นดี การอ่านหนังสือน่าจะใช้เวลามากกว่านั้นราว 10 เท่า
ฉันเองก็ดูหลายรอบกว่าจะพอเข้าใจส่วนใหญ่ได้ดี
แน่นอนว่าต้องรู้ PyTorch ดีมากด้วย และต้องรู้เรื่องการคูณเมทริกซ์, backpropagation ฯลฯ อีกทั้งพูดเร็วมาก
ตัวอย่างเช่น รู้ว่าattention ถูกใช้ในโมเดลหลากหลายแบบ และ Transformer ก็ถูกใช้ในงานอื่นนอกเหนือจาก language model
เลยสงสัยว่าถ้าอ่านหนังสือเล่มนี้ จะเข้าใจ attention และ Transformer ดีพอที่จะนำไปใช้นอก language model ได้หรือไม่
ความต่างคือใน LLM จะเปลี่ยนข้อความเป็นโทเค็น แล้วแปลงโทเค็นเหล่านั้นเป็นเวกเตอร์เอ็มเบดดิงที่ป้อนเข้า LLM ส่วนใน Vision Transformer จะใช้แพตช์ของภาพเป็นโทเค็นแทนภาพทั้งภาพ แล้วแปลงสิ่งนั้นเป็นเวกเตอร์เอ็มเบดดิง
ไม่ว่าจะเป็นข้อความหรือวิชัน ก็ใช้กลไก attention แบบเดียวกัน และทั้งสองกรณีก็รับเวกเตอร์เอ็มเบดดิงเป็นอินพุต
(*บทที่ 3 ส่งไปแล้วตั้งแต่สัปดาห์ก่อน และน่าจะขึ้นบน MEAP เร็ว ๆ นี้ ระหว่างนี้ดูโค้ดพร้อมโน้ตได้ที่นี่: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)