How to Deploy Open-Source LLM บน GPU Cloud ให้พร้อมใช้งานจริง

บทความนี้พาคุณตั้งแต่เลือกโมเดล open-source ที่เหมาะกับงาน ไปจนถึงการ deploy บน GPU Cloud, เปิดใช้งานผ่าน API, ทำ autoscaling เบื้องต้น และวาง monitoring/cost optimization เพื่อใช้งานจริงในทีมได้อย่างมั่นใจ

How to Deploy Open-Source LLM บน GPU Cloud ให้พร้อมใช้งานจริง

LLM, GPU Cloud, Open-Source, MLOps, Deployment

การรัน Open-Source LLM บน GPU Cloud เองช่วยให้ทีมควบคุม ต้นทุน, latency, privacy และความยืดหยุ่น ได้มากกว่าใช้ managed service ทั้งหมด บทความนี้จะพาคุณทำแบบเป็นขั้นตอน ตั้งแต่เลือกโมเดล เตรียมเครื่อง Serve ผ่าน API ตั้ง autoscaling แบบเริ่มต้น ไปจนถึง monitoring และการคุมค่าใช้จ่าย หลังอ่านจบคุณจะมี deployment flow ที่นำไปใช้จริงได้ทันที โดยมี prerequisite คือความคุ้นเคยกับ Linux, Docker, พื้นฐาน GPU/CUDA และการเรียกใช้งาน REST API

Step 1: เลือกโมเดลและขนาดเครื่องให้เหมาะกับงาน

ก่อน deploy ต้องตอบให้ได้ก่อนว่าโมเดลจะถูกใช้ทำอะไร เช่น chat ภายในองค์กร, summarize เอกสาร, หรือช่วยเขียนโค้ด เพราะงานแต่ละแบบมีผลต่อการเลือก model size, context length และปริมาณ VRAM

แนวทางเลือกเบื้องต้น:

  • ถ้าต้องการเริ่มเร็ว ใช้โมเดลกลุ่ม 7B ถึง 8B ก่อน เพราะรันง่ายและต้นทุนไม่สูงเกินไป
  • ถ้างานต้องการ reasoning มากขึ้น ค่อยขยับไป 13B หรือใช้ quantization เพื่อลดการใช้ VRAM
  • ถ้า traffic ยังไม่แน่นอน ให้เริ่มจาก 1 GPU ก่อน แล้ววัด latency จริง
  • เลือกโมเดลที่มี license ชัดเจนและเหมาะกับการใช้งานเชิงพาณิชย์
  • ตัวอย่างการ mapping แบบง่าย:

  • งาน chatbot ทั่วไป: 7B/8B + GPU ระดับ 24GB VRAM
  • งาน context ยาวหรือ concurrent สูง: GPU 40GB ขึ้นไป
  • ต้องการประหยัดต้นทุน: ใช้ quantized model เช่น 4-bit หรือ 8-bit
  • > หลักคิดสำคัญคือ อย่าเลือกโมเดลใหญ่เกินความจำเป็น เพราะต้นทุน GPU จะเพิ่มเร็วมากเมื่อขนาดโมเดลโตขึ้น

    Step 2: เตรียม GPU Cloud และเปิดเสิร์ฟโมเดลผ่าน API

    เมื่อได้โมเดลแล้ว ขั้นต่อไปคือสร้าง runtime ที่ deploy ซ้ำได้ง่ายที่สุด วิธีที่เหมาะกับทีมส่วนใหญ่คือใช้ Docker และ inference server เช่น vLLM หรือ Text Generation Inference เพราะช่วยจัดการ batching และ throughput ได้ดีกว่ารันสคริปต์เอง

    สิ่งที่ควรเตรียมบนเครื่อง:

  • NVIDIA driver และ CUDA runtime ที่เข้ากันได้
  • Docker และ nvidia-container-toolkit
  • พื้นที่ disk สำหรับเก็บ model weights
  • Security group หรือ firewall ที่เปิดเฉพาะ port จำเป็น
  • ตัวอย่างการรันด้วย Docker:

    docker run --gpus all --rm -p 8000:8000 \
      -v /models:/models \
      vllm/vllm-openai:latest \
      --model /models/your-llm \
      --host 0.0.0.0 \
      --port 8000 \
      --max-model-len 4096

    เหตุผลที่ควรใช้ server ลักษณะนี้:

  • มี API format ที่เรียกใช้งานง่าย
  • รองรับ concurrent requests ได้ดีกว่า
  • ปรับ parameter เช่น max tokens, batching, context length ได้จาก config
  • ตัวอย่างเรียก API:

    curl http://YOUR_SERVER:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "your-llm",
        "messages": [
          {"role": "user", "content": "สรุปเอกสารนี้ให้หน่อย"}
        ],
        "temperature": 0.7,
        "max_tokens": 300
      }'

    ใน production ควรวาง reverse proxy ด้านหน้าอีกชั้นเพื่อจัดการ:

  • TLS termination
  • rate limiting
  • authentication
  • request logging
  • Step 3: ทำ autoscaling เบื้องต้นให้รองรับโหลดจริง

    หลายทีม deploy ได้แต่ติดปัญหาเมื่อมีผู้ใช้เพิ่มขึ้น เพราะ LLM ใช้ทรัพยากรสูงและ scale ไม่เหมือน web app ทั่วไป วิธีเริ่มต้นที่ practical คือใช้ container orchestration เช่น Kubernetes แล้วแยกเป็น 2 ระดับของการ scale

    ระดับที่ควรมี:

  • Horizontal scaling เพิ่มจำนวน inference replica เมื่อ request queue สูง
  • Node scaling เพิ่ม GPU node เมื่อ replica ใหม่ไม่มีที่ลง
  • ตัวชี้วัดที่เหมาะกับ autoscaling มากกว่า CPU usage คือ:

  • requests per second
  • queue length
  • time to first token
  • GPU memory utilization
  • average latency ต่อ request
  • แนวทางเริ่มต้น:

  • ตั้ง minimum replicas = 1 เพื่อให้ service พร้อมตลอด
  • scale out เมื่อ latency หรือ queue length เกิน threshold ติดต่อกัน 3-5 นาที
  • scale in ช้ากว่า scale out เพื่อป้องกันแกว่งไปมา
  • > สำหรับ LLM, queue length และ latency มักสะท้อนปัญหาได้ดีกว่า CPU เพราะ bottleneck อยู่ที่ GPU และ batching behavior

    ถ้ายังไม่พร้อมใช้ Kubernetes เต็มรูปแบบ ให้เริ่มจากการมี 2 instance หลัง load balancer และสลับเปิดเพิ่มตามช่วงเวลาใช้งานจริงก่อนก็ได้ วิธีนี้ง่ายและลดความซับซ้อนในระยะแรก

    Step 4: วาง monitoring และคุมต้นทุนตั้งแต่วันแรก

    ถ้าไม่มี monitoring ทีมจะตอบไม่ได้ว่า service ช้าเพราะอะไร และกำลังจ่ายเงินแพงเกินจำเป็นหรือไม่ อย่างน้อยควรเก็บ metrics, logs และ cost per request

    สิ่งที่ควร monitor:

  • GPU utilization และ VRAM usage
  • request count, error rate, p95 latency
  • token throughput
  • time to first token
  • ค่าใช้จ่ายต่อวันและต่อ 1,000 requests
  • ตัวอย่างสิ่งที่ควร log ต่อ request:

    {
      "model": "your-llm",
      "input_tokens": 520,
      "output_tokens": 180,
      "latency_ms": 2400,
      "status": 200
    }

    แนวทาง optimization ที่เห็นผลเร็ว:

  • ใช้ smaller model กับงานทั่วไป และส่งเฉพาะงานยากไป model ใหญ่
  • จำกัด max_tokens ไม่ให้สูงเกินความจำเป็น
  • ใช้ quantization เพื่อลด VRAM และเปิดทางให้ใช้ GPU รุ่นเล็กลง
  • เปิด batching เมื่อ workload เป็นงานลักษณะคล้ายกัน
  • ปิด instance นอกเวลาหรือใช้ scheduled scaling
  • Troubleshooting / Tips

    ปัญหาที่พบบ่อยเมื่อ deploy LLM บน GPU Cloud:

  • โหลดโมเดลไม่ขึ้น: ตรวจสอบ version ของ CUDA, driver และ image ให้เข้ากัน
  • Out of Memory: ลด context length, ลด batch size หรือใช้ quantized model
  • Latency สูงผิดปกติ: ดูว่า bottleneck มาจาก model load, network หรือ prompt ที่ยาวเกินไป
  • ค่าใช้จ่ายพุ่งเร็ว: วัด cost per request และแยก workload ตามความซับซ้อน
  • ผลลัพธ์ไม่นิ่ง: คุม temperature, system prompt และ version ของ model ให้คงที่
  • เคล็ดลับเพิ่มเติม:

  • แยก staging กับ production เพื่อทดสอบ model/config ใหม่อย่างปลอดภัย
  • pin version ของ image และ model ทุกครั้งเพื่อให้ deploy ซ้ำได้
  • เก็บ benchmark ชุดเดิมไว้เทียบก่อนและหลังปรับแต่งระบบ
  • สรุปแล้ว การ deploy Open-Source LLM บน GPU Cloud ให้พร้อมใช้งานจริงไม่ได้มีแค่การรันโมเดลให้ตอบได้ แต่ต้องคิดครบตั้งแต่ การเลือกโมเดลที่เหมาะสม, การ serve ผ่าน API, การ scale ตามโหลด และการ monitor ต้นทุน หากเริ่มจากสถาปัตยกรรมที่เรียบง่ายแต่มีตัววัดชัดเจน ทีมจะค่อยๆ ปรับไปสู่ระบบที่เสถียรและคุ้มค่ามากขึ้นได้ ต่อจากนี้คุณสามารถต่อยอดไปสู่การทำ multi-model routing, fine-tuning เฉพาะงาน หรือเพิ่ม guardrails สำหรับ production ได้ทันที

    กลับไปยังบล็อก OVERFLOW