Cách Mình Vận Hành AI Infrastructure

Chạy AI models trên Runpod, Google Colab, và các compute platforms khác

Có những workload cần GPU mà Railway không cung cấp. Gọi Claude API hay OpenAI API thì Railway xử lý tốt -- nhưng chạy custom model, fine-tune, hay batch embedding quy mô lớn thì cần platform khác.

Nguyên tắc: Dùng đúng tool cho đúng việc. Railway cho web apps, GPU platforms cho AI workloads nặng.

Khi nào cần rời Railway

Workload Platform Lý do
Web app gọi LLM API Railway API calls không cần local GPU
Embedding generation (nhỏ) Railway + OpenAI API API lo phần compute
Custom model inference Runpod Cần GPU cho model
Model fine-tuning Google Colab / Runpod Heavy compute, dùng tạm rồi tắt
Batch embedding (quy mô lớn) Runpod GPU compute tiết kiệm hơn API

Nói đơn giản: nếu gọi API được thì gọi API. Chỉ khi nào cần chạy model trực tiếp thì mới cần GPU infrastructure.

Tổng quan Platform

Railway (mặc định)

Platform chính cho mọi web application:

  • NextJS frontends
  • FastAPI backends
  • Không hỗ trợ GPU
  • Tốt cho API-based AI (Claude, OpenAI)

Đa số workloads của mình nằm ở đây. Chỉ khi nào Railway không đáp ứng được mới tính chuyện dùng platform khác.

Runpod

GPU theo yêu cầu, trả tiền theo phút:

  • Chạy custom models
  • Docker-based deployments
  • Tốt cho inference và batch processing

Ưu điểm lớn nhất: bật lên khi cần, tắt khi xong. Không phải trả tiền 24/7 cho GPU mà chỉ dùng vài giờ mỗi tuần.

Google Colab

Notebook environment có GPU:

  • Free tier có GPU access (dù không ổn định)
  • Tốt cho experiments và prototyping
  • Không dùng cho production -- uptime không đảm bảo
  • Tốt để chia sẻ notebooks với team

Setup Runpod

Chọn GPU và tạo Pod

  1. Đăng ký tại runpod.io
  2. Nạp credits (pay-as-you-go)
  3. Chọn GPU type theo workload:
GPU VRAM Use Case Chi phí (ước tính)
RTX 3090 24GB Models nhỏ $0.30/hr
RTX 4090 24GB Models trung bình $0.50/hr
A100 40GB Models lớn $1.50/hr

Đừng chọn A100 mặc định cho mọi thứ -- RTX 3090 đủ cho phần lớn workloads mà rẻ hơn 5 lần.

Chạy Model

# SSH vào pod
ssh root@pod-ip

# Pull model
git clone https://github.com/your-org/your-model

# Cài dependencies
pip install -r requirements.txt

# Chạy inference server
python serve.py --port 8000

Expose thành API

Runpod cung cấp public URL cho pod:

https://pod-id-8000.proxy.runpod.net

FastAPI app trên Railway gọi endpoint này cho inference. Kiến trúc hybrid: Railway xử lý web, Runpod xử lý GPU -- mỗi thằng làm việc nó giỏi.

Google Colab

Dùng khi nào

  • Prototyping -- test model ideas nhanh, không cần setup gì
  • One-off tasks -- fine-tune model một lần rồi thôi
  • Học tập -- thử nghiệm kỹ thuật mới
  • Chia sẻ -- collaborate trên notebooks, ai cũng mở được

Không dùng khi nào

Production workloads, nhu cầu performance ổn định, sensitive data, hoặc tasks chạy lâu (có timeout limits). Colab mà disconnect giữa chừng thì mất hết progress -- không chấp nhận được cho production.

Best Practices

# 1. Kiểm tra GPU availability
import torch
print(f"GPU available: {torch.cuda.is_available()}")
print(f"GPU: {torch.cuda.get_device_name(0)}")

# 2. Mount Google Drive để lưu trữ
from google.colab import drive
drive.mount('/content/drive')

# 3. Cài dependencies
!pip install transformers accelerate

# 4. Download model vào Drive (để tái sử dụng)
model_path = "/content/drive/MyDrive/models/my-model"

Quản lý chi phí

GPU không rẻ. Quên tắt pod Runpod qua đêm là mất mấy chục đô. Cần chủ động quản lý.

Runpod

Chiến lược Cách làm
Spot instances Dùng community cloud cho non-critical work
Auto-shutdown Set idle timeout -- tránh trả tiền khi không dùng
Right-size GPU RTX 3090 đủ thì đừng lấy A100
Batch processing Gom requests lại, maximize GPU utilization

API costs (Claude/OpenAI)

Chiến lược Cách làm
Model nhỏ hơn Claude Haiku cho simple tasks, đừng dùng Opus cho mọi thứ
Cache Lưu embeddings lại, đừng generate lại cái đã có
Batch API calls Dùng batch endpoints khi available
Monitor Setup billing alerts trước khi nhận bill bất ngờ

Architecture Patterns

Hybrid Architecture

┌──────────────┐     API calls     ┌───────────────┐
│   Railway    │ ───────────────→  │  Claude API   │
│  (Web App)   │                   │  OpenAI API   │
└──────────────┘                   └───────────────┘
       │
       │ Heavy workloads
       ↓
┌──────────────┐
│   Runpod     │
│  (GPU Pod)   │
└──────────────┘

Tách workloads như thế nào

Giữ trong Railway Chuyển sang Runpod
API routing Model inference
User auth Batch embeddings
Database ops Custom model serving
Frontend serving Image/video processing

Ranh giới rõ ràng: Railway xử lý mọi thứ liên quan web và database. Runpod chỉ nhận workloads cần GPU.

Quyết định dùng GPU hay không

Hỏi theo thứ tự, dừng ở câu đầu tiên trả lời "có":

  1. API xử lý được không? (Claude, OpenAI) -> Dùng API, ở lại Railway
  2. Task một lần? -> Google Colab
  3. Task liên tục cần GPU? -> Runpod
  4. Production-critical? -> Runpod với redundancy

Đa số trường hợp dừng ở bước 1. API providers đã đầu tư infrastructure rồi, tận dụng thôi.

Tham khảo nhanh

Mình cần... Platform
Gọi Claude/OpenAI Railway (API calls)
Chạy custom model Runpod
Prototype với GPU Google Colab
Fine-tune model Runpod hoặc Colab
Batch process embeddings Runpod
Serve web app Railway

Tài nguyên