NVIDIA Exemplar Cloud: เคล็ดลับปลดล็อกประสิทธิภาพสูงสุดบนโครงสร้างพื้นฐาน AI
การสร้างคลัสเตอร์ประมวลผล AI สองชุดที่ใช้ระบบ NVIDIA H100, GB200 NVL72 หรือ GB300 NVL72 ที่เหมือนกันทุกประการ อาจให้ผลลัพธ์การฝึก (training throughput) ที่แตกต่างกันอย่างมีนัยสำคัญ ทีมงาน NVIDIA พบว่าความแตกต่างนี้อาจสูงถึง 8% ถึง 12% เลยทีเดียว ซึ่งมักเกิดจากช่องว่างของการตั้งค่าที่สะสมกันในระดับ Kernel, Hypervisor, BIOS และ NVIDIA Collective Communications Library (NCCL) ทำให้การติดตั้งใช้งานพลาดเป้าหมาย 95% ที่กำหนดไว้สำหรับ NVIDIA Exemplar Cloud
บทความนี้จะพาไปสำรวจ 4 กรณีศึกษาจริงที่เผยให้เห็นถึงสาเหตุทั่วไปของประสิทธิภาพที่ลดลง เพื่อให้วิศวกรโครงสร้างพื้นฐานสามารถนำไปปรับใช้และปิดช่องว่างเหล่านั้นได้
ทำไมประสิทธิภาพ AI ถึงแตกต่างกันได้?
แม้จะใช้ฮาร์ดแวร์ NVIDIA รุ่นเดียวกัน แต่ประสิทธิภาพการฝึก AI อาจไม่เท่ากันเสมอไป สาเหตุหลักมักมาจากการตั้งค่าที่ซับซ้อนและสะสมกันในหลายระดับ ตั้งแต่ระดับฮาร์ดแวร์ไปจนถึงซอฟต์แวร์ระดับสูง ซึ่งแต่ละจุดที่ตั้งค่าไม่เหมาะสม อาจส่งผลกระทบเล็กน้อย แต่เมื่อรวมกันแล้วก็อาจทำให้ประสิทธิภาพลดลงจนน่าใจหาย
4 สาเหตุหลักที่พบบ่อยในการสูญเสียประสิทธิภาพ AI
จากการตรวจสอบคลัสเตอร์จริง พบรูปแบบปัญหาที่เกิดขึ้นซ้ำๆ ดังนี้:
- Grace CPU และการตั้งค่า Virtualization: ปัญหาที่เกี่ยวข้องกับ SMMU (System Memory Management Unit), การตั้งค่า IOMMU หรือขนาดของ Page ที่ไม่ตรงกับการคาดหวัง อาจส่งผลกระทบต่อประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อใช้ NVIDIA Grace CPU ในสภาพแวดล้อมเสมือน (Virtual Machine - VM)
- การจัดการพลังงาน CPU และการจัดวาง Process: การที่คอร์ CPU ทำงานต่ำกว่าความถี่ Turbo ที่ควรจะเป็น, การจัดวาง Process หรือ Thread ไปยังคอร์ที่ไม่เหมาะสม หรือการตั้งค่า NUMA (Non-Uniform Memory Access) ที่ไม่ตรงกับ Topology ของแพลตฟอร์ม อาจทำให้ประสิทธิภาพโดยรวมลดลง
- Topology ของ Runtime และ NCCL: ไฟล์ Topology ของ Host หรือการตั้งค่า NCCL ที่ถูกต้องบน Node แต่อาจขาดหายไปภายใน Container ที่ใช้สำหรับ Workload หรือสภาพแวดล้อม Launcher อาจนำไปสู่ปัญหาที่มองไม่เห็น
- Fabric และพฤติกรรม Collective: การตั้งค่า NCCL ที่ไม่ตรงกับ Fabric, ขนาดของข้อความ (Message Size) หรือระดับ Scale ของ Workload การฝึก อาจทำให้เกิดคอขวดในการสื่อสาร
กรณีศึกษา: เจาะลึกปัญหาและวิธีแก้ไข
กรณีศึกษาที่ 1: GB200 NVL72 ใน VM ช้ากว่า Bare Metal 12%
- ปัญหา: การฝึก DeepSeek-V3 Mixture-of-Experts (MoE) FP8 ใน VM ช้ากว่า Bare Metal ถึง 12-14%
- สาเหตุ: การตั้งค่า SMMU บน Arm SMMU ที่ไม่ได้ใช้ประโยชน์จาก Virtual Command Queue (VCMDQ) ทำให้เกิดการเข้าคิวคำสั่งที่ไม่จำเป็น และเกิด Spinlock Contention
- วิธีแก้ไข: เปิดใช้งาน CMDQV/VCMDQ ใน Host Kernel และเปิดให้ Guest ใช้งาน ซึ่งต้องการ Kernel ที่สร้างด้วยไดรเวอร์
tegra241-cmdqvและการสนับสนุนจาก Hypervisor ที่เหมาะสม - ผลลัพธ์: อัตราการเกิด dTLB miss กลับมาใกล้เคียงกับ Bare Metal และช่องว่างของเวลาการฝึก MoE ลดลงเหลืออยู่ในเกณฑ์ที่ยอมรับได้
กรณีศึกษาที่ 2: คลัสเตอร์ H100 สูญเสีย 12% จากปัญหา CPU Contention และ NUMA Misbinding
- ปัญหา: การฝึก Llama 3 70B บนคลัสเตอร์ H100 SXM5 ช้ากว่า Reference 12%
- สาเหตุ:
- ความถี่ CPU ต่ำ: คอร์ CPU ทำงานที่ 3.0 GHz แทนที่จะเป็น 3.8 GHz (Turbo) เนื่องจาก C-state ถูกจำกัดไว้ที่ C1 ทำให้คอร์ที่ไม่ได้ใช้งานยังคงกินพลังงานแพ็กเกจมากเกินไป
- NUMA Remote Traffic สูง: การเข้าถึงหน่วยความจำของ Process ฝึกส่วนใหญ่อยู่ที่ NUMA Node ฝั่งตรงข้าม
- วิธีแก้ไข:
- ปรับการตั้งค่า C-state ใน BIOS ให้สามารถเข้าสู่ C6 ได้ เพื่อเพิ่ม Power Headroom ให้คอร์ที่ทำงานสามารถเร่ง Turbo ได้เต็มที่
- แยก Process ของ Hypervisor และ Host Services ออกไปไว้ที่คอร์เฉพาะ (0-7, 56-63) และให้ Process การฝึกทำงานบนคอร์ที่เหลือ
- ผลลัพธ์: ช่องว่างประสิทธิภาพลดลงจาก 12% เหลือ 3%
กรณีศึกษาที่ 3: GB300 NVL72 ใช้ Fabric 1.6 Tbps ได้ไม่เต็มที่
- ปัญหา: การฝึก Nemotron-4 15B บน GB300 NVL72 ที่ใช้ NVIDIA ConnectX-8 SuperNICs ช้ากว่า Reference 31% โดยพบปัญหาที่ AllGather และ ReduceScatter
- สาเหตุ: การตั้งค่า NCCLIBQPSPERCONNECTION มีค่าต่ำเกินไป (Default = 1) เมื่อเทียบกับขนาดของข้อความและการสื่อสารบน Fabric ความเร็วสูง
- วิธีแก้ไข: เพิ่มค่า NCCLIBQPSPERCONNECTION เป็น 4
- ผลลัพธ์: เวลาในการทำ AllGather และ ReduceScatter ลดลงอย่างมีนัยสำคัญ ทำให้ประสิทธิภาพโดยรวมดีขึ้น (แต่ต้องทดสอบและปรับให้เหมาะสมกับ Fabric และ Workload แต่ละประเภท)
กรณีศึกษาที่ 4: Environment Variable ที่ไม่ส่งถึง Container
- ปัญหา: ในการติดตั้ง B200 แบบ Virtualized การฝึกมีความเร็วต่ำกว่า Reference ถึง 13%-53% แม้ว่า
nccl-testsบน Host จะทำงานได้ปกติ แต่ AllGather และ ReduceScatter ภายใน Container กลับช้ากว่า 2-4 เท่า - สาเหตุ: การตั้งค่า NCCL Topology ที่มองเห็นจาก VM และภายใน Container ไม่ตรงกัน ทำให้การสื่อสารเกิดคอขวด
- วิธีแก้ไข: ตรวจสอบและตรวจสอบให้แน่ใจว่า Environment Variable และไฟล์ Topology ที่จำเป็นสำหรับ NCCL ถูกส่งผ่านเข้าไปยัง Container ที่ใช้ฝึกอย่างถูกต้อง
ข้อคิดสำคัญสำหรับวิศวกรโครงสร้างพื้นฐาน AI
การเพิ่มประสิทธิภาพสูงสุดให้กับโครงสร้างพื้นฐาน AI นั้น ต้องอาศัยการตรวจสอบและปรับแต่งอย่างละเอียดในหลายระดับ การทำความเข้าใจรูปแบบปัญหาที่พบบ่อยเหล่านี้ จะช่วยให้สามารถระบุและแก้ไขคอขวดได้อย่างรวดเร็ว
- ตรวจสอบ SMMU และ Virtualization: โดยเฉพาะบน Grace CPU ให้แน่ใจว่ามีการตั้งค่าที่เหมาะสมสำหรับ Workload ที่ต้องการ Memory Mapping สูง
- ปรับแต่ง CPU Power Management และ NUMA Binding: การตั้งค่า C-state และการจัดวาง Process ให้ถูกต้อง สามารถปลดล็อกประสิทธิภาพ Turbo ของ CPU ได้
- จูน NCCL Queue-Pair Concurrency: ปรับให้เหมาะสมกับ Scale และ Message Size ของ Workload และ Fabric ที่ใช้งาน
- ยืนยัน Environment Variable ภายใน Container: ตรวจสอบให้แน่ใจว่าการตั้งค่าทั้งหมดที่จำเป็นสำหรับ NCCL สามารถเข้าถึงได้ภายในสภาพแวดล้อมการฝึกที่ใช้งานจริง
การตรวจสอบเหล่านี้ไม่ใช่การทดแทนการ Validation ด้วย Application จริง แต่เป็นแนวทางที่มีประโยชน์อย่างยิ่งในการค้นหาและแก้ไขปัญหาคอขวดที่อาจเกิดขึ้นได้
#AI #NVIDIA #ExemplarCloud #Infrastructure #Performance
ขอบคุณ แหล่งข้อมูล
https://developer.nvidia.com/blog/nvidia-exemplar-cloud-lessons-for-unlocking-full-performance-on-ai-infrastructure/