Hướng Dẫn Chạy Gemma 2B Trên Kubernetes (k3d) Với Ollama
Giới Thiệu
Gần đây, tôi rất ấn tượng với cách mọi người có thể chạy các mô hình ngôn ngữ lớn (LLMs) hoàn toàn ngoại tuyến, mà không cần phụ thuộc vào các cụm GPU đắt đỏ hay API đám mây. Tuy nhiên, khi tôi cố gắng triển khai mô hình Gemma 2B trên máy tính của mình, quá trình này trở nên rối rắm và phức tạp:
- Cần tải xuống trọng số mô hình lớn
- Khởi động lại container có nghĩa là phải tải lại mọi thứ
- Không có sự điều phối hay tính bền vững — nếu container bị chết, thiết lập của tôi sẽ biến mất
Vì vậy, tôi tự hỏi:
“Liệu tôi có thể chạy Gemma 2B một cách hiệu quả, hoàn toàn trong container, được điều phối bởi Kubernetes, với một thiết lập địa phương sạch sẽ không?”
Câu trả lời là: Có. Sử dụng k3d + Ollama + Kubernetes + Gemma 2B.
🎯 Bạn Sẽ Học Được Gì
- Cách triển khai Gemma 2B bằng Ollama trong cụm Kubernetes k3d
- Cách truy cập dịch vụ qua mạng nội bộ
- Cách lưu trữ trọng số mô hình để tránh tải lại
- Các bước khắc phục sự cố cơ bản cho pods và containers
🛠️ Công Nghệ Sử Dụng
- k3d: Cụm Kubernetes nhẹ trong Docker
- Ollama: Container để chạy LLMs tại địa phương
- Gemma 2B: LLM nhẹ (~1.7GB) từ Google, chạy tại địa phương
- WSL2: Môi trường Linux trên Windows
📚 Khái Niệm Cần Biết Trước Khi Bắt Đầu
1. Ollama Là Gì?
Ollama là một công cụ đơn giản để chạy LLMs tại địa phương:
- Kéo các mô hình như Gemma, Llama, Phi
- Cung cấp API REST cho suy diễn
- Hoạt động hoàn toàn ngoại tuyến sau khi tải trọng số
Ví dụ:
bash
ollama run gemma:2b
Câu lệnh này sẽ cho bạn một chatbot địa phương mà không phụ thuộc vào đám mây.
2. Tại Sao Chọn Kubernetes (k3d)?
Thay vì chạy Ollama trên nền tảng vật lý, chúng ta sử dụng k3d:
- Cụm K8s Địa Phương → k3d chạy Kubernetes bên trong Docker, rất nhẹ
- Pods & PVCs → Pods chạy các container, PVCs lưu trữ trọng số mô hình
- Dịch vụ → Dễ dàng mở rộng API Ollama trên localhost
3. Lưu Trữ Với PVC
Nếu không có PVC, nếu pod của bạn bị chết, bạn sẽ mất trọng số mô hình. PVC đảm bảo rằng các mô hình sẽ sống sót qua các lần khởi động lại và triển khai lại.
🧑💻 Hướng Dẫn Cài Đặt Bước Từng Bước
Bước 1: Cài Đặt k3d
bash
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
k3d cluster create gemma-cluster --agents 1 --servers 1
Bước 2: Triển Khai Ollama + Gemma 2B
Tạo file ollama-deployment.yaml với nội dung:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
spec:
replicas: 1
selector:
matchLabels:
app: ollama
template:
metadata:
labels:
app: ollama
spec:
containers:
- name: ollama
image: ollama/ollama:latest
ports:
- containerPort: 11434
volumeMounts:
- name: model-storage
mountPath: /root/.ollama
volumes:
- name: model-storage
persistentVolumeClaim:
claimName: ollama-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ollama-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: ollama-service
spec:
selector:
app: ollama
ports:
- protocol: TCP
port: 11434
targetPort: 11434
type: LoadBalancer
Áp dụng nó:
bash
kubectl apply -f ollama-deployment.yaml
Bước 3: Tải Mô Hình Gemma 2B
bash
kubectl exec -it deploy/ollama -- ollama pull gemma:2b
Bước 4: Kiểm Tra API
bash
curl http://localhost:11434/api/generate -d '{
"model": "gemma:2b",
"prompt": "Viết một bài thơ ngắn về Kubernetes"
}'
🐞 Các Vấn Đề Tôi Gặp Phải & Cách Khắc Phục
- Pod trong CrashLoopBackOff: Tăng CPU/RAM trong spec triển khai
- Mô hình tải lại khi khởi động lại: Sử dụng PVC để lưu trữ trọng số
- Cổng không thể truy cập: Sử dụng LoadBalancer + ánh xạ cổng k3d
📂 Cấu Trúc Dự Án Cuối Cùng
gemma-k3d/
├── ollama-deployment.yaml
├── k3d-cluster-setup.sh
└── README.md
🚀 Bước Tiếp Theo
Trong bài viết tiếp theo, chúng ta sẽ thêm Prometheus + Grafana để theo dõi:
- Sử dụng CPU
- Sử dụng bộ nhớ
- Độ trễ mỗi lần suy diễn
💬 Kết Nối Với Tôi
Nếu bạn thử thiết lập này hoặc cải thiện nó, tôi rất muốn nghe ý kiến của bạn!
Hãy để lại một ⭐ trên repo nếu nó giúp ích cho bạn — điều đó giúp tôi có động lực để viết thêm nhiều thử nghiệm như thế này!