หนังสือออนไลน์ด้านวิศวกรรม ML
(github.com/stas00)- Machine Learning Engineering Open Book เป็นแหล่งข้อมูลสาธารณะที่รวบรวมแนวทาง เครื่องมือ และคำสั่งแบบเป็นขั้นตอน เพื่อให้สามารถฝึก ปรับจูน และทำ inference กับโมเดล LLM, VLM, RAG ได้อย่างสำเร็จ
- ผู้อ่านเป้าหมายคือ วิศวกรและผู้ปฏิบัติการด้านการฝึก LLM/VLM และมีสคริปต์กับคำสั่งที่คัดลอกไปรันได้จริงจำนวนมากเพื่อช่วยแก้ปัญหาได้อย่างรวดเร็ว
- เนื้อหาต่อยอดจากประสบการณ์ที่สั่งสมจากการฝึก BLOOM-176B ในปี 2022, IDEFICS-80B ในปี 2023 และการฝึกโมเดล RAG ที่ Contextual.AI ในปี 2024
- ขอบเขตครอบคลุมตั้งแต่การเลือกคลาวด์, ตัวเร่งความเร็ว·สตอเรจ·เครือข่าย, orchestration, การฝึก, inference, การดีบัก, การทดสอบ ไปจนถึงแหล่งข้อมูลต่าง ๆ และมี e-book แบบ PDF กับ EPUB ให้ด้วย
- เป็นคลังความรู้สาธารณะที่ช่วยให้ชุมชนซึ่งเข้าถึงการจัดการคลัสเตอร์คอมพิวต์ ML ขนาดใหญ่โดยตรงได้ยาก สามารถเรียนรู้ ความรู้เชิงปฏิบัติการ จากประสบการณ์ฝึกขนาดใหญ่จริงได้ทางอ้อม
จุดประสงค์ของหนังสือและผู้อ่าน
- Machine Learning Engineering Open Book เป็นชุดความรู้สาธารณะสำหรับการฝึก ปรับจูน และทำ inference ของโมเดลภาษาขนาดใหญ่และโมเดลมัลติโหมด
- มีลักษณะเป็นเอกสารเชิงเทคนิคอย่างชัดเจน และมี สคริปต์ กับคำสั่งที่คัดลอกไปรันได้เพื่อให้วิศวกรและผู้ปฏิบัติการด้านการฝึก LLM/VLM นำไปใช้ได้อย่างรวดเร็ว
- เนื้อหาในรีโพซิทอรีเริ่มต้นจากบันทึกส่วนตัวที่ใช้ย้อนกลับไปหาวิธีแก้ปัญหาซึ่งเคยค้นคว้าและใช้งานได้จริงอย่างรวดเร็ว ก่อนจะแชร์ต่อให้ชุมชน ML ที่กว้างขึ้น
ขอบเขตที่มาจากประสบการณ์จริง
- ความรู้จำนวนมากสั่งสมมาจากประสบการณ์ฝึกโมเดลขนาดใหญ่จริง
- การฝึกโอเพนซอร์ส BLOOM-176B ในปี 2022
- การฝึกโมเดลมัลติโหมด IDEFICS-80B ในปี 2023
- การฝึกโมเดล RAG ที่ Contextual.AI ในปี 2024
- มุ่งเน้นให้ชุมชนได้เรียนรู้ทางอ้อมเกี่ยวกับองค์ความรู้ในพื้นที่ที่เข้าถึงประสบการณ์ตรงได้ยาก เพราะค่าเช่าคลัสเตอร์คอมพิวต์ ML ขนาดใหญ่มีราคาสูง
หัวข้อที่จัดไว้
-
Insights
- AI Battlefield Engineering
- วิธีเลือกผู้ให้บริการคลาวด์
-
Hardware
- Compute: ตัวเร่งความเร็ว, CPU, หน่วยความจำ CPU
- Storage: ระบบไฟล์ภายในเครื่อง, แบบกระจาย, และแบบใช้ร่วมกัน
- Network: เครือข่ายภายในโหนดและระหว่างโหนด
-
Orchestration
- ระบบ orchestration สำหรับจัดการคอนเทนเนอร์และทรัพยากร
- SLURM: Simple Linux Utility for Resource Management
-
Training / Inference
- คู่มือที่เกี่ยวข้องกับการฝึกโมเดล
- อินไซต์เกี่ยวกับการทำ inference ของโมเดล
-
Development
- การดีบักและแก้ปัญหาทั้งปัญหาง่ายและปัญหายาก
- The Art of Debugging Open book ที่รวบรวมสูตรและวิธีการที่เกี่ยวข้อง
- เคล็ดลับและเครื่องมือที่ช่วยในการเขียนการทดสอบ
-
Miscellaneous
- แหล่งข้อมูลลำดับเหตุการณ์ของ LLM/VLM
ตารางเปรียบเทียบและเครื่องมือสำหรับค้นหาได้เร็ว
- ตารางเปรียบเทียบตัวเร่งความเร็วประสิทธิภาพสูงครอบคลุม TFLOPS ตามทฤษฎี รวมถึงขนาดและความเร็วหน่วยความจำของตัวเร่งความเร็ว
- ตารางเปรียบเทียบเครือข่ายครอบคลุม ความเร็วตามทฤษฎี ของเครือข่ายระหว่างโหนดและภายในโหนด
- มีทางลัดแยกต่างหากสำหรับเครื่องมือที่ใช้บ่อย
all_reduce_bench.py: เครื่องมือ benchmark throughput เครือข่ายได้ง่ายกว่าnccl-teststorch-distributed-gpu-test.py: เครื่องมือทดสอบการเชื่อมต่อระหว่างโหนดอย่างรวดเร็วmamf-finder.py: เครื่องมือค้นหาค่าการวัด TFLOPS ที่ทำได้จริงบนตัวเร่งความเร็ว
- มีทางลัดแยกต่างหากสำหรับคู่มือที่ใช้บ่อย
- วิธีดีบักที่นำไปใช้ได้เร็วเมื่อแอปพลิเคชัน PyTorch ค้างหรือพัง
- ชีตสรุปและทริกสำหรับผู้ใช้ SLURM
- วิธีสร้างโมเดล ชุดข้อมูล และ tokenizer ขนาดเล็ก
- ชุดรวม logbook การฝึก LLM/VLM ที่เปิดเผยสู่สาธารณะ
รูปแบบการเผยแพร่และการมีส่วนร่วม
- e-book ให้บริการบน Hugging Face Hub
- e-book จะถูกสร้างใหม่ราว ๆ ทุกไม่กี่สัปดาห์ และมีคำแนะนำสำหรับการ build e-book เวอร์ชันล่าสุดด้วยตนเอง
- การพูดคุยเกี่ยวกับ ML engineering สามารถทำได้ใน community discussions ของรีโพซิทอรี
- สามารถส่งบั๊ก คำผิด และข้อเสนอการปรับปรุงได้ผ่าน Issue หรือ PR
- ไลเซนส์ของเนื้อหาคือ Attribution-ShareAlike 4.0 International
- ข้อมูลอ้างอิงประกอบด้วย
Machine Learning Engineering Open Book, ปี2023-2026และ URL ของรีโพซิทอรี GitHub
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมทำงานสนับสนุนงานวิจัย โดยต้อง ดีบักการตั้งค่าการเทรน LLM แทบทุกวัน และรู้สึกว่าถ้ามีโน้ตแบบนี้ตอนเริ่มต้นคงจะดีมากจริง ๆ
ตอนนี้การเก็บข้อมูล motion capture สำหรับแอนิเมชันเกม/ภาพยนตร์มีอยู่สองระบบ คือแบบ inertial และแบบ optical แบบ inertial ทำได้ง่ายกว่าและถูกกว่า แต่มีข้อผิดพลาดและความไม่แม่นยำในการ capture มาก จึงต้องแก้ด้วยมือ ส่วนแบบ optical แม่นยำกว่าและต้องจัดการข้อมูลน้อยกว่า แต่ต้นทุนฮาร์ดแวร์และพื้นที่สูง
ไอเดียคือให้ใส่ชุด motion capture แบบ inertial พร้อมกับบันทึกเซสชันแบบ optical ไปด้วย แล้วใช้แมชชีนเลิร์นนิงเรียนรู้เพื่อ แก้ไขข้อมูล motion capture อัตโนมัติ ตามทฤษฎีแล้วน่าจะนำข้อมูลที่บันทึกด้วยแบบ inertial ผ่านแมชชีนเลิร์นนิงเพื่อให้ได้ความแม่นยำระดับ optical ได้
อยากทราบว่าเหมาะจะเป็นโปรเจกต์แรกไหม ควรแก้อย่างไรดี และมีโปรเจกต์เดิมอะไรให้ศึกษาอ้างอิงบ้างหรือไม่
ผมอยู่ในบทบาทช่วยเหลือนักวิทยาศาสตร์ประยุกต์ในงานเกี่ยวกับการเทรนและดีพลอยโมเดล และสงสัยว่าจะได้สัมผัสงานวิศวกรรมระดับต่ำกว่า เช่น การปรับแต่งประสิทธิภาพและสมรรถนะ ได้อย่างไร
ที่บริษัทมีทีมโครงสร้างพื้นฐาน ML แต่เป้าหมายเป็นการทำเครื่องมือรอบ ๆ แพลตฟอร์ม มากกว่าจะโฟกัสให้ workload รันได้อย่างเหมาะที่สุด
เช่น: https://pytorch.org/tutorials/recipes/recipes/profiler_recip...
https://www.brendangregg.com/linuxperf.html
ชอบส่วน Unsolicited Advice ในหัวข้อ AI Battlefield เป็นพิเศษ มันพูดถึงความจริงที่ทุกอย่างเคลื่อนไหวเร็วอย่างบ้าคลั่ง และภาระทางอารมณ์ที่ทำให้รู้สึกเหมือนจมน้ำอยู่ตลอดเวลา ท่ามกลางความก้าวหน้าแบบไม่หยุดยั้งของการพัฒนา AI ได้อย่างสมจริงมาก
https://github.com/stas00/ml-engineering/blob/master/insight...
Slurm ใช้แพร่หลายแค่ไหน?
ไม่ทราบตัวเลขแน่ชัด แต่คาดว่าส่วนใหญ่แบบท่วมท้นของซูเปอร์คอมพิวเตอร์ Top 500 [3] น่าจะรัน Slurm อยู่ อย่างที่คนอื่น ๆ บอก ศูนย์คอมพิวติ้งเพื่อการวิจัยในสถาบันการศึกษาส่วนใหญ่ก็ใช้ Slurm และในห้องปฏิบัติการแห่งชาติของ DoE สหรัฐฯ Slurm ก็ครองตลาด
และเกร็ดสนุก ๆ ซึ่งอาจเป็นแค่ตำนานก็ได้ คือชื่อ “Simple Linux Utility for Resource Management (SLURM)” ว่ากันว่าเป็น backronym ที่มาจากเครื่องดื่ม Slurm ใน Futurama [4]
[1] https://en.wikipedia.org/wiki/Oracle_Grid_Engine
[2] https://github.com/adaptivecomputing/torque
[3] https://www.top500.org/
[4] https://futurama.fandom.com/wiki/Slurm
ลองกดสุ่มเข้าไปดูหัวข้อ reproducibility แล้วก็ยังสงสัยว่าใน distributed training ทำให้ reproducible ได้อย่างไร ถ้าทำ synchronization แบบ deterministic มันไม่ช้าลงเหรอ? แต่ก็ได้ยินมาว่าอย่างน้อยในบริษัทใหญ่บางแห่ง การเทรนสามารถทำซ้ำให้ได้ผลเดิมได้
ถ้าไม่มีงานประจำ จะหาประสบการณ์กับเรื่องพวกนี้ได้อย่างไร?
มันไม่ได้ต่างจากการเรียนเขียนโปรแกรมมากนัก ทั้งที่ยังไม่มีงานด้านโปรแกรมมิงอยู่แล้ว
แน่นอนว่าไม่ได้หมายความว่าสองอย่างนี้ง่าย แต่ต้องอาศัยความทุ่มเทมาก
เมื่อเทียบกับสายอย่างเว็บเดเวลลอปเมนต์ ตลาดงานฝั่งนี้เล็กมาก และโปรเจกต์ต่าง ๆ ต้องการผู้เชี่ยวชาญที่มีความรู้ลึกมาก งานประเภทนี้ไม่ใช่งานที่ ChatGPT หรือ Stack Overflow จะช่วยได้มากนัก
คอมมูนิตี้นี้ค่อนข้างเล็ก และการเริ่มต้นต้องมีหลายอย่าง ต้องมีความรู้แมชชีนเลิร์นนิงระดับหนึ่ง ทักษะการเขียนโค้ดที่แข็งแรง ความรู้ว่า accelerator สมัยใหม่ทำงานอย่างไร และความสามารถในการอ่านและเข้าใจ paper ในทิศทางนี้
การเลือกสิ่งที่ “ทำได้จริง” มักจะยาก ดังนั้นหลังผ่านไปสักสองสามสัปดาห์ อย่ากลัวที่จะประเมินใหม่และปรับความคาดหวังหากจำเป็น
สิ่งสำคัญคือเดินหน้าต่อไป
อยากลองทดลองสิ่งนี้ แต่ไม่มี GPU ดี ๆ เลย อยากรู้ว่าจริง ๆ แล้วทุกคนรันกันอย่างไร
ถ้าจะติดตามข้อมูลล่าสุด ควร follow บัญชี Twitter ไหนบ้าง?
มี PDF อยู่ที่ไหนไหม? เห็นคำแนะนำการ build แต่ไม่เห็นไฟล์จริง