• Sam Altman ประกาศว่า ChatGPT รองรับผู้ใช้ราว 700 ล้านคนต่อสัปดาห์
  • แต่เมื่อรันโมเดลระดับ GPT-4 บนเครื่องตัวเอง ปัญหา VRAM ไม่พอและความเร็วตก กลับรุนแรงมาก จึงสงสัยว่า OpenAI จัดการปริมาณการใช้งานระดับมหาศาลแบบนี้ด้วย latency ต่ำและประสิทธิภาพสูง ได้อย่างไร
  • อยากรู้เทคนิคด้าน การปรับแต่งโมเดล การประมวลผลแบบกระจาย ฮาร์ดแวร์เฉพาะทาง และการทำ load balancing ที่มากกว่าแค่ GPU cluster ทั่วไป

สรุปคอมเมนต์สำคัญ

1. โครงสร้างการทำ inference แบบกระจายขนาดมหึมา

  • Model Sharding
    • กระจายเก็บพารามิเตอร์ไว้บน GPU หลายตัว
    • เมื่อมีคำขอเข้ามา แต่ละ GPU จะคำนวณในส่วนพารามิเตอร์ของตัวเองแล้วรวมผลลัพธ์เข้าด้วยกัน
  • Tensor Parallelism
    • ให้ GPU หลายตัวประมวลผลงานภายในเลเยอร์เดียวกันแบบขนาน
  • Pipeline Parallelism
    • แบ่งเลเยอร์ออกเป็นหลายขั้น แล้วประมวลผลแบบต่อท่อ ทั้งตามลำดับและพร้อมกัน
  • ใช้ การประมวลผลแบบขนานผสมผสาน เพื่อปรับสมดุลหน่วยความจำ GPU และภาระการคำนวณให้เหมาะสม

2. การเพิ่มประสิทธิภาพด้านหน่วยความจำและความเร็ว

  • Quantization: แปลงพารามิเตอร์ให้ใช้ความละเอียดบิตต่ำลงเพื่อลดการใช้ VRAM
  • Offloading เลเยอร์: ย้ายบางเลเยอร์ไปยังหน่วยความจำ CPU เมื่อต้องการ
  • LoRA / Adapter Layers: ปรับจูนเฉพาะงาน (fine-tuning) โดยไม่ต้องโหลดโมเดลทั้งก้อนใหม่ทั้งหมด
  • KV Caching: นำ context กลับมาใช้ซ้ำเพื่อตัดการคำนวณที่ซ้ำซ้อน

3. ฮาร์ดแวร์เฉพาะทางและเครือข่าย

  • ใช้งาน NVIDIA H100, A100 และ TPU บางส่วนในสเกลใหญ่
  • ใช้ NVLink และ NVSwitch ระหว่าง GPU รวมถึง Infiniband ระหว่างคลัสเตอร์ เพื่อส่งข้อมูลความเร็วสูงมาก
  • สร้าง backbone network ระดับโลกเชื่อมระหว่างดาต้าเซ็นเตอร์เพื่อลด latency ให้ต่ำที่สุด

4. การกระจายเชิงภูมิศาสตร์และ load balancing

  • วาง GPU farm ไว้ในหลายรีเจียนทั่วโลก
  • ใช้ GeoDNS เชื่อมคำขอของผู้ใช้ไปยังรีเจียนที่ใกล้ที่สุด
  • ขยาย/ลดขนาด GPU cluster แบบไดนามิก ตามรูปแบบทราฟฟิก
  • หากมีโหลดกระจุกในบางรีเจียน ก็จะกระจายทราฟฟิกใหม่ในระดับโลก

5. การเพิ่มประสิทธิภาพในการจัดการคำขอ

  • Batch Inference: รวมคำขอจากผู้ใช้หลายคนแล้วทำ inference พร้อมกันในครั้งเดียว
  • ประมวลผลเบื้องต้นด้วยโมเดลเล็ก: คำของ่ายใช้โมเดลขนาดเล็ก ส่วนคำขอซับซ้อนค่อยเรียกโมเดลใหญ่
  • Result Caching: แคชผลลัพธ์ของ prompt เดิมหรือคำขอที่คล้ายกันแล้วตอบกลับได้ทันที
  • ใช้ Prompt Engineering เพื่อลดการสิ้นเปลืองโทเค็นที่ไม่จำเป็น

6. การปฏิบัติการและการคุมต้นทุน

  • ลดทรัพยากรว่างให้ต่ำที่สุดด้วย การมอนิเตอร์และจัดตารางการใช้ GPU
  • เพิ่มประสิทธิภาพพลังงานของดาต้าเซ็นเตอร์และนำระบบ ระบายความร้อนด้วยของเหลว มาใช้
  • เพิ่มความเร็ว inference ด้วย compiler และ runtime ที่ปรับแต่งเอง
  • เดินระบบ pipeline อัตโนมัติสำหรับการอัปเดตและดีพลอยโมเดล

ตัวอย่างลำดับการทำงานของสถาปัตยกรรมโดยรวม

  1. รับคำขอจากผู้ใช้ → route ไปยังรีเจียนที่ใกล้ที่สุดด้วย GeoDNS
  2. Preprocessing → คำของ่ายส่งให้โมเดลเล็ก คำขอซับซ้อนค่อยส่งต่อไปยังโมเดลใหญ่
  3. ประมวลผล inference แบบกระจาย
    • ใช้ Model Sharding + Tensor Parallelism + Pipeline Parallelism
    • แลกเปลี่ยนผลลัพธ์ระหว่างทางผ่านเครือข่ายความเร็วสูงระหว่าง GPU
  4. Post-processing และ Result Caching → เก็บแคชไว้รองรับคำขอเดิมหรือใกล้เคียง
  5. ส่งคำตอบกลับ → ให้ผลลัพธ์ภายใน 1~2 วินาที

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

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