🤖
VPS

Ollama เป็นเครื่องมือที่ทำให้ผู้ดูแลระบบและนักพัฒนา สามารถดึงและรัน Large Language Models (LLM) แบบ open-source บนเซิร์ฟเวอร์ของตนเอง โดยไม่จำเป็นต้องพึ่งพา API services ที่ต้องเสียค่าใช้งานต่อ token เช่น OpenAI หรือ Claude API

สรุปสั้น: Ollama ช่วยให้คุณรันโมเดลภาษาขนาดใหญ่ (LLM) เช่น Llama 3 บน VPS ของตัวเอง โดยที่ไม่เสียค่า API ต่อ token อย่างไรก็ตาม LLM ต้องการ CPU/RAM จำนวนมาก และ VPS ส่วนใหญ่ไม่มี GPU ดังนั้นจึงเหมาะสำหรับโมเดลที่มีขนาดเล็ก เช่น 7B-8B parameters ในรูปแบบ Q4 quantization เท่านั้น

Ollama คืออะไร และทำไมต้องใช้

Ollama เป็นเครื่องมือที่พัฒนาโดยชุมชน open-source ที่ช่วยให้การติดตั้งและรัน LLM บนเครื่องคอมพิวเตอร์ของคุณเองง่ายขึ้นอย่างมาก ทั้งเครื่องส่วนตัว (local machine) และเซิร์ฟเวอร์ (VPS/dedicated server) Ollama จัดการเรื่องการดาวน์โหลดโมเดล การจัดการระหว่างหน่วยความจำ และการโหลด/การทำงานของโมเดลโดยอัตโนมัติ ผ่าน command line ที่ใช้งานง่าย

ทั่วไปแล้ว นักพัฒนาและ DevOps engineer ต้องการ self-host LLM เพื่อเหตุผลหลักสามประการ:

ข้อจำกัดด้าน Hardware และความเป็นจริง

สิ่งสำคัญที่ต้องเข้าใจคือ Large Language Models เป็นโปรแกรมที่ต้องการ resource มหาศาล โดยเฉพาะอย่างยิ่งหน่วยความจำและความเร็วของ CPU หรือ GPU

ข้อควรระวัง: VPS ทั่วไปส่วนใหญ่ (รวมทั้ง VPS ราคาประหยัด) ไม่มี GPU (graphics processor) ดังนั้น LLM จะต้องรันบน CPU เพียงอย่างเดียว ซึ่งจะช้ามากสำหรับโมเดลขนาดใหญ่ หากคุณมี budget สูง VPS ที่มี GPU (เช่น NVIDIA RTX ขึ้นไป) จะเร็วขึ้นหลายเท่า แต่ราคาก็แพงขึ้นอย่างมาก

โมเดลขนาดต่าง ๆ มีความต้องการหน่วยความจำแตกต่างกัน:

ขนาดโมเดล ขนาด Q4 Quantization RAM ต่ำสุด ความเร็วโดยประมาณ (CPU) ความเหมาะสม
7B parameters ~4-5 GB 8 GB ช้า (5-10 tokens/sec) ใช้ได้ยอมรับได้
13B parameters ~8-9 GB 16 GB ช้ามาก (1-2 tokens/sec) ไม่แนะนำบน CPU เพียง
70B parameters ~40+ GB 64+ GB ต้องใช้ GPU มิฉะนั้นจึงใช้ไม่ได้ ไม่เหมาะสำหรับ VPS ส่วนใหญ่

สำหรับเซิร์ฟเวอร์ CPU เพียงอย่างเดียว เราแนะนำให้ใช้โมเดล 7B parameters (เช่น Llama 3.1 7B, Mistral 7B, Phi-3) ที่มี quantization level Q4 (8-bit lowered) ซึ่งจะใช้พื้นที่ประมาณ 4-5 GB และ RAM รวม 8-16 GB ก็เพียงพอ

เคล็ดลับ: ถ้าคุณต้องการให้ LLM ตอบเร็วขึ้น ให้พิจารณาใช้โมเดลที่เล็กกว่า เช่น Phi-3 (3.8B) หรือ Mistral (7B) แทนที่จะลองรัน Llama 3 70B ซึ่งจะช้านัก

ข้อกำหนด (Prerequisites)

ติดตั้ง Ollama บน Ubuntu

Ollama ให้บริการ install script แบบ official ที่ใช้งานง่าย ทำตามขั้นตอนต่อไปนี้:

  1. เข้าสู่เซิร์ฟเวอร์ของคุณ:
ssh root@your-vps-ip
  1. ดาวน์โหลดและรัน install script:
curl -fsSL https://ollama.ai/install.sh | sh

Script นี้จะติดตั้ง Ollama binary, dependencies ที่จำเป็น และ systemd service โดยอัตโนมัติ

  1. ตรวจสอบว่า Ollama กำลังทำงาน:
systemctl status ollama

ถ้าคุณเห็น "active (running)" แสดงว่าติดตั้งเสร็จแล้ว Ollama จะ bind บน localhost:11434 โดยค่าเริ่มต้น

  1. ทดสอบว่า Ollama เตรียมพร้อมแล้ว:
ollama list

คำสั่งนี้จะแสดงรายการโมเดลที่ติดตั้งไว้ (จะว่างถ้าเพิ่งติดตั้ง)

ดึงและรัน LLM Model

ตอนนี้ลองดึง Llama 3 7B (โมเดลที่เสถียรและใช้งานได้ดี):

  1. ดึงโมเดล:
ollama pull llama3

คำสั่งนี้จะดาวน์โหลดโมเดล Llama 3 (เวอร์ชัน 8B) ประมาณ 4.7 GB จากเซิร์ฟเวอร์ของ Ollama ห้ามสั่งยับ download ให้เสร็จก่อน

  1. รันโมเดลและสนทนา:
ollama run llama3

เมื่อเห็น prompt > ลองพิมพ์คำถาม เช่น:

> What is machine learning?

โมเดล Llama 3 จะเริ่มสร้างคำตอบ ซึ่งอาจช้าสักครู่ (ขึ้นอยู่กับ CPU) ยอมรับได้

  1. ออกจาก interactive mode:
> /bye

หรือกด Ctrl+D

ถ้าต้องการดึงโมเดลอื่น ๆ ลองชื่อเหล่านี้:

ใช้ REST API

Ollama เปิด REST API ที่ localhost:11434 เพื่อให้คุณสามารถส่งขอ (request) ไปยัง LLM โดยทางโปรแกรมได้ (แทนที่จะใช้ interactive mode)

ต่อไปนี้คือตัวอย่าง curl request ง่าย ๆ:

  1. สร้างการสนทนาง่าย ๆ:
curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3",
    "prompt": "Explain quantum computing in simple terms",
    "stream": false
  }'

ฟ้ลด "stream": false บอกว่าให้รอจนกว่า LLM จะตอบเสร็จแล้วจึงส่งคำตอบกลับทั้งหมด

  1. ใช้ streaming mode (การตอบแบบกระแสน้ำ):
curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama3",
    "prompt": "What is the capital of Thailand?",
    "stream": true
  }'

โดย "stream": true API จะส่งคำตอบกลับทีละส่วน (word by word) ในระหว่างที่ LLM คิดอยู่ ซึ่งดูราวกับว่าเหมือน ChatGPT ที่พิมพ์คำตอบออกมาเรื่อย ๆ

คำตอบจะอยู่ในรูปแบบ JSON:

{
  "model": "llama3",
  "created_at": "2024-01-15T10:30:00Z",
  "response": "The capital of Thailand is Bangkok...",
  "done": true
}

สร้าง Chat Script ง่าย ๆ

ลองสร้าง Python script ที่ใช้ Ollama API:

#!/usr/bin/env python3

import requests
import json

def chat_with_ollama(prompt, model="llama3"):
    url = "http://localhost:11434/api/generate"
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False
    }
    response = requests.post(url, json=payload)
    data = response.json()
    return data.get("response", "No response")

if __name__ == "__main__":
    user_input = input("You: ")
    response = chat_with_ollama(user_input)
    print(f"Ollama: {response}")

การใช้งาน:

python3 chat.py
You: How do I configure a firewall on Linux?
Ollama: To configure a firewall on Linux...

ความปลอดภัย (Security Considerations)

⚠️ จุดควรระวัง: โดยค่าเริ่มต้น Ollama จะ bind เพียงบน localhost:11434 ซึ่งหมายความว่า API สามารถเข้าถึงได้เฉพาะจากเซิร์ฟเวอร์นั้นเองเท่านั้น นี่คือสิ่งที่ดี แต่หากคุณต้องการให้ application อื่น ๆ (บน server เดียวกัน) เข้าถึง API ก็ปลอดภัย

อย่างไรก็ตาม ห้ามเปิด port 11434 ให้สาธารณะบน internet โดยไม่มีการรักษาความปลอดภัย เนื่องจาก:

หากต้องการให้ application จากเซิร์ฟเวอร์อื่นเข้าถึง Ollama API ให้ใช้ reverse proxy เช่น Nginx พร้อมการตรวจสอบสิทธิ์:

server {
    listen 443 ssl http2;
    server_name ollama.example.com;
    
    ssl_certificate /etc/ssl/certs/your-cert.crt;
    ssl_certificate_key /etc/ssl/private/your-key.key;
    
    auth_basic "Ollama API";
    auth_basic_user_file /etc/nginx/.ollama_auth;
    
    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_buffering off;
    }
}

วิธีนี้: 1) ปิด port 11434 จากอินเทอร์เน็ต 2) เปิด port 443 (HTTPS) ของ Nginx ที่มี SSL certificate 3) เพิ่ม HTTP Basic Auth เพื่อให้เฉพาะผู้ที่มี username/password เท่านั้นเข้าถึงได้

ตั้งค่า Ollama เป็น Systemd Service

ติดตั้ง script ของ Ollama ได้สร้าง systemd service โดยอัตโนมัติแล้ว แต่คุณสามารถตรวจสอบและตั้งค่าเพิ่มเติมได้:

  1. ดูไฟล์ systemd unit:
cat /etc/systemd/system/ollama.service

จะขึ้นประมาณนี้:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=default.target
  1. เปิดใช้ Ollama ให้ start อัตโนมัติเมื่อ server เริ่มต้น:
systemctl enable ollama
  1. เริ่มต้นใหม่ (restart) Ollama service:
systemctl restart ollama
  1. ดูสถานะและ log:
journalctl -u ollama -f

-f ที่ท้ายคำสั่ง ช่วยให้คุณเห็น log แบบ real-time

สรุป

Ollama ช่วยให้การรัน open-source LLM บนเซิร์ฟเวอร์ของตนเอง ง่ายขึ้นอย่างมาก โดยไม่ต้องซื้อ GPU ราคาแพง (แม้ว่าการมี GPU จะเร็วขึ้นหลายเท่า) หรือรอ API calls ของ third-party

ความสำคัญหลักที่ต้องจำ:

คำถามที่พบบ่อย (FAQ)

ฉันควรเลือก Ollama หรือ LM Studio หรือเครื่องมืออื่น ๆ?

Ollama มาพร้อมเซิร์ฟเวอร์ REST API ในตัว ง่ายต่อการอัตโนมัติ และมี model library มากมาย LM Studio เหมาะเพื่อใช้งานบน GUI บนเดสก์ท็อป หากต้องการเซิร์ฟเวอร์ VPS Ollama ดีกว่า

โมเดลไหนเร็วที่สุดบน CPU?

Phi-3 (3.8B parameters) เร็วที่สุด รองลงมาคือ Mistral 7B Llama 3 7B ช้าเล็กน้อยแต่ยังใช้ได้ สำหรับ 70B models คุณจำเป็นต้องมี GPU

ฉันสามารถรันหลายโมเดลพร้อมกันได้ไหม?

ได้ แต่ Ollama จะโหลดโมเดลลงแรมทีละตัว หากรันหลายโมเดลพร้อมกัน RAM จะเต็มอย่างรวดเร็ว มันดีกว่าที่จะใช้ API controller เพื่อแบ่งโมเดล

ฉันต้องใช้ VPS ราคาเท่าไหร่ที่เหมาะสม?

ขั้นต่ำ VPS ที่มี 16 GB RAM และ 4-8 vCPU ราคาประมาณ 10-30 USD/เดือน แม้ว่า 8 GB อาจใช้งานได้ แต่ 16 GB เป็นการเลือกที่สมดุลระหว่างราคาและประสิทธิภาพ

เริ่มต้นใช้งาน VPS AsiaGB วันนี้

VPS AsiaGB ใช้ SSD Storage ทุก Plan เลือก Datacenter ไทยหรือสิงคโปร์ได้ พร้อม Root Access เต็มรูปแบบ เริ่มต้น 500 บาท/เดือน (Linux) พร้อมทีมซัพพอร์ตภาษาไทย

ดูแพ็กเกจ VPS