5 โปรเจกต์วิศวกรรม LLM Inference เพื่อความเข้าใจระบบเบื้องหลัง

การฝึกฝน (Training) large language models มักจะได้รับความสนใจมากที่สุด แต่เมื่อ model ถูกฝึกเสร็จแล้ว ปัญหาทางวิศวกรรมที่สำคัญอีกประการหนึ่งคือ คุณจะให้บริการ (serve) มันอย่างไรให้รวดเร็วและมีประสิทธิภาพ?
LLM inference engineering มุ่งเน้นไปที่การลด latency, การเพิ่ม throughput, การลดการใช้ memory และการดึงประสิทธิภาพจาก hardware ที่มีอยู่ให้ได้มากที่สุด ซึ่งรวมถึงเทคนิคต่างๆ เช่น KV caching, continuous batching, quantization, prefix caching, speculative decoding, optimized attention kernels และ distributed inference วิธีที่ดีที่สุดในการเรียนรู้คือการสร้างบางอย่างขึ้นมาแล้วดูผลลัพธ์ ในบทความนี้เราจะมาดู 5 โปรเจกต์ที่จะช่วยแนะนำแนวคิดสำคัญเบื้องหลังระบบ LLM inference สมัยใหม่
1. การสร้าง Mini-vLLM จากศูนย์
หากคุณต้องการโปรเจกต์ที่ครอบคลุม inference stack เกือบทั้งหมด นี่คือจุดเริ่มต้นที่ดีที่สุด Nano-vLLM คือการนำ engine ของ vLLM มาปรับให้มีขนาดเล็กเพื่อการศึกษา โดยมีส่วนประกอบหลักที่อ่านทำความเข้าใจได้ง่าย
โปรเจกต์นี้รวมถึงการทำ scheduling, การจัดการ KV-cache block, prefix caching, tensor parallelism, CUDA graphs และการใช้ model Qwen ของจริง แทนที่จะแค่ clone มาใช้งาน ให้ลองสร้างใหม่ทีละส่วน เริ่มจากการทำ autoregressive generation ปกติ แล้วค่อยๆ เพิ่ม KV caching, batching และการจัดสรร KV-cache แบบ block-based พร้อมทำ Benchmark tokens per second ในแต่ละขั้นตอน เพื่อให้เข้าใจแนวคิด PagedAttention และ continuous batching อย่างลึกซึ้ง
2. การเขียน FlashAttention Kernel ของคุณเองด้วย Triton
การจัดการ attention แบบปกติมักใช้ matrix ขนาดใหญ่และต้องเคลื่อนย้ายข้อมูลซ้ำๆ ระหว่าง GPU memory และ on-chip memory ความเร็วสูง ซึ่ง FlashAttention จะเข้ามาปรับโครงสร้างการคำนวณเพื่อลดภาระในส่วนนี้
Triton's official tutorial ได้จัดเตรียม FlashAttention-style fused attention kernel สำหรับการเรียนรู้การเพิ่มประสิทธิภาพระดับ kernel นอกจากนี้ยังมี วิดีโอ สอนสร้าง FlashAttention จากศูนย์ที่อธิบายเรื่อง HBM เทียบกับ SRAM, arithmetic intensity, tiling และ online softmax โปรเจกต์นี้จะสอนให้รู้ว่าการทำให้ LLM เร็วขึ้น บางครั้งคือเรื่องของ การเคลื่อนย้ายข้อมูลให้น้อยลง ไม่ใช่แค่การลดการคำนวณ
3. การสร้างห้องทดลอง LLM Quantization
ลองนำ open model ขนาดเล็กมาทดสอบรันหลายเวอร์ชัน เช่น FP16, INT8 และ 4-bit จากนั้นให้วัดผลทั้งขนาด model, peak memory, ระยะเวลาโหลด, time to first token (TTFT), tokens per second และคุณภาพจากการทดสอบชุดเล็ก
Hugging Face รองรับ quantization หลายรูปแบบ เช่น AWQ, GPTQ รวมถึงการโหลดแบบ 8-bit และ 4-bit ผ่าน bitsandbytes ขณะที่ llama.cpp รองรับรูปแบบ low-bit บน hardware ที่หลากหลายทั้ง CPU และ Apple Silicon สำหรับความท้าทายเพิ่มเติม ให้ลองทำ quantize ทั้ง weights และ KV cache เพื่อดูว่าการใช้ bit น้อยลงจะช่วยปรับปรุง latency ได้เสมอไปหรือไม่
4. การปรับใช้ Speculative Decoding
Speculative decoding เป็นเทคนิคที่น่าสนใจโดยการใช้ draft model ขนาดเล็กมาช่วยเสนอ candidate tokens หลายตัวเพื่อให้ target model ขนาดใหญ่ตรวจสอบพร้อมกัน แทนการสร้างทีละ token ตามลำดับ
ลองสร้าง loop สำหรับ draft-and-verify โดยติดตามทั้ง tokens per second และ acceptance rate (เปอร์เซ็นต์ที่ draft tokens ถูกยอมรับ) จากนั้นทดลองปรับจำนวน draft ตั้งแต่ 2 ถึง 8 tokens โปรเจกต์ของ Columbia ได้ทดลองทั้งวิธีนี้และ quantization กับตระกูล Llama model เพื่อประเมินผลกระทบต่อคุณภาพและการทำงานใน workload ที่ต่างกัน เช่น งานเขียนโปรแกรม หรืองานเขียนเชิงสร้างสรรค์
5. การสร้างบริการ Production LLM Inference ของคุณเอง
โปรเจกต์สุดท้ายคือการนำทุกเทคนิคมาตัดสินรวมกันในระบบเดียว เริ่มจากการสร้าง inference endpoint ที่รองรับ OpenAI บน GPU เพิ่มระบบ streaming, load testing และวัดผล TTFT จากนั้นค่อยๆ ใส่เทคนิค quantization, speculative decoding และ prefix caching เข้าไป
โปรเจกต์ Time to First Token มีโครงสร้างที่ดีสำหรับการทดสอบ concurrency หนักๆ และการทำ benchmarking ที่ทำซ้ำได้ หากต้องการความยากขึ้นไปอีก ให้เพิ่ม request router ที่ตัดสินใจเลือก model หรือ GPU ตามความยาวคิวหรือเงื่อนไข latency เพื่อดึงประสิทธิภาพสูงสุดจากทรัพยากรที่มี
บทสรุป
แม้พื้นฐานเรื่อง transformers และ attention จะสำคัญ แต่ปัญหาที่ยากที่สุดในขั้นตอนนี้กลับเกี่ยวกับการจัดสรร memory, scheduling, batching และการปรับแต่ง kernel เพื่อให้ hardware ราคาแพงทำงานได้คุ้มค่าที่สุด
การสร้างโปรเจกต์จึงเป็นวิธีเรียนรู้ที่ดีที่สุด เริ่มจากการสร้าง token แบบง่ายๆ แล้วค่อยๆ เพิ่มความซับซ้อนอย่าง KV cache, batching, PagedAttention และ GPU kernel เมื่อคุณทำสำเร็จ เครื่องมือระดับโลกอย่าง vLLM และ SGLang จะไม่ใช่กล่องดำสำหรับคุณอีกต่อไป
ความคิดเห็น (0)
เข้าสู่ระบบเพื่อร่วมแสดงความเห็น
สมัครสมาชิกมาเป็นคนแรกที่แสดงความเห็นกันเลยโบร
