4 คะแนน โดย GN⁺ 2024-01-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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-tests
    • torch-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 ความคิดเห็น

 
GN⁺ 2024-01-25
ความคิดเห็นบน Hacker News
  • ผมทำงานสนับสนุนงานวิจัย โดยต้อง ดีบักการตั้งค่าการเทรน LLM แทบทุกวัน และรู้สึกว่าถ้ามีโน้ตแบบนี้ตอนเริ่มต้นคงจะดีมากจริง ๆ

    • ในฐานะนักพัฒนาเกมที่กำลังพยายามเข้าสู่สาย แมชชีนเลิร์นนิง/ดีปเลิร์นนิง ความท้าทายใหญ่ที่สุดคือการหาปัญหาที่ไม่ยากเกินไปจนพอทำไปเรียนไปได้ แต่ก็มีคุณค่าจริง และเหมือนจะเจออย่างหนึ่งแล้ว เลยอยากฟังความเห็น
      ตอนนี้การเก็บข้อมูล motion capture สำหรับแอนิเมชันเกม/ภาพยนตร์มีอยู่สองระบบ คือแบบ inertial และแบบ optical แบบ inertial ทำได้ง่ายกว่าและถูกกว่า แต่มีข้อผิดพลาดและความไม่แม่นยำในการ capture มาก จึงต้องแก้ด้วยมือ ส่วนแบบ optical แม่นยำกว่าและต้องจัดการข้อมูลน้อยกว่า แต่ต้นทุนฮาร์ดแวร์และพื้นที่สูง
      ไอเดียคือให้ใส่ชุด motion capture แบบ inertial พร้อมกับบันทึกเซสชันแบบ optical ไปด้วย แล้วใช้แมชชีนเลิร์นนิงเรียนรู้เพื่อ แก้ไขข้อมูล motion capture อัตโนมัติ ตามทฤษฎีแล้วน่าจะนำข้อมูลที่บันทึกด้วยแบบ inertial ผ่านแมชชีนเลิร์นนิงเพื่อให้ได้ความแม่นยำระดับ optical ได้
      อยากทราบว่าเหมาะจะเป็นโปรเจกต์แรกไหม ควรแก้อย่างไรดี และมีโปรเจกต์เดิมอะไรให้ศึกษาอ้างอิงบ้างหรือไม่
  • ผมอยู่ในบทบาทช่วยเหลือนักวิทยาศาสตร์ประยุกต์ในงานเกี่ยวกับการเทรนและดีพลอยโมเดล และสงสัยว่าจะได้สัมผัสงานวิศวกรรมระดับต่ำกว่า เช่น การปรับแต่งประสิทธิภาพและสมรรถนะ ได้อย่างไร
    ที่บริษัทมีทีมโครงสร้างพื้นฐาน ML แต่เป้าหมายเป็นการทำเครื่องมือรอบ ๆ แพลตฟอร์ม มากกว่าจะโฟกัสให้ workload รันได้อย่างเหมาะที่สุด

    • ผมคิดว่าการ optimize เป็นไปไม่ได้ถ้าไม่มี profiling ขั้นแรกอาจเป็นการทำความคุ้นเคยกับเครื่องมือที่ใช้ทำความเข้าใจ performance ของโมเดล
      เช่น: https://pytorch.org/tutorials/recipes/recipes/profiler_recip...
    • เอกสารของ Brendan Gregg เรื่อง system performance และ profiling เป็นจุดเริ่มต้นที่ดี ปัญหา performance ของ ML จำนวนมากสุดท้ายแล้วมักลงเอยเป็นเรื่อง Linux perf หรือการทำความเข้าใจว่าในระบบ scheduling สำหรับ high-performance computing อย่าง SLURM นั้นเกิดอะไรขึ้นกันแน่
      https://www.brendangregg.com/linuxperf.html
  • ชอบส่วน Unsolicited Advice ในหัวข้อ AI Battlefield เป็นพิเศษ มันพูดถึงความจริงที่ทุกอย่างเคลื่อนไหวเร็วอย่างบ้าคลั่ง และภาระทางอารมณ์ที่ทำให้รู้สึกเหมือนจมน้ำอยู่ตลอดเวลา ท่ามกลางความก้าวหน้าแบบไม่หยุดยั้งของการพัฒนา AI ได้อย่างสมจริงมาก
    https://github.com/stas00/ml-engineering/blob/master/insight...

  • Slurm ใช้แพร่หลายแค่ไหน?

    • Slurm แทบจะมีอยู่ทุกที่ในคอมมูนิตี้ high-performance computing (HPC) ในฝั่ง HPC คู่แข่งที่คล้ายกันก็มีประมาณ resource scheduler อย่าง SGE [1] และ Torque/PBS [2]
      ไม่ทราบตัวเลขแน่ชัด แต่คาดว่าส่วนใหญ่แบบท่วมท้นของซูเปอร์คอมพิวเตอร์ 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
    • ตาม Wikipedia ระบุว่า “Slurm ถูกใช้เป็น workload manager ในซูเปอร์คอมพิวเตอร์ TOP500 ประมาณ 60%” ตลอดราว 10 ปีที่ผ่านมา ผมใช้มันเป็น frontend สำหรับจัดการงานในคลัสเตอร์ประมวลผลส่วนใหญ่
    • โมเดล Llama 2 ก็ถูกเทรนบน Slurm
    • ในเรื่องที่เกี่ยวข้อง อยากรู้ว่ามีใครประสบความสำเร็จในการ ย้ายจาก Slurm ไป Kubernetes บน physical cluster ที่เน้นเทรนโมเดลขนาดใหญ่ด้วย GPU จำนวนมากหรือไม่
    • ใช้กันในคลัสเตอร์ high-performance computing ส่วนใหญ่ ยกเว้นบางที่ที่ยังค้างอยู่กับ Torque
  • ลองกดสุ่มเข้าไปดูหัวข้อ reproducibility แล้วก็ยังสงสัยว่าใน distributed training ทำให้ reproducible ได้อย่างไร ถ้าทำ synchronization แบบ deterministic มันไม่ช้าลงเหรอ? แต่ก็ได้ยินมาว่าอย่างน้อยในบริษัทใหญ่บางแห่ง การเทรนสามารถทำซ้ำให้ได้ผลเดิมได้

    • คงอยากทำให้การอัปเดตการเทรนมีคุณสมบัติ สลับที่กันได้ มากที่สุดเท่าที่เป็นไปได้ แบบนั้นไม่ว่าจะ apply การอัปเดตตามลำดับใดก็ไม่สำคัญ
  • ถ้าไม่มีงานประจำ จะหาประสบการณ์กับเรื่องพวกนี้ได้อย่างไร?

    • อ่านแหล่งข้อมูลอย่างหนังสือที่ถูกส่งมานี้ แล้วลงมือทำโปรเจกต์เล็ก ๆ เอง
      มันไม่ได้ต่างจากการเรียนเขียนโปรแกรมมากนัก ทั้งที่ยังไม่มีงานด้านโปรแกรมมิงอยู่แล้ว
      แน่นอนว่าไม่ได้หมายความว่าสองอย่างนี้ง่าย แต่ต้องอาศัยความทุ่มเทมาก
    • ถ้าเป้าหมายคือการได้งาน ต้องตั้ง ความคาดหวังที่สมจริง
      เมื่อเทียบกับสายอย่างเว็บเดเวลลอปเมนต์ ตลาดงานฝั่งนี้เล็กมาก และโปรเจกต์ต่าง ๆ ต้องการผู้เชี่ยวชาญที่มีความรู้ลึกมาก งานประเภทนี้ไม่ใช่งานที่ ChatGPT หรือ Stack Overflow จะช่วยได้มากนัก
    • ทำ side project หรือเข้าร่วม side project ของคนอื่นก็ได้ สิ่งสำคัญที่สุดคือการ เชื่อมต่อกับคอมมูนิตี้ และเรียนรู้ภาษาทางเทคนิคที่ใช้คุยกับพวกเขาได้
      คอมมูนิตี้นี้ค่อนข้างเล็ก และการเริ่มต้นต้องมีหลายอย่าง ต้องมีความรู้แมชชีนเลิร์นนิงระดับหนึ่ง ทักษะการเขียนโค้ดที่แข็งแรง ความรู้ว่า accelerator สมัยใหม่ทำงานอย่างไร และความสามารถในการอ่านและเข้าใจ paper ในทิศทางนี้
    • จากประสบการณ์ของผม วิธีที่ดีที่สุดคือ side project อย่าเรียนแค่ตัวเทคโนโลยี แต่ให้เลือกโปรเจกต์ที่ทำได้จริงซึ่งใช้เทคโนโลยีใหม่ที่อยากเรียน แล้วลงลึกไปกับมัน
      การเลือกสิ่งที่ “ทำได้จริง” มักจะยาก ดังนั้นหลังผ่านไปสักสองสามสัปดาห์ อย่ากลัวที่จะประเมินใหม่และปรับความคาดหวังหากจำเป็น
      สิ่งสำคัญคือเดินหน้าต่อไป
    • ลองเรียน คอร์ส fast.ai ดู ด้วยความพยายามและความคิดสร้างสรรค์เล็กน้อย แม้จะใช้เวลามากกว่าสองสัปดาห์ ก็น่าจะ fine-tune โมเดลจนได้ผลลัพธ์ระดับ state-of-the-art ได้
  • อยากลองทดลองสิ่งนี้ แต่ไม่มี GPU ดี ๆ เลย อยากรู้ว่าจริง ๆ แล้วทุกคนรันกันอย่างไร

  • ถ้าจะติดตามข้อมูลล่าสุด ควร follow บัญชี Twitter ไหนบ้าง?

  • มี PDF อยู่ที่ไหนไหม? เห็นคำแนะนำการ build แต่ไม่เห็นไฟล์จริง

    • ตอนนี้มี PDF แล้ว: https://github.com/stas00/ml-engineering#pdf-version
    • น่าจะพร้อมภายในไม่กี่สัปดาห์ workflow สำหรับ build พร้อมแล้ว แต่ยังต้องจัดการ stylesheet และปรับโครงสร้างบทให้เสร็จ