• กลยุทธ์และโค้ดที่ใช้ใน DeepSeek V3/R1
    • DualPipe : อัลกอริทึมการขนานแบบไปป์ไลน์สองทิศทางเพื่อทำให้การคำนวณ-การสื่อสารซ้อนทับกัน
    • EPLB: ตัวปรับสมดุลโหลดแบบ Expert-Parallel
    • Profile-Data: ข้อมูลโปรไฟล์ของโครงสร้างพื้นฐาน DeepSeek สำหรับวิเคราะห์การซ้อนทับระหว่างการคำนวณ-การสื่อสาร

DualPipe

  • DualPipe คืออัลกอริทึมการขนานแบบไปป์ไลน์สองทิศทางเชิงนวัตกรรมที่แนะนำใน DeepSeek-V3 Technical Report
  • มีหน้าที่ซ้อนทับขั้นตอนการคำนวณ-การสื่อสารของการทำงานแบบ forward และ backward อย่างสมบูรณ์ เพื่อลด pipeline bubble
  • ดูข้อมูลการซ้อนทับระหว่างการคำนวณ-การสื่อสารเพิ่มเติมได้ที่ profile data

Expert Parallelism Load Balancer (EPLB)

  • ใน Expert Parallelism (EP) จะมีการจัดสรร experts ที่แตกต่างกันให้กับแต่ละ GPU
  • อย่างไรก็ตาม เนื่องจากภาระงานของแต่ละ expert อาจแตกต่างกัน จึงสำคัญที่จะต้องปรับสมดุลโหลดระหว่าง GPU ให้เหมาะสม
  • ใน DeepSeek-V3 มีการใช้กลยุทธ์ redundant experts โดยทำสำเนา expert ที่มีโหลดสูง แล้วจัดวางลงบน GPU อย่างมีประสิทธิภาพเพื่อให้เกิดสมดุลโหลด
  • นอกจากนี้ ยังใช้ group-limited expert routing เพื่อจัดวาง experts ในกลุ่มเดียวกันให้อยู่บนโหนดเดียวกันให้มากที่สุด เพื่อลดการรับส่งข้อมูลระหว่างโหนด
  • เพื่อให้ทำซ้ำและนำไปใช้งานได้ง่าย จึงเปิดซอร์สอัลกอริทึมสมดุลโหลด EP ใน eplb.py
    • อัลกอริทึมนี้คำนวณแผนการทำสำเนาและการจัดวาง expert ที่สมดุล โดยอิงจากโหลดของ expert ที่คาดการณ์ไว้
    • อย่างไรก็ตาม วิธีการเฉพาะในการคาดการณ์โหลดของ expert อยู่นอกขอบเขตของ repository นี้ และโดยทั่วไปมักใช้วิธีค่าเฉลี่ยเคลื่อนที่จากสถิติย้อนหลัง
  • อัลกอริทึมสมดุลโหลดมี 2 นโยบาย ซึ่งใช้ในสถานการณ์ต่างกัน
    • Hierarchical Load Balancing
      • หากจำนวนเซิร์ฟเวอร์โหนดหารด้วยจำนวนกลุ่ม expert ลงตัว จะใช้นโยบาย Hierarchical Load Balancing เพื่อเพิ่มประสิทธิภาพของ group-limited expert routing
      • ขั้นแรก จะกระจายกลุ่ม expert ลงบนโหนดอย่างเท่าเทียมเพื่อปรับสมดุลโหลดระหว่างโหนด
      • หลังจากนั้น จะทำสำเนา expert ภายในแต่ละโหนด
      • สุดท้าย จะจัดวาง expert ที่ถูกทำสำเนาแล้วลงใน GPU แต่ละตัว เพื่อให้เกิดสมดุลโหลดระหว่าง GPU
      • นโยบายนี้ใช้ได้ในขั้น prefilling ที่มีขนาดของ expert parallelism เล็ก
    • Global Load Balancing
      • ในกรณีอื่น จะใช้นโยบาย Global Load Balancing โดยทำสำเนา expert ในระดับรวมโดยไม่ขึ้นกับกลุ่ม expert แล้วจัดวางลงใน GPU แต่ละตัว
      • นโยบายนี้เหมาะกับขั้น decoding ที่มีขนาดของ expert parallelism ใหญ่

Profiling Data ของ DeepSeek Infra

  • DeepSeek เปิดเผยข้อมูลโปรไฟล์จากเฟรมเวิร์กสำหรับการฝึกและการอนุมาน เพื่อช่วยให้คอมมูนิตี้เข้าใจกลยุทธ์การซ้อนทับระหว่างการสื่อสาร-การคำนวณและรายละเอียดการทำงานระดับล่างได้ดียิ่งขึ้น
  • ข้อมูลโปรไฟล์นี้เก็บรวบรวมด้วย PyTorch Profiler และหลังดาวน์โหลดสามารถดูภาพผ่าน chrome://tracing บน Chrome และ edge://tracing บน Edge
  • นอกจากนี้ ในการทดลองยังมีการจำลอง กลยุทธ์การ routing ของ MoE ที่สมดุล เพื่อใช้ในการทำ profiling
  • การฝึก (Training)
    • ข้อมูลโปรไฟล์การฝึกใน DualPipe แสดงกลยุทธ์การซ้อนทับของ forward และ backward chunk
    • แต่ละ chunk ประกอบด้วย 4 MoE (Mixture of Experts) layers และมีการตั้งค่าการขนานที่สอดคล้องกับการตั้งค่าพรีเทรนของ DeepSeek-V3:
  • การอนุมาน (Inference)
    • Prefilling
      • ในขั้นตอนนี้ ใช้ micro-batch สองชุด เพื่อซ้อนทับการคำนวณกับการสื่อสารแบบ all-to-all
      • นอกจากนี้ ยังมีการ กระจายภาระงานของ attention อย่างสมดุลระหว่าง micro-batch ทั้งสองชุด เพื่อให้พรอมป์ต์เดียวกันสามารถถูกแบ่งไปยังหลาย micro-batch ได้
    • Decoding
      • ในขั้น decoding ก็เช่นเดียวกับ prefilling คือใช้ micro-batch สองชุดเพื่อซ้อนทับการคำนวณกับการสื่อสารแบบ all-to-all
      • อย่างไรก็ตาม ใน decoding การสื่อสารแบบ all-to-all จะ ไม่ครอบครอง GPU SMหลังส่งข้อความ RDMA แล้วจะปล่อย GPU SM และทำงานโดยรอให้การสื่อสารเสร็จสิ้นหลังจากการคำนวณจบ
      • ดูข้อมูลการทำงานของ all-to-all เพิ่มเติมได้ที่ DeepEP

ลำดับที่ 4 จาก 5 โอเพนซอร์สที่เปิดเผยใน DeepSeek Open Infra

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น