กู้คืนประสิทธิภาพ LLM ในพริบตา ด้วย Shadow Engine Recovery ใน NVIDIA Dynamo

เมื่อโมเดลภาษาขนาดใหญ่ (LLM) ที่ให้บริการเกิดข้อผิดพลาดและหยุดทำงาน การกู้คืนแบบเดิมมักต้องเริ่มต้นใหม่ทั้งหมด ซึ่งกระบวนการนี้อาจใช้เวลานานหลายนาที ทำให้การให้บริการหยุดชะงักและส่งผลกระทบต่อผู้ใช้งานอย่างมาก NVIDIA Dynamo ได้นำเสนอเทคโนโลยี "Shadow Engine Recovery" ที่ช่วยให้การกู้คืนทำได้รวดเร็วขึ้นมาก เพียงไม่กี่วินาทีเท่านั้น!

ปัญหาของการกู้คืน LLM แบบเดิม

โดยปกติแล้ว เมื่อกระบวนการ LLM Engine เกิดข้อผิดพลาด การกู้คืนจะทำได้โดยการ "Cold Restart" ซึ่งหมายถึงการเริ่มต้นใหม่ทั้งหมด กระบวนการนี้เกี่ยวข้องกับการ:

  • โหลด Weights: นำข้อมูลโมเดล (Weights) จากที่เก็บข้อมูลมาโหลดเข้าสู่หน่วยความจำ HBM (High Bandwidth Memory) บน GPU ซึ่งสำหรับโมเดลขนาดใหญ่ขั้นตอนนี้อาจใช้เวลานาน
  • คอมไพล์ Kernels: สร้างและปรับแต่งโค้ดที่จำเป็นสำหรับการประมวลผล
  • จับภาพ NVIDIA CUDA Graphs: บันทึกการทำงานของ GPU เพื่อให้สามารถเรียกใช้งานได้อย่างมีประสิทธิภาพ

สำหรับโมเดลขนาดใหญ่ ขั้นตอนเหล่านี้อาจใช้เวลาหลายนาที ในระหว่างนั้น พนักงานที่ยังทำงานได้ปกติจะต้องรับภาระทราฟฟิกที่เข้ามาทั้งหมด ซึ่งส่งผลให้เวลาในการตอบสนอง (TTFT - Time To First Token) เพิ่มสูงขึ้น อัตราการถอดรหัสลดลง และละเมิดข้อตกลงระดับการให้บริการ (SLA)

Shadow Engine Recovery: ทางออกที่รวดเร็วกว่า

Shadow Engine Recovery เป็นฟีเจอร์ทดลองใน NVIDIA Dynamo ที่ย้ายงานส่วนใหญ่ของการกู้คืนออกจากเส้นทางการให้บริการหลัก โดยมีหลักการทำงานคือ:

  • มี Engine สำรองพร้อมใช้งาน: มี "Shadow Engine" ที่ถูกเตรียมพร้อมและโหลดข้อมูลทุกอย่างไว้แล้ว อยู่ใน GPU เดียวกันกับ Active Engine ที่กำลังให้บริการ
  • ใช้ GPU Memory Service (GMS): GMS ทำหน้าที่จัดการหน่วยความจำ GPU สำหรับ Weights โดยเฉพาะ ทำให้ Weights ยังคงอยู่ในหน่วยความจำแม้ว่า Engine จะหยุดทำงานไปก็ตาม
  • แยกอายุการใช้งาน Weights ออกจาก Process Engine: Weights จะไม่ถูกลบไปพร้อมกับ Process ที่ล้มเหลว ทำให้ Engine ใหม่สามารถเข้าถึง Weights เดิมได้ทันที

หาก Active Engine เกิดล้มเหลว Shadow Engine จะเข้ามาทำหน้าที่แทนภายในเวลาเพียงไม่กี่วินาที โดยการเริ่มต้นใหม่จะเกิดขึ้นเบื้องหลังโดยไม่กระทบต่อการให้บริการ

ผลลัพธ์ที่น่าทึ่ง: เร็วกว่าเดิมเกือบ 39 เท่า!

จากการทดสอบกับโมเดล GLM-5.2 บน NVIDIA B200 Nodes พบว่า Shadow Engine Recovery สามารถลดเวลาการกู้คืนจาก 283 วินาที (ในการทำ Cold Restart) เหลือเพียง 7.3 วินาทีเท่านั้น ซึ่งหมายถึง:

  • TTFT ลดลงอย่างมาก: ผู้ใช้ได้รับข้อมูลเร็วขึ้น
  • อัตราการถอดรหัสเพิ่มขึ้น: ประสิทธิภาพการให้บริการดีขึ้น
  • การปฏิบัติตาม SLA ดีขึ้น: ลดปัญหาการละเมิดข้อตกลง

ทำไมการกู้คืน LLM จึงช้า?

มีปัญหาหลัก 2 ประการที่ทำให้การกู้คืน LLM ใช้เวลานาน:

  1. Weights ผูกติดกับ Engine Process: หน่วยความจำ GPU (HBM) ถูกเชื่อมโยงกับ CUDA Context ของ Engine Process เมื่อ Process นั้นจบลง ทรัพยากรทั้งหมด รวมถึง Weights ที่อยู่ใน HBM ก็จะถูกปล่อยไป ทำให้ Engine ใหม่ต้องโหลด Weights ซ้ำอีกครั้ง
  2. สถานะการเริ่มต้นบางอย่างไม่สามารถถ่ายทอดได้: ส่วนประกอบบางอย่าง เช่น NCCL, torch.distributed communicators และ CUDA graphs จะผูกติดกับ Process ที่กำลังทำงานอยู่ และต้องสร้างขึ้นใหม่ทุกครั้งที่เริ่มต้น

Shadow Engine Recovery แก้ปัญหาเหล่านี้ด้วยการแยกอายุของ Weights ออกจาก Process Engine และเตรียมพร้อมส่วนประกอบที่ไม่สามารถถ่ายทอดได้ล่วงหน้าก่อนเกิดความล้มเหลว

Shadow Engine Recovery ทำงานอย่างไร?

การทำงานร่วมกันของส่วนประกอบต่างๆ ทำให้ Shadow Engine Recovery สามารถกู้คืนระบบได้อย่างรวดเร็ว:

1. GPU Memory Service (GMS): หน่วยความจำ GPU ถาวรสำหรับ LLM Inference

GMS จัดการหน่วยความจำ GPU เฉพาะส่วน เช่น Weights โดยแยกจาก Engine Process ทำให้ Weights ยังคงอยู่ในหน่วยความจำแม้ Engine จะถูกรีสตาร์ท Engine ใหม่ที่อยู่บน GPU เดียวกันก็สามารถเข้าถึง Weights เดิมได้ทันที

  • การทำงาน: GMS เป็น Sidecar Process ที่จัดการหน่วยความจำ GPU โดยจะจัดสรรหน้าหน่วยความจำ (Physical Pages) และให้ Handle แก่ Engine ต่างๆ Engine สามารถเชื่อมต่อ, นำเข้า Handle, และ Map หน้าหน่วยความจำเหล่านั้นเข้ากับ Virtual Address ใน CUDA Context ของตนเอง
  • ข้อดี:
  • Weights คงอยู่แม้ Engine ล้มเหลว: แม้ CUDA Context ของ Engine ที่ล้มเหลวจะถูกลบไป แต่ GMS จะยังคงรักษาหน้าหน่วยความจำให้คงอยู่ ทำให้ Engine ใหม่สามารถ Map เข้าใช้งานได้ทันที
  • แชร์ Weights ระหว่าง Engine: Engine หลายตัวสามารถ Map ใช้ Weights ชุดเดียวกันได้โดยไม่ต้องสร้างสำเนา ทำให้ประหยัดหน่วยความจำ

GMS สามารถผสานรวมกับ Framework การ Inference เช่น vLLM, SGLang, และ NVIDIA TensorRT-LLM ได้ง่าย โดยการเปิดใช้งาน Flag ที่จุดเริ่มต้น

2. Shadow Engines: Engine สำรองที่พร้อมทำงานโดยไม่มีค่าใช้จ่ายเพิ่มเติมด้าน Weights

Shadow Engine คือ Process Engine ที่ถูกเตรียมพร้อมและรอทำงานอยู่บน GPU เดียวกันกับ Active Engine การที่ GMS ช่วยให้แชร์ Weights ได้ ทำให้การมี Shadow Engine ไม่ได้สิ้นเปลืองหน่วยความจำ HBM มากนัก

  • การเตรียมพร้อม: Shadow Engine จะผ่านกระบวนการเริ่มต้นเช่นเดียวกับ Active Engine โดยจะเชื่อมต่อกับ GMS, นำเข้า Weight Mappings, สร้าง Communicators (NCCL, NIXL), จับภาพ CUDA Graphs และทำการ Warm-up จนพร้อมให้บริการ
  • การพักรอ: เมื่อพร้อมแล้ว Shadow Engine จะเข้าสู่สถานะ "Park" คือปล่อยส่วนที่สามารถเรียกคืนได้ (เช่น KV Cache) และรอสัญญาณให้ทำงาน โดยยังคงมี CUDA Context, Captured Graphs, Communicators และ Weight Mappings อยู่
  • Footprint ที่เล็ก: ด้วยการไม่เก็บสำเนา Weights และ KV Cache ทำให้ Shadow Engine มีขนาดเล็กพอที่จะอยู่ร่วมกับ Active Engine บน GPU เดียวกันได้

3. Worker: หน่วยที่ใช้งานได้จริง

ส่วนประกอบทั้งหมดนี้ถูกรวมเข้าด้วยกันใน Pod ของ Worker ซึ่งประกอบด้วย:

  • Engine Containers 2 ตัว: ตัวหนึ่งเป็น Active Engine ที่กำลังให้บริการ อีกตัวเป็น Shadow Engine ที่พร้อมทำงาน
  • GMS Sidecar: คอยจัดการการเข้าถึงหน่วยความจำ GPU
  • Shared Lock: ใช้ในการเลือก Engine ที่จะเป็น Active Engine

เมื่อระบบทำงานปกติ Engine A จะเป็น Active Engine และ Engine B จะอยู่ในสถานะ Dormant รอสัญญาณ หาก Engine A ล้มเหลว (เช่น Crash หรือถูก Kill) Lock จะถูกปล่อย ทำให้ Engine B สามารถเข้ามารับช่วงต่อ, Remap Weights, สร้าง KV Cache และลงทะเบียนกับ Router ใหม่ได้

สรุป

Shadow Engine Recovery ใน NVIDIA Dynamo เป็นนวัตกรรมที่สำคัญในการเพิ่มความทนทานและประสิทธิภาพของระบบ LLM Inference การลดเวลาการกู้คืนจากหลักนาทีเหลือเพียงไม่กี่วินาที ช่วยให้ธุรกิจมั่นใจได้ว่าบริการ LLM จะมีความเสถียรและตอบสนองต่อผู้ใช้งานได้อย่างต่อเนื่อง แม้จะเกิดเหตุขัดข้องที่ไม่คาดคิดก็ตาม

#NVIDIADynamo #LLM #AI #ShadowEngineRecovery #GMS

ขอบคุณ แหล่งข้อมูล
https://developer.nvidia.com/blog/restore-llm-inference-capacity-in-seconds-with-shadow-engine-recovery-in-nvidia-dynamo/

กู้คืนประสิทธิภาพ LLM ในพริบตา ด้วย Shadow Engine Recovery ใน NVIDIA Dynamoเมื่อโมเดลภาษาขนาดใหญ่ (LLM) ที่ให้บริการเกิดข้อผิดพลาดและหยุดทำงาน การกู้คืนแบบเดิมมักต้องเริ่มต้นใหม่ทั้งหมด ซึ่งกระบวนการนี้อาจใช้เวลานานหลายนาที ทำให้การให้บริการหยุดชะงักและส่งผลกระทบต่อผู้ใช้งานอย่างมาก NVIDIA Dynamo ได้นำเสนอเทคโนโลยี "Shadow Engine Recovery" ที่ช่วยให้การกู้คืนทำได้รวดเร็วขึ้นมาก เพียงไม่กี่วินาทีเท่านั้น!ปัญหาของการกู้คืน LLM แบบเดิมโดยปกติแล้ว เมื่อกระบวนการ LLM Engine เกิดข้อผิดพลาด การกู้คืนจะทำได้โดยการ "Cold Restart" ซึ่งหมายถึงการเริ่มต้นใหม่ทั้งหมด กระบวนการนี้เกี่ยวข้องกับการ:โหลด Weights: นำข้อมูลโมเดล (Weights) จากที่เก็บข้อมูลมาโหลดเข้าสู่หน่วยความจำ HBM (High Bandwidth Memory) บน GPU ซึ่งสำหรับโมเดลขนาดใหญ่ขั้นตอนนี้อาจใช้เวลานานคอมไพล์ Kernels: สร้างและปรับแต่งโค้ดที่จำเป็นสำหรับการประมวลผลจับภาพ NVIDIA CUDA Graphs: บันทึกการทำงานของ GPU เพื่อให้สามารถเรียกใช้งานได้อย่างมีประสิทธิภาพสำหรับโมเดลขนาดใหญ่ ขั้นตอนเหล่านี้อาจใช้เวลาหลายนาที ในระหว่างนั้น พนักงานที่ยังทำงานได้ปกติจะต้องรับภาระทราฟฟิกที่เข้ามาทั้งหมด ซึ่งส่งผลให้เวลาในการตอบสนอง (TTFT - Time To First Token) เพิ่มสูงขึ้น อัตราการถอดรหัสลดลง และละเมิดข้อตกลงระดับการให้บริการ (SLA)Shadow Engine Recovery: ทางออกที่รวดเร็วกว่าShadow Engine Recovery เป็นฟีเจอร์ทดลองใน NVIDIA Dynamo ที่ย้ายงานส่วนใหญ่ของการกู้คืนออกจากเส้นทางการให้บริการหลัก โดยมีหลักการทำงานคือ:มี Engine สำรองพร้อมใช้งาน: มี "Shadow Engine" ที่ถูกเตรียมพร้อมและโหลดข้อมูลทุกอย่างไว้แล้ว อยู่ใน GPU เดียวกันกับ Active Engine ที่กำลังให้บริการใช้ GPU Memory Service (GMS): GMS ทำหน้าที่จัดการหน่วยความจำ GPU สำหรับ Weights โดยเฉพาะ ทำให้ Weights ยังคงอยู่ในหน่วยความจำแม้ว่า Engine จะหยุดทำงานไปก็ตามแยกอายุการใช้งาน Weights ออกจาก Process Engine: Weights จะไม่ถูกลบไปพร้อมกับ Process ที่ล้มเหลว ทำให้ Engine ใหม่สามารถเข้าถึง Weights เดิมได้ทันทีหาก Active Engine เกิดล้มเหลว Shadow Engine จะเข้ามาทำหน้าที่แทนภายในเวลาเพียงไม่กี่วินาที โดยการเริ่มต้นใหม่จะเกิดขึ้นเบื้องหลังโดยไม่กระทบต่อการให้บริการผลลัพธ์ที่น่าทึ่ง: เร็วกว่าเดิมเกือบ 39 เท่า!จากการทดสอบกับโมเดล GLM-5.2 บน NVIDIA B200 Nodes พบว่า Shadow Engine Recovery สามารถลดเวลาการกู้คืนจาก 283 วินาที (ในการทำ Cold Restart) เหลือเพียง 7.3 วินาทีเท่านั้น ซึ่งหมายถึง:TTFT ลดลงอย่างมาก: ผู้ใช้ได้รับข้อมูลเร็วขึ้นอัตราการถอดรหัสเพิ่มขึ้น: ประสิทธิภาพการให้บริการดีขึ้นการปฏิบัติตาม SLA ดีขึ้น: ลดปัญหาการละเมิดข้อตกลงทำไมการกู้คืน LLM จึงช้า?มีปัญหาหลัก 2 ประการที่ทำให้การกู้คืน LLM ใช้เวลานาน:Weights ผูกติดกับ Engine Process: หน่วยความจำ GPU (HBM) ถูกเชื่อมโยงกับ CUDA Context ของ Engine Process เมื่อ Process นั้นจบลง ทรัพยากรทั้งหมด รวมถึง Weights ที่อยู่ใน HBM ก็จะถูกปล่อยไป ทำให้ Engine ใหม่ต้องโหลด Weights ซ้ำอีกครั้งสถานะการเริ่มต้นบางอย่างไม่สามารถถ่ายทอดได้: ส่วนประกอบบางอย่าง เช่น NCCL, torch.distributed communicators และ CUDA graphs จะผูกติดกับ Process ที่กำลังทำงานอยู่ และต้องสร้างขึ้นใหม่ทุกครั้งที่เริ่มต้นShadow Engine Recovery แก้ปัญหาเหล่านี้ด้วยการแยกอายุของ Weights ออกจาก Process Engine และเตรียมพร้อมส่วนประกอบที่ไม่สามารถถ่ายทอดได้ล่วงหน้าก่อนเกิดความล้มเหลวShadow Engine Recovery ทำงานอย่างไร?การทำงานร่วมกันของส่วนประกอบต่างๆ ทำให้ Shadow Engine Recovery สามารถกู้คืนระบบได้อย่างรวดเร็ว:1. GPU Memory Service (GMS): หน่วยความจำ GPU ถาวรสำหรับ LLM InferenceGMS จัดการหน่วยความจำ GPU เฉพาะส่วน เช่น Weights โดยแยกจาก Engine Process ทำให้ Weights ยังคงอยู่ในหน่วยความจำแม้ Engine จะถูกรีสตาร์ท Engine ใหม่ที่อยู่บน GPU เดียวกันก็สามารถเข้าถึง Weights เดิมได้ทันทีการทำงาน: GMS เป็น Sidecar Process ที่จัดการหน่วยความจำ GPU โดยจะจัดสรรหน้าหน่วยความจำ (Physical Pages) และให้ Handle แก่ Engine ต่างๆ Engine สามารถเชื่อมต่อ, นำเข้า Handle, และ Map หน้าหน่วยความจำเหล่านั้นเข้ากับ Virtual Address ใน CUDA Context ของตนเองข้อดี:Weights คงอยู่แม้ Engine ล้มเหลว: แม้ CUDA Context ของ Engine ที่ล้มเหลวจะถูกลบไป แต่ GMS จะยังคงรักษาหน้าหน่วยความจำให้คงอยู่ ทำให้ Engine ใหม่สามารถ Map เข้าใช้งานได้ทันทีแชร์ Weights ระหว่าง Engine: Engine หลายตัวสามารถ Map ใช้ Weights ชุดเดียวกันได้โดยไม่ต้องสร้างสำเนา ทำให้ประหยัดหน่วยความจำGMS สามารถผสานรวมกับ Framework การ Inference เช่น vLLM, SGLang, และ NVIDIA TensorRT-LLM ได้ง่าย โดยการเปิดใช้งาน Flag ที่จุดเริ่มต้น2. Shadow Engines: Engine สำรองที่พร้อมทำงานโดยไม่มีค่าใช้จ่ายเพิ่มเติมด้าน WeightsShadow Engine คือ Process Engine ที่ถูกเตรียมพร้อมและรอทำงานอยู่บน GPU เดียวกันกับ Active Engine การที่ GMS ช่วยให้แชร์ Weights ได้ ทำให้การมี Shadow Engine ไม่ได้สิ้นเปลืองหน่วยความจำ HBM มากนักการเตรียมพร้อม: Shadow Engine จะผ่านกระบวนการเริ่มต้นเช่นเดียวกับ Active Engine โดยจะเชื่อมต่อกับ GMS, นำเข้า Weight Mappings, สร้าง Communicators (NCCL, NIXL), จับภาพ CUDA Graphs และทำการ Warm-up จนพร้อมให้บริการการพักรอ: เมื่อพร้อมแล้ว Shadow Engine จะเข้าสู่สถานะ "Park" คือปล่อยส่วนที่สามารถเรียกคืนได้ (เช่น KV Cache) และรอสัญญาณให้ทำงาน โดยยังคงมี CUDA Context, Captured Graphs, Communicators และ Weight Mappings อยู่Footprint ที่เล็ก: ด้วยการไม่เก็บสำเนา Weights และ KV Cache ทำให้ Shadow Engine มีขนาดเล็กพอที่จะอยู่ร่วมกับ Active Engine บน GPU เดียวกันได้3. Worker: หน่วยที่ใช้งานได้จริงส่วนประกอบทั้งหมดนี้ถูกรวมเข้าด้วยกันใน Pod ของ Worker ซึ่งประกอบด้วย:Engine Containers 2 ตัว: ตัวหนึ่งเป็น Active Engine ที่กำลังให้บริการ อีกตัวเป็น Shadow Engine ที่พร้อมทำงานGMS Sidecar: คอยจัดการการเข้าถึงหน่วยความจำ GPUShared Lock: ใช้ในการเลือก Engine ที่จะเป็น Active Engineเมื่อระบบทำงานปกติ Engine A จะเป็น Active Engine และ Engine B จะอยู่ในสถานะ Dormant รอสัญญาณ หาก Engine A ล้มเหลว (เช่น Crash หรือถูก Kill) Lock จะถูกปล่อย ทำให้ Engine B สามารถเข้ามารับช่วงต่อ, Remap Weights, สร้าง KV Cache และลงทะเบียนกับ Router ใหม่ได้สรุปShadow Engine Recovery ใน NVIDIA Dynamo เป็นนวัตกรรมที่สำคัญในการเพิ่มความทนทานและประสิทธิภาพของระบบ LLM Inference การลดเวลาการกู้คืนจากหลักนาทีเหลือเพียงไม่กี่วินาที ช่วยให้ธุรกิจมั่นใจได้ว่าบริการ LLM จะมีความเสถียรและตอบสนองต่อผู้ใช้งานได้อย่างต่อเนื่อง แม้จะเกิดเหตุขัดข้องที่ไม่คาดคิดก็ตาม#NVIDIADynamo #LLM #AI #ShadowEngineRecovery #GMShttps://developer.nvidia.com/blog/restore-llm-inference-capacity-in-seconds-with-shadow-engine-recovery-in-nvidia-dynamo/
Shared content
DEVELOPER.NVIDIA.COM
Restore LLM Inference Capacity in Seconds with Shadow Engine Recovery in NVIDIA Dynamo
When an LLM engine process fails, the standard recovery path involves a cold restart. This requires loading weights into HBM from storage, compiling kernels, and capturing NVIDIA CUDA graphs.
3 Commentaires 0 Parts 252 Vue 0 Aperçu