- กลยุทธ์และโค้ดที่ใช้ใน DeepSeek V3/R1
- DualPipe : อัลกอริทึมการขนานแบบไปป์ไลน์สองทิศทางเพื่อทำให้การคำนวณ-การสื่อสารซ้อนทับกัน
- EPLB: ตัวปรับสมดุลโหลดแบบ Expert-Parallel
- Profile-Data: ข้อมูลโปรไฟล์ของโครงสร้างพื้นฐาน DeepSeek สำหรับวิเคราะห์การซ้อนทับระหว่างการคำนวณ-การสื่อสาร
- DualPipe คืออัลกอริทึมการขนานแบบไปป์ไลน์สองทิศทางเชิงนวัตกรรมที่แนะนำใน DeepSeek-V3 Technical Report
- มีหน้าที่ซ้อนทับขั้นตอนการคำนวณ-การสื่อสารของการทำงานแบบ forward และ backward อย่างสมบูรณ์ เพื่อลด pipeline bubble
- ดูข้อมูลการซ้อนทับระหว่างการคำนวณ-การสื่อสารเพิ่มเติมได้ที่ profile data
- ใน 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 ใหญ่
- 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
ยังไม่มีความคิดเห็น