Local Gradient Accumulation ช่วยเร่งความเร็วในการเทรนได้ถึง 1.7 เท่า

ความเร็วในการเทรน (Training speed) มักจะติดขัดเนื่องจากช่วงเวลาที่ระบบว่างงาน (idle time) ใน pipeline ซึ่งช่วงเวลาว่างงานนี้เรียกว่า "bubble"

วิธีการใหม่ที่เรียกว่า PACI สามารถแก้ปัญหานี้ได้ โดยการกำจัด bubble เหล่านี้และช่วยเร่งความเร็วในการเทรนได้ถึง 1.69 เท่า

ทีมส่วนใหญ่มักใช้กลยุทธ์ที่เรียกว่า 1F1B-flush ซึ่งวิธีนี้จะรักษาความสอดคล้องของน้ำหนัก (weights) ไว้ได้ แต่กลับสร้างช่องว่างที่ระบบต้องหยุดรอข้อมูล ช่วงเวลาที่ต้องรอนี้เองที่ทำให้ทุกอย่างช้าลง

วิธีการแบบ asynchronous อื่นๆ พยายามจะแก้ไขปัญหานี้ โดยการใช้เทคนิคที่ซับซ้อน เช่น การเก็บน้ำหนักสำรอง (weight stashing) หรือการทำสำเนาข้อมูล (duplicate copies) แต่เทคนิคเหล่านี้ใช้หน่วยความจำมากเกินไป และมักจะทำให้การเทรนขาดความเสถียร

PACI เลือกใช้แนวทางที่แตกต่างออกไป โดยการใช้ local gradient accumulation ซึ่งช่วยให้ pipeline ทำงานได้อย่างต่อเนื่องโดยไม่จำเป็นต้องมีการซิงโครไนซ์แบบ global (global synchronization)

นี่คือเหตุผลที่ PACI มีความสำคัญ:

  • มีความเสถียรเทียบเท่ากับวิธีการมาตรฐาน
  • ใช้หน่วยความจำในปริมาณเท่าเดิม
  • ทำความเร็วได้เทียบเท่ากับการตั้งค่าที่เร็วกว่าแต่กินทรัพยากรมากกว่า
  • ลดเวลาที่ใช้เพื่อให้ได้ความแม่นยำตามเป้าหมาย (time-to-accuracy) ลงได้ 1.69 เท่า

จากการทดสอบกับ GPT-2 Medium พบว่า PACI สามารถบรรลุความแม่นยำที่ตั้งเป้าไว้ได้เร็วกว่ามาก สิ่งนี้แสดงให้เห็นว่าคุณสามารถแลกความคลาดเคลื่อนของน้ำหนัก (weight drift) เพียงเล็กน้อย เพื่อแลกกับประสิทธิภาพที่เพิ่มขึ้นอย่างมหาศาล

สำหรับทีมวิศวกร นี่หมายถึงการลดต้นทุนด้านฮาร์ดแวร์ลงได้ถึง 40% คุณจะได้รับผลลัพธ์ที่เร็วขึ้นโดยไม่ต้องซื้อ GPU เพิ่มหรือเพิ่มหน่วยความจำ

นักวิจัยได้ทดสอบสิ่งนี้บน pipeline แบบ 8 ขั้นตอน (8-stage pipeline) ร่วมกับโมเดลสไตล์ GPT ทั้งนี้ คุณอาจจำเป็นต้องปรับจูนค่า accumulation window หากมีการเปลี่ยนความลึกของ pipeline หรือขนาดของ batch size

คุณสามารถทดสอบเรื่องนี้ได้ด้วยตัวเอง โดยผู้เขียนได้จัดทำ local-accumulation wrapper ไว้ใน repository ของพวกเขา เพียงแค่เปลี่ยน flush synchronizer เดิมของคุณด้วย wrapper นี้ ก็จะเห็นความเร็วที่เพิ่มขึ้นทันที

Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk

Optional learning community: https://t.me/GyaanSetuAi