ข้ามไปยังเนื้อหา
KoishiAI
EN
← สารบัญ

บทที่ 4 จาก 9 · AI 101 — คู่มือเริ่มต้นสำหรับคนที่จะเอา AI ไปใช้งานจริง

ตัวรันโมเดล มีแบบไหนบ้าง

ชั้นของ stack ตั้งแต่ไดรเวอร์ถึงหน้าจอผู้ใช้ ตัวรันหลักแต่ละตัวเหมาะกับงานแบบไหน พร้อมคำสั่งจริงของ Ollama, llama.cpp, vLLM และ SGLang รวมถึงเหตุผลที่ควรออกแบบให้แอปพูดกับ API มาตรฐานตั้งแต่วันแรก

4.1 ชั้นของ stack

[6] หน้าตาที่ผู้ใช้เห็น    Open WebUI, LM Studio, ComfyUI, แอปของคุณเอง
        ↑ พูดกันด้วย HTTP มักเป็น OpenAI-compatible API
[5] เซิร์ฟเวอร์          Ollama serve, vLLM serve, llama-server, Triton

[4] ตัวรัน (engine)      llama.cpp, vLLM, SGLang, TensorRT-LLM, ExLlamaV3, MLX

[3] เฟรมเวิร์ก           PyTorch, JAX, GGML

[2] ไลบรารีคำนวณ         CUDA / cuDNN / cuBLAS, ROCm, Metal, Vulkan

[1] ไดรเวอร์และฮาร์ดแวร์  NVIDIA driver, GPU

ปัญหาที่คนเจอบ่อยที่สุดตอนเริ่มต้นอยู่ที่ชั้น 1–2 ไม่ใช่ชั้น 4–5 เช่น เวอร์ชัน CUDA ไม่ตรงกับ PyTorch หรือไดรเวอร์เก่าเกินกว่าที่การ์ดรุ่นใหม่ต้องการ เวลาติดปัญหา ให้ไล่จากล่างขึ้นบนเสมอ

4.2 ตัวรันหลักและควรใช้เมื่อไหร่

ตัวรันรูปแบบไฟล์จุดแข็งควรใช้เมื่อ
OllamaGGUFติดตั้งคำสั่งเดียว จัดการ VRAM เอง มี API แบบ OpenAIเริ่มต้น, ใช้คนเดียวบนเครื่องตัวเอง, ทำต้นแบบ
LM StudioGGUF, MLXมีหน้าต่างให้คลิก ไม่ต้องใช้เทอร์มินัลคนที่ไม่ถนัดบรรทัดคำสั่ง อยากลองหลายโมเดล
llama.cppGGUFยืดหยุ่นสุด รันได้แทบทุกฮาร์ดแวร์ แบ่งภาระ GPU/CPU ได้ฮาร์ดแวร์จำกัด, การ์ดผสมรุ่น, ต้องการควบคุมละเอียด
vLLMsafetensors, AWQ, FP8throughput สูง, continuous batching, prefix cachingให้บริการหลายคนพร้อมกัน, งานที่รันเป็นระบบจริง
SGLangsafetensorslatency ต่ำ, structured output, เก่งงาน prompt ซ้ำ ๆงาน agent, บังคับให้ตอบเป็น JSON, prompt มีส่วนซ้ำเยอะ
TensorRT-LLMengine ที่คอมไพล์เร็วที่สุดบน NVIDIAปริมาณงานสูงมากและยอมแลกกับความยุ่งยากในการคอมไพล์
ExLlamaV3EXL3เร็วมากบนการ์ดผู้บริโภคใบเดียวผู้ใช้ที่ต้องการรีดความเร็วสูงสุดจากการ์ดที่มี
MLXMLXเร็วที่สุดบน Apple Siliconใช้ Mac เป็นเครื่องหลัก
ONNX RuntimeONNXข้ามแพลตฟอร์ม ดีบน CPU และอุปกรณ์ฝังตัวโมเดลเล็กบนเครื่องลูกค้า, มือถือ, edge

สถานะที่เปลี่ยนไปในปี 2026

Hugging Face TGI ซึ่งเคยเป็นตัวเลือกยอดนิยมสำหรับ production ถูกจัดเป็นสถานะดูแลรักษาตั้งแต่เดือนมีนาคม 2026 โดยหยุดพัฒนาฟีเจอร์ใหม่ ระบบเดิมยังทำงานได้ แต่ไม่ใช่จุดเริ่มต้นที่แนะนำสำหรับโปรเจกต์ใหม่แล้ว ประเด็นทั่วไปที่ควรจำคือ ระบบนิเวศนี้เปลี่ยนเร็ว ให้ออกแบบระบบโดยพูดกับ API มาตรฐาน เพื่อที่จะเปลี่ยนตัวรันได้โดยไม่ต้องแก้แอป

4.3 ตัวอย่างการรันจริง

Ollama — ง่ายที่สุด เหมาะกับการเริ่มต้น

# ติดตั้ง (Linux/macOS)
curl -fsSL https://ollama.com/install.sh | sh

# ดึงและคุยทันที
ollama run qwen3:8b

# ดูว่ามีโมเดลอะไรอยู่ และแต่ละตัวใช้ VRAM เท่าไรตอนรัน
ollama list
ollama ps

เรียกผ่าน API แบบ OpenAI ที่พอร์ต 11434:

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3:8b",
    "messages": [{"role":"user","content":"สรุปย่อหน้านี้ให้สั้นที่สุด: ..."}],
    "temperature": 0.3
  }'

ปรับค่าเริ่มต้นด้วย Modelfile:

cat > Modelfile <<'EOF'
FROM qwen3:8b
PARAMETER num_ctx 8192          # ความยาว context
PARAMETER temperature 0.3
PARAMETER num_gpu 999           # จำนวนชั้นที่ให้อยู่บน GPU (999 = ทั้งหมด)
SYSTEM "ตอบเป็นภาษาไทย กระชับ ตรงประเด็น"
EOF
ollama create my-assistant -f Modelfile

llama.cpp — ควบคุมได้ละเอียดที่สุด

# ติดตั้งแบบคอมไพล์เองพร้อมรองรับ CUDA
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON && cmake --build build -j --config Release

# ดาวน์โหลดโมเดลจาก Hugging Face
huggingface-cli download Qwen/Qwen3-8B-GGUF Qwen3-8B-Q4_K_M.gguf \
  --local-dir ./models

รันเป็นเซิร์ฟเวอร์ โดยเปิด API แบบ OpenAI ที่พอร์ต 8080:

./build/bin/llama-server \
  -m ./models/Qwen3-8B-Q4_K_M.gguf \
  -ngl 99 \                      # จำนวนชั้นที่โยนขึ้น GPU ลดลงถ้า VRAM ไม่พอ
  -c 8192 \                      # ความยาว context
  -np 4 \                        # จำนวน slot ที่รับพร้อมกัน
  --host 0.0.0.0 --port 8080 \
  --flash-attn \                 # ประหยัด VRAM ของ attention
  -ctk q8_0 -ctv q8_0            # quantize KV cache ประหยัดได้มากตอน context ยาว

# วัดความเร็วจริงของเครื่องตัวเอง
./build/bin/llama-bench -m ./models/Qwen3-8B-Q4_K_M.gguf -p 512 -n 128

vLLM — สำหรับให้บริการหลายคนพร้อมกัน

uv pip install vllm

vllm serve Qwen/Qwen3-8B \
  --port 8000 \
  --max-model-len 16384 \
  --gpu-memory-utilization 0.90 \   # ใช้ VRAM ได้ถึง 90% ที่เหลือกันไว้
  --kv-cache-dtype fp8 \            # ลด VRAM ของ KV cache ราวครึ่ง
  --enable-prefix-caching \         # ใช้ซ้ำส่วนต้นของ prompt ที่เหมือนกัน
  --tensor-parallel-size 1          # จำนวนการ์ดที่แบ่งกันคำนวณ

# ดูเมตริกแบบ Prometheus
curl http://localhost:8000/metrics | grep -E "num_requests|gpu_cache_usage"

SGLang — งาน agent และ JSON

uv pip install "sglang[all]"

python -m sglang.launch_server \
  --model-path Qwen/Qwen3-8B \
  --port 30000 \
  --context-length 16384 \
  --enable-torch-compile

บังคับให้ตอบตาม schema:

curl localhost:30000/v1/chat/completions \
  -d '{
    "model":"default",
    "messages":[{"role":"user","content":"สกัดชื่อและยอดจากใบเสร็จนี้"}],
    "response_format":{
      "type":"json_schema",
      "json_schema":{"schema":{
        "type":"object",
        "properties":{
          "vendor":{"type":"string"},
          "total":{"type":"number"}},
        "required":["vendor","total"]}}}
  }'

งานภาพและเสียง

สร้างภาพด้วย diffusers:

import torch
from diffusers import AutoPipelineForText2Image

pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/sdxl-turbo",
    torch_dtype=torch.float16,
    use_safetensors=True)        # บังคับรูปแบบปลอดภัย
pipe.to("cuda")
pipe.enable_model_cpu_offload()  # ประหยัด VRAM

img = pipe("a cat in a library", num_inference_steps=4).images[0]
img.save("out.png")

ถอดเสียงด้วย faster-whisper:

from faster_whisper import WhisperModel

m = WhisperModel("large-v3", device="cuda", compute_type="float16")
segs, info = m.transcribe("meeting.mp3", language="th")
for s in segs:
    print(f"[{s.start:.1f}s] {s.text}")

4.4 มาตรฐานกลางที่ทำให้เปลี่ยนตัวรันได้ง่าย

ตัวรันเกือบทุกตัวเปิด API หน้าตาเหมือน OpenAI ที่ /v1/chat/completions ถ้าแอปของคุณเรียกผ่านมาตรฐานนี้ การเปลี่ยนจาก Ollama ตอนต้นแบบไปเป็น vLLM ตอนขึ้นจริง จะเป็นแค่การเปลี่ยน base URL ไม่ต้องเขียนโค้ดใหม่ ให้ออกแบบแบบนี้ตั้งแต่วันแรกเสมอ

from openai import OpenAI

# เปลี่ยนแค่สองบรรทัดนี้เวลาย้ายตัวรัน
client = OpenAI(
    base_url="http://localhost:11434/v1",   # Ollama
    # base_url="http://localhost:8000/v1",  # vLLM
    # base_url="http://localhost:8080/v1",  # llama.cpp
    # base_url="http://localhost:30000/v1", # SGLang
    api_key="not-needed-for-local",
)

resp = client.chat.completions.create(
    model="qwen3:8b",
    messages=[{"role": "user", "content": "อธิบาย RAG ใน 3 บรรทัด"}],
    temperature=0.3,
    max_tokens=512,
)
print(resp.choices[0].message.content)

สรุปบทนี้

เลือกตัวรันตามงาน ไม่ใช่ตามความนิยม Ollama สำหรับเริ่มต้นและงานคนเดียว llama.cpp เมื่อฮาร์ดแวร์จำกัด vLLM เมื่อต้องรับหลายคน SGLang เมื่อต้องบังคับรูปแบบคำตอบ และไม่ว่าจะเลือกตัวไหน ให้แอปพูดกับ API มาตรฐาน เพื่อให้ย้ายตัวรันได้โดยไม่ต้องรื้อโค้ด

บทถัดไปว่าด้วยการวัดว่าโมเดลกินทรัพยากรเท่าไรจริง ๆ ซึ่งเป็นจุดที่ระบบจริงพังบ่อยที่สุด