7

การออกแบบสถาปัตยกรรมฐานรากแบบเปิดและแยกส่วน

AI999第4课:现代计算底座与张量化并行演化
00:00

หลักคิดสำคัญของ EvoX คือ นักวิจัยไม่ควรเสียเวลากับการสื่อสารแบบขนาน การจัดสรรอุปกรณ์ และความทนทานต่อข้อผิดพลาดแบบกระจาย ดังนั้นระบบจึงถูกแยกออกเป็นห้าโมดูลระดับแรก ได้แก่อัลกอริทึม โมดูลปัญหา เวิร์กโฟลว์ โมดูลเฝ้าสังเกตและ ตัวจัดตารางเวลา Runtime โดยสี่โมดูลแรกตอบคำถามว่า "วิวัฒนาการอะไร วิวัฒนาการอย่างไร จัดระเบียบอย่างไร และสังเกตอย่างไร" ส่วนตัวจัดตารางเวลา Runtime ตอบคำถามว่า "คำนวณที่ไหน และทำให้คำนวณได้อย่างไร" เมื่อเส้นแบ่งนี้ชัดเจนแล้ว นักวิจัยเพียงมุ่งเน้นที่ "จะวิวัฒนาการอย่างไร" ส่วนระบบระดับล่างรับผิดชอบจัดตารางการคำนวณไปยัง GPU อุปกรณ์เร่งความเร็ว หรือคลัสเตอร์แบบกระจาย

ฐานรากแบบเปิดและแยกส่วนของ EvoX: ชั้นบนมุ่งเน้นวิวัฒนาการ ชั้นล่างจัดตารางแบบรวมศูนย์โมดูลอัลกอริทึมกำหนดวิธีการวิวัฒนาการ1โมดูลปัญหาอินเทอร์เฟซประเมินแบบรวม2เวิร์กโฟลว์จัดระเบียบวิวัฒนาการตามระยะ3โมดูลเฝ้าสังเกตสังเกตกระบวนการวิวัฒนาการ4สี่โมดูลชั้นบนตอบเพียง: วิวัฒนาการอะไร · วิวัฒนาการอย่างไร · จัดระเบียบอย่างไร · สังเกตอย่างไรรวมตัวสูง: หน้าที่สอดคล้องในตัวเอง | เชื่อมโยงต่ำ: อัลกอริทึมไม่ผูกกับปัญหา ปัญหาไม่รับรู้ถึงพลังประมวลผลตัวจัดตารางเวลา Runtimeชั้นดำเนินการแบบรวม: ซ่อนความแตกต่างของพลังประมวลผลที่ต่างชนิดกันตอบ: คำนวณที่ไหน · ทำให้คำนวณได้อย่างไร5ชั้นพลังประมวลผลต่างชนิดระดับล่างRuntime กระจายการคำนวณเทนเซอร์แบบกลุ่มโดยอัตโนมัติการคำนวณเทนเซอร์บน GPUอุปกรณ์เร่งความเร็วคลัสเตอร์แบบกระจายการแยกส่วนลดงานวิศวกรรมที่ซ้ำซ้อน ไม่ใช่ลดความสามารถในการคำนวณ

ขอบเขตหน้าที่ของทั้งห้าโมดูล

  • โมดูลอัลกอริทึม: อธิบายเฉพาะตรรกะการค้นหาและการอัปเดต (การเลือก การผสมข้าม การกลายพันธุ์ กฎการอัปเดต) ไม่ผูกกับปัญหาเฉพาะใด ๆ และไม่รับรู้ว่าเทนเซอร์ถูกวางบนการ์ดใบใด
  • โมดูลปัญหา: ให้บริการอินเทอร์เฟซประเมินแบบรวมแก่ภายนอก โดยห่อหุ้มการจำลอง ฟังก์ชันเป้าหมาย หรือสภาพแวดล้อมของฝั่งธุรกิจให้อยู่ในรูปแบบที่ฐานรากเรียกใช้ได้โดยตรง
  • เวิร์กโฟลว์: จัดระเบียบกระบวนการวิวัฒนาการตามระยะ (การเริ่มต้น การวิวัฒนาการแบบวนซ้ำ การตัดสินการลู่เข้า ฯลฯ) กำหนดว่า "ทำอะไรก่อน แล้วทำอะไรต่อ"
  • โมดูลเฝ้าสังเกต: เก็บรวบรวมตัวชี้วัดในแต่ละระยะ บันทึกสถานะประชากรและเส้นโค้งการลู่เข้า เพื่อการวิเคราะห์และดีบัก
  • ตัวจัดตารางเวลา Runtime: ทำหน้าที่เป็นชั้นดำเนินการแบบรวม ซ่อนความแตกต่างของพลังประมวลผลต่างชนิดกัน กระจายการคำนวณแบบกลุ่มไปยัง GPU อุปกรณ์เร่งความเร็ว หรือคลัสเตอร์แบบกระจาย และ接管รายละเอียดด้านการขนานและการสื่อสาร

ประโยชน์ด้านการโยกย้ายที่ได้จากการแยกส่วน

รูปแบบความร่วมมือผ่านอินเทอร์เฟซแบบ "รวมตัวสูง เชื่อมโยงต่ำ" นี้ ทำให้อัลกอริทึมและปัญหาเป็นอิสระต่อกัน และทำให้ปัญหาและพลังประมวลผลเป็นอิสระต่อกัน เมื่อนักวิจัยพัฒนาโอเปอเรเตอร์กลายพันธุ์ตัวใหม่ ก็เพียงทำตรรกะวิวัฒนาการให้เสร็จในโมดูลอัลกอริทึม โมดูลปัญหายังคงให้บริการอินเทอร์เฟซประเมินแบบรวม เวิร์กโฟลว์และโมดูลเฝ้าสังเกตคงรูปแบบการจัดระเบียบเดิม ส่วนตัวจัดตารางเวลา Runtime จะกระจายการคำนวณเทนเซอร์แบบกลุ่มไปยัง GPU หรือคลัสเตอร์แบบกระจายโดยอัตโนมัติ โดยไม่ต้องแก้ไขโค้ดระดับล่างใด ๆ

เนื่องจากอินเทอร์เฟซมีความเสถียร ฐานรากชุดนี้จึงรองรับสถานการณ์วิวัฒนาการหลายประเภทพร้อมกันได้ ทั้งการเรียนรู้แบบเสริมกำลัง การเขียนโปรแกรมเชิงพันธุกรรม และการหาค่าเหมาะที่สุดเชิงการจัดกลุ่ม ช่วยหลีกเลี่ยงการสร้างโครงสร้างพื้นฐานทางวิศวกรรมสำหรับการขนาน การจัดตาราง และการดำเนินการแบบกระจายซ้ำสำหรับแต่ละสาขา สิ่งที่ต้องแยกแยะคือ การแยกส่วนลด "งานวิศวกรรมที่ซ้ำซ้อน" ไม่ใช่ "ความสามารถในการคำนวณ": การแบ่งชั้นจะมีประสิทธิภาพจริงหรือไม่ ยังต้องใช้การทดลองอ้างอิงเพื่อตรวจสอบว่าค่าใช้จ่ายในการจัดตารางยอมรับได้หรือไม่

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