เทคนิคการฝึกฝน Neural Network ขนาดใหญ่ของ OpenAI

การฝึกฝน Neural Network ขนาดใหญ่เป็นความท้าทายทางวิศวกรรมและการวิจัยที่ต้องมีการประสานงานกลุ่ม GPU เพื่อการคำนวณที่ซิงโครไนซ์

อย่างไรก็ตาม เทคนิคเหล่านี้สามารถเข้าใจได้ง่ายขึ้นหากมองว่าเป็นการส่งผ่านข้อมูลระหว่างส่วนประกอบต่างๆ เช่นเดียวกับสวิตช์เครือข่ายที่ส่งต่อแพ็กเก็ต

Pipeline parallelism

เนื่องจากมีความสัมพันธ์เชิงลำดับระหว่างอินพุตและเอาต์พุตของเลเยอร์ การนำไปใช้แบบตรงไปตรงมาอาจทำให้เกิดช่วงเวลาที่เสียเปล่ามากเมื่อต้องรอผลลัพธ์จากเครื่องก่อนหน้า

แนวคิดหลักคือการแบ่งชุดข้อมูล (batch) ออกเป็น microbatches หลายส่วน และให้แต่ละ worker เริ่มทำงานกับ microbatch ถัดไปทันทีที่พร้อม เพื่อเร่งการทำงานของไปป์ไลน์

Tensor parallelism

สำหรับโมเดลสมัยใหม่ เช่น Transformer คอขวดมักอยู่ที่การคูณเมทริกซ์ของ Activation batch กับ Weight matrix ขนาดใหญ่

สามารถแบ่ง Weight matrix ออกเป็นส่วนย่อยๆ หรือ “shards” และติดตั้งบน GPU ต่างๆ เพื่อคำนวณส่วนที่เกี่ยวข้องของผลคูณเมทริกซ์ ก่อนจะสื่อสารเพื่อรวมผลลัพธ์ในภายหลัง

คำขอบคุณ

ผู้เขียนขอขอบคุณ Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever และ Steven Adler สำหรับข้อเสนอแนะในการร่างบทความนี้

ศัพท์ที่ควรรู้

  • Neural networks – โครงข่ายประสาทเทียมคือแบบจำลองทางคณิตศาสตร์ที่ใช้ในการเรียนรู้ของ AI
  • GPU – หน่วยประมวลผลกราฟิกคือชิปที่ใช้ในการประมวลผลคำนวณจำนวนมากพร้อมกัน
  • Pipeline parallelism – เป็นเทคนิคการแบ่งงานที่ทำให้การคำนวณไหลผ่านแต่ละขั้นตอนอย่างต่อเนื่องโดยไม่หยุดรอ
  • Tensor parallelism – เป็นเทคนิคการแบ่งขนาดของเมทริกซ์ที่ใช้ในการคำนวณเพื่อลดภาระของแต่ละ GPU

ที่มา: OpenAI

Leave a Comment