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