Model & Inference Engine

โมเดล 

  • weights (ก้อนตัวเลขความรู้),
  • สถาปัตยกรรม (กี่ layer/attention/hidden dimension แบบไหน)
  • tokenizer (แปลงข้อความ ⇄ token)

ไฟล์โมเดลเปิดขึ้นมาเอง “ทำอะไรไม่ได้” ต้องมี engine มารัน

Number types

ความละเอียดตัวเลขกำหนดทั้งขนาดไฟล์ ความเร็ว และคุณภาพ:

  • fp32 (32 bit/4 ไบต์) → fp16/bf16 (16 bit/2 ไบต์) → fp8/int8 (8 bit/1 ไบต์) → int4/NVFP4 (4 bit/0.5 ไบต์)
  • หลักคือ bit น้อย → ไฟล์เล็ก → อ่านเร็ว แต่เสี่ยงคุณภาพ
  • int กับ float ต่างกันที่ช่วงค่า (dynamic range)

NVFP4 คือ FP4 ที่ NVIDIA ออกแบบสำหรับ Tensor Core รุ่นที่ 5 บน Blackwell (ชิป GB10 ของ DGX Spark ซึ่งสเปกระบุ “1 PFLOP ที่ FP4”)

ไฟล์โมเดล:

  • safetensors / GGUF — safetensors (Hugging Face) แยก weight/config/tokenizer เป็นหลายไฟล์ และโหลดปลอดภัยกว่า pickle;
  • GGUF (llama.cpp) รวมทุกอย่างในไฟล์เดียว ฝัง metadata และชื่อ quant (เช่น Q4_K_M) ไว้ในตัว

แปลงด้วย convert_hf_to_gguf.py แล้ว quant ด้วย llama-quantize (มีตัวเลือก --imatrix, --leave-output-tensor, --pure)

ภาพรวม engine

  • llama.cpp/ollama เน้นง่าย ยืดหยุ่น รันได้ทั้ง CPU+GPU,
  • vLLM/SGLang เน้น throughput สูงและ OpenAI-compatible API (vLLM เป็นสถาปัตยกรรม multi-process + PagedAttention),
  • TRT-LLM ปลดพลัง FP4/NVFP4 ได้เต็มที่ (แลกกับเวลา setup ที่เยอะ),
  • ds4 คือแนวคิด model-specific engine ที่เขียน CUDA สำหรับโมเดลเดียว (DeepSeek V4 Flash) ได้ prefill ~3 เท่า / decode ~1.5 เท่า

inference มีสองเฟส:

  • prefill (อ่าน prompt พร้อมกัน เรียกว่า compute-bound) และ
  • decode (ปล่อยทีละ token แบบ autoregressive เรียกว่า bandwidth-bound) เพราะ decode ต้องดึง weight ทั้งโมเดลจากหน่วยความจำต่อ token —

สูตรคือ tok/s ≈ bandwidth ÷ ขนาดโมเดล (เช่น 27B 4-bit ≈ 18 GB บน Spark 273 GB/s → ~15 tok/s) และ KV cache โตตามความยาว context แต่เทคนิค attention สมัยใหม่ (CSA/HCA ของ DeepSeek V4 Flash) บีบ KV cache เหลือ ~7% ที่ context 1M