0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Hướng Dẫn Chạy Gemma 2B Trên Kubernetes (k3d) Với Ollama

Đăng vào 6 tháng trước

• 4 phút đọc

Chủ đề:

KungFuTech

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ì

  1. Cách triển khai Gemma 2B bằng Ollama trong cụm Kubernetes k3d
  2. Cách truy cập dịch vụ qua mạng nội bộ
  3. Cách lưu trữ trọng số mô hình để tránh tải lại
  4. 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 Copy
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 Copy
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 Copy
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 Copy
kubectl apply -f ollama-deployment.yaml

Bước 3: Tải Mô Hình Gemma 2B

bash Copy
kubectl exec -it deploy/ollama -- ollama pull gemma:2b

Bước 4: Kiểm Tra API

bash Copy
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

  1. Pod trong CrashLoopBackOff: Tăng CPU/RAM trong spec triển khai
  2. Mô hình tải lại khi khởi động lại: Sử dụng PVC để lưu trữ trọng số
  3. 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

Copy
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:

  1. Sử dụng CPU
  2. Sử dụng bộ nhớ
  3. Độ 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!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào