AI-Powered Remote Inference

ใช้งาน Ollama ข้ามเครื่อง

Remote AI Inference - Client-Server Architecture สำหรับการใช้งาน AI จากระยะไกล

เนื้อหาในบทความนี้

สถานะบทความ

อัปเดตล่าสุด: กุมภาพันธ์ 2026 | ระดับความยาก: ระดับกลาง (Intermediate) | เวลาอ่าน: 45 นาที

ความต้องการพื้นฐาน: ความรู้พื้นฐานเกี่ยวกับ Linux, Network, และ Docker (แนะนำ)

ข้อควรระวังด้านความปลอดภัย

การเปิด Ollama ให้รับ connections จาก Remote อาจทำให้ Server ถูกเข้าถึงโดยไม่ได้รับอนุญาต หากไม่มีการป้องกันที่เหมาะสม เช่น Firewall, VPN, หรือ Authentication

แนะนำให้ใช้ VPN หรือ SSH Tunnel สำหรับการใช้งานจริงใน Production

โครงสร้างระบบ (Architecture)

Client-Server Architecture

🖥️ Ollama Server Ollama LLM Models GPU (NVIDIA RTX) CUDA Acceleration Port 11434 HTTP/REST API Port 11434 💻 Client Machines CLI Client OLLAMA_HOST=... ollama run qwen:7b Python Client ollama.Client(host=...) import ollama Node.js Client new Ollama({host:...}) ollama-js OpenAI API base_url=...:11434/v1 Compatible
คำอธิบายโครงสร้าง:
  • Server: เครื่องที่มี GPU และรัน Ollama ฟังที่ port 11434
  • Clients: เครื่องไคลเอ็นต์ที่ส่ง request ไปประมวลผลที่ Server
  • Protocol: HTTP/REST API ผ่าน port 11434

1. ดาวน์โหลด Models

Server ดาวน์โหลดโมเดล LLM เช่น Qwen, Gemma, Llama จาก Ollama Library และเก็บไว้ในระบบ

2. Server ประมวลผล

Server รับ request จาก Client และใช้ GPU ในการ inference โมเดล AI และส่งผลลัพธ์กลับ

3. Client ใช้งาน

Client เชื่อมต่อผ่าน HTTP API ใช้ CLI, Python, Node.js หรือ OpenAI SDK เรียกใช้ได้จากที่ไหนก็ได้

สิ่งที่ต้องเตรียม (Prerequisites)

Hardware (Server)

  • CPU: Intel i5 / AMD Ryzen 5 ขึ้นไป
  • RAM: 16GB ขึ้นไป (32GB แนะนำ)
  • GPU: NVIDIA RTX 3060+ (8GB VRAM)
  • Storage: 50GB+ SSD

Software (Server)

  • Ollama: เวอร์ชัน 0.1.0 ขึ้นไป
  • OS: Ubuntu 22.04+, Debian 12+
  • Docker: ทางเลือก สำหรับ container
  • NVIDIA Driver: 525+ สำหรับ GPU

Network

  • Port: เปิด TCP 11434
  • LAN: อยู่ในวงเครือข่ายเดียวกัน
  • IP: Static IP หรือ DHCP reservation
  • VPN: แนะนำสำหรับ remote

การตั้งค่า Server (5 วิธี)

ทางเลือก: เลือกวิธีใดวิธีหนึ่งที่เหมาะกับคุณ ไม่จำเป็นต้องทำทุกวิธี

วิธีที่ 1

ตั้งค่า OLLAMA_HOST (แนะนำ)

วิธีที่ง่ายที่สุด - ตั้งค่า environment variable ก่อนรัน Ollama

bash - Linux/macOS
# 1. ตรวจสอบว่า Ollama ถูกติดตั้งแล้ว
ollama --version

# 2. ตั้งค่า OLLAMA_HOST ให้รับ connections จากทุก interface
export OLLAMA_HOST=0.0.0.0:11434

# 3. เริ่ม Ollama Server
ollama serve

วิธีถาวร (Persistent)

เพิ่มใน system service เพื่อให้ค่าอยู่ถาวร:

# แก้ไข systemd service
sudo nano /etc/systemd/system/ollama.service

# เพิ่มบรรทัดใน [Service]:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
ExecStart=/usr/local/bin/ollama serve

# Reload และ restart
sudo systemctl daemon-reload
sudo systemctl restart ollama

# ตรวจสอบสถานะ
sudo systemctl status ollama

ตรวจสอบว่าทำงานถูกต้อง

# ดูว่า Ollama กำลังรันที่ port ไหน
ss -tuln | grep 11434

# ควรเห็น output ประมาณนี้:
# tcp  LISTEN 0  4096  0.0.0.0:11434  0.0.0.0:*
วิธีที่ 2

ใช้งานผ่าน Docker

วิธีที่ดีที่สุดสำหรับ isolation และ portability

bash - Docker Run
# รัน Ollama Docker Container
docker run -d \
  --name ollama \
  -p 11434:11434 \
  -v ollama:/root/.ollama \
  -e OLLAMA_HOST=0.0.0.0 \
  --restart always \
  ollama/ollama:latest

# สำหรับ NVIDIA GPU (แนะนำ)
docker run -d \
  --name ollama \
  --gpus all \
  -p 11434:11434 \
  -v ollama:/root/.ollama \
  -e OLLAMA_HOST=0.0.0.0 \
  --restart always \
  ollama/ollama:latest

Docker Compose (แนะนำ)

# docker-compose.yml
version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    environment:
      - OLLAMA_HOST=0.0.0.0
    volumes:
      - ollama:/root/.ollama
    restart: always
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama:
วิธีที่ 3

SSH Tunnel (ปลอดภัยที่สุด)

วิธีที่ปลอดภัยที่สุด - ไม่ต้องเปิด port สู่ภายนอก

bash - SSH Tunnel
# สร้าง SSH Tunnel จาก Client ไปยัง Server
# Syntax: ssh -L [local_port]:[remote_host]:[remote_port] user@server_ip

# ตัวอย่าง: Forward local port 11434 ไปยัง server
ssh -L 11434:localhost:11434 user@192.168.1.100

# รันใน background (-f -N)
ssh -f -N -L 11434:localhost:11434 user@192.168.1.100

# ตอนนี้สามารถเข้าถึง Ollama ได้ที่ localhost:11434 บนเครื่อง Client
ollama list  # จะเชื่อมต่อผ่าน tunnel
วิธีที่ 4

เปิด Firewall

เปิด port 11434 ใน firewall สำหรับการเข้าถึงจาก network

bash - UFW (Ubuntu)
# เปิด port 11434 สำหรับทุก IP
sudo ufw allow 11434/tcp

# เปิดเฉพาะ IP เฉพาะเจาะจง (แนะนำ)
sudo ufw allow from 192.168.1.0/24 to any port 11434

# ตรวจสอบสถานะ
sudo ufw status

# สำหรับ firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=11434/tcp
sudo firewall-cmd --reload
วิธีที่ 5

Reverse Proxy (Nginx)

ใช้ Nginx reverse proxy พร้อม SSL สำหรับการเข้าถึงแบบปลอดภัย

nginx - /etc/nginx/sites-available/ollama
server {
    listen 80;
    server_name ollama.yourdomain.com;

    location / {
        proxy_pass http://localhost:11434;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# สำหรับ HTTPS (แนะนำ)
# sudo certbot --nginx -d ollama.yourdomain.com

การใช้งานจาก Client (4 วิธี)

หมายเหตุ: ตัวอย่างด้านล่างสมมติว่า Server IP คือ 192.168.1.100

วิธีที่ 1

Ollama CLI

ใช้งานผ่าน command line โดยตรง

bash - Client Side
# วิธีที่ 1: ตั้งค่า environment variable แบบชั่วคราว
export OLLAMA_HOST=http://192.168.1.100:11434
ollama list
ollama run qwen:7b

# วิธีที่ 2: ตั้งค่าแบบครั้งเดียว
OLLAMA_HOST=http://192.168.1.100:11434 ollama run qwen:7b

# วิธีที่ 3: ตั้งค่าถาวรใน ~/.bashrc
echo 'export OLLAMA_HOST=http://192.168.1.100:11434' >> ~/.bashrc
source ~/.bashrc

# ทดสอบ
ollama list
วิธีที่ 2

Python Client

ใช้ Python SDK สำหรับการพัฒนาแอปพลิเคชัน

bash - ติดตั้ง Library
# ติดตั้ง ollama Python library
pip install ollama
python - client.py
import ollama

# สร้าง client ที่เชื่อมต่อกับ remote server
client = ollama.Client(host='http://192.168.1.100:11434')

# ดูรายการโมเดลที่มี
models = client.list()
print('Available models:')
for model in models['models']:
    print(f"  - {model['name']}")

# รันโมเดล
response = client.generate(
    model='qwen:7b',
    prompt='สวัสดีครับ ช่วยอธิบายเกี่ยวกับ AI หน่อย'
)
print(response['response'])

# ใช้ chat API
messages = [
    {'role': 'user', 'content': 'อธิบาย Docker แบบสั้นๆ'}
]
response = client.chat(model='qwen:7b', messages=messages)
print(response['message']['content'])
วิธีที่ 3

Node.js Client

ใช้ ollama-js สำหรับโปรเจค JavaScript/TypeScript

bash - ติดตั้ง Package
# ติดตั้ง ollama-js
npm install ollama
# หรือ
yarn add ollama
javascript - client.js
import ollama from 'ollama'

// ตั้งค่า remote host
const client = new ollama.Ollama({
  host: 'http://192.168.1.100:11434'
})

// ดูรายการโมเดล
const models = await client.list()
console.log('Available models:', models.models)

// Generate text
const response = await client.generate({
  model: 'qwen:7b',
  prompt: 'สวัสดีครับ ช่วยอธิบายเกี่ยวกับ Kubernetes หน่อย'
})
console.log(response.response)

// Chat API
const chatResponse = await client.chat({
  model: 'qwen:7b',
  messages: [{ role: 'user', content: 'อธิบาย Docker แบบสั้นๆ' }]
})
console.log(chatResponse.message.content)
วิธีที่ 4

OpenAI Compatible API

ใช้ OpenAI SDK ที่มีอยู่แล้ว เปลี่ยนแค่ base_url

python - openai_client.py
from openai import OpenAI

# ใช้ OpenAI SDK เชื่อมต่อกับ Ollama
client = OpenAI(
    base_url='http://192.168.1.100:11434/v1',
    api_key='not-needed'  # Ollama ไม่ต้องใช้ API key
)

# ใช้งานเหมือน OpenAI API ปกติ
response = client.chat.completions.create(
    model='qwen:7b',
    messages=[
        {'role': 'system', 'content': 'คุณเป็นผู้ช่วย AI ที่เป็นประโยชน์'},
        {'role': 'user', 'content': 'สวัสดีครับ ช่วยอธิบายเกี่ยวกับ Machine Learning หน่อย'}
    ]
)

print(response.choices[0].message.content)

# Streaming response
stream = client.chat.completions.create(
    model='qwen:7b',
    messages=[{'role': 'user', 'content': 'เล่าเรื่องสั้นให้หน่อย'}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end='')

API Endpoints

Ollama มี REST API endpoints ที่สามารถเรียกใช้ได้โดยตรง:

Method Endpoint Description Example
GET /api/tags รายการโมเดลที่มี curl http://host:11434/api/tags
POST /api/generate สร้าง text จาก prompt {"model": "qwen:7b", "prompt": "..."}
POST /api/chat Chat completion {"model": "qwen:7b", "messages": [...]}
POST /api/embeddings สร้าง embeddings {"model": "qwen:7b", "prompt": "..."}
POST /api/pull ดาวน์โหลดโมเดล {"name": "qwen:7b"}
GET /v1/* OpenAI compatible /v1/chat/completions

ตัวอย่างการใช้ curl

# ดูรายการโมเดล
curl http://192.168.1.100:11434/api/tags

# Generate text
curl -X POST http://192.168.1.100:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen:7b", "prompt": "สวัสดี"}'

# Chat completion
curl -X POST http://192.168.1.100:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen:7b", "messages": [{"role": "user", "content": "สวัสดี"}]}'

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

คำแนะนำด้านความปลอดภัย

แนะนำ
  • • ใช้ SSH Tunnel หรือ VPN
  • • จำกัด IP ที่เข้าถึงได้
  • • ใช้ Reverse Proxy พร้อม SSL
  • • เปิดเฉพาะ private network
ไม่แนะนำ
  • • เปิด port สู่ internet โดยตรง
  • • ไม่มี firewall หรือ authentication
  • • ใช้ค่า default โดยไม่ปรับแต่ง
  • • เปิดให้ทุก IP เข้าถึงได้

เปรียบเทียบวิธีเชื่อมต่อตามความปลอดภัย

วิธี ความปลอดภัย ความยากง่าย เหมาะสำหรับ
SSH Tunnel สูงมาก กลาง Development, Personal use
VPN สูงมาก ยาก Enterprise, Team
Reverse Proxy + SSL สูง ยาก Public access, Production
Firewall (IP restrict) กลาง ง่าย LAN, Trusted network
Open to all ต่ำ ง่ายมาก ไม่แนะนำ!

ทดสอบการเชื่อมต่อ

bash - ทดสอบการเชื่อมต่อ
# 1. ทดสอบว่า Ollama server รันอยู่
curl http://192.168.1.100:11434/api/tags

# ควรได้ JSON response ประมาณนี้:
# {"models": [{"name": "qwen:7b", ...}]}

# 2. ทดสอบด้วย ollama CLI จาก Client
OLLAMA_HOST=http://192.168.1.100:11434 ollama list

# 3. ทดสอบ generate
curl -X POST http://192.168.1.100:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen:7b", "prompt": "สวัสดี", "stream": false}'

# 4. ทดสอบ chat
curl -X POST http://192.168.1.100:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen:7b", "messages": [{"role": "user", "content": "สวัสดี"}], "stream": false}'

# 5. ทดสอบ OpenAI compatible endpoint
curl http://192.168.1.100:11434/v1/models

การแก้ไขปัญหา (Troubleshooting)

Connection refused

ไม่สามารถเชื่อมต่อกับ Ollama server ได้

สาเหตุที่เป็นไปได้:

  • • Ollama ไม่ได้รันอยู่ - ตรวจสอบด้วย sudo systemctl status ollama
  • • OLLAMA_HOST ไม่ได้ตั้งค่า - ตรวจสอบด้วย echo $OLLAMA_HOST
  • • Firewall บล็อก port - ตรวจสอบด้วย sudo ufw status
  • • IP address ผิด - ตรวจสอบด้วย ip addr show

Model not found

โมเดลที่ต้องการใช้ไม่มีใน server

วิธีแก้:

# ดาวน์โหลดโมเดลใหม่
ollama pull qwen:7b

# หรือผ่าน API
curl -X POST http://localhost:11434/api/pull \
  -H "Content-Type: application/json" \
  -d '{"name": "qwen:7b"}'

Out of memory

GPU หรือ RAM ไม่เพียงพอ

วิธีแก้:

  • • ใช้โมเดลขนาดเล็กลง เช่น qwen:1.8b
  • • ใช้ quantization สูงขึ้น เช่น qwen:7b-q4_0
  • • เพิ่ม swap space สำหรับ CPU inference
  • • ปิด applications อื่นๆ ที่ใช้ GPU/RAM

Slow response

การตอบสนองช้าเกินไป

วิธีแก้:

  • • ตรวจสอบว่า GPU ถูกใช้งาน - nvidia-smi
  • • ลด context length ใน request
  • • ใช้โมเดลขนาดเล็กลง
  • • ตรวจสอบ network latency ระหว่าง client-server

สรุป

สิ่งที่ได้เรียนรู้

Server Configuration

ตั้งค่า Ollama server ให้รับ remote connections ได้ 5 วิธี

Client Usage

เชื่อมต่อจาก Client ได้ 4 วิธี (CLI, Python, Node.js, OpenAI SDK)

Security

ความปลอดภัยและวิธีป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต

API Integration

REST API endpoints และ OpenAI compatible API

ตอนนี้คุณสามารถใช้งาน AI จากเครื่องไหนก็ได้ในเครือข่ายได้แล้ว!

บทความที่เกี่ยวข้อง