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
- Đăng ký tại runpod.io
- Nạp credits (pay-as-you-go)
- 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ó":
- API xử lý được không? (Claude, OpenAI) -> Dùng API, ở lại Railway
- Task một lần? -> Google Colab
- Task liên tục cần GPU? -> Runpod
- 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 |