Hướng dẫn chi tiết deploy model ChatGPT opensource từ Hugging Face lên Amazon EKS

Bạn đang ngồi trước màn hình, nhìn vào cái cluster EKS trống rỗng mà cảm thấy như đang đối mặt với một tờ giấy trắng khổng lồ? Đừng lo, hôm nay chúng ta sẽ cùng nhau “thuần hóa” con ChatGPT opensource từ Hugging Face và đưa nó lên Amazon EKS một cách ngon ơ. Tin mình đi, sau bài này bạn sẽ có thể khoe với đồng nghiệp rằng: “Ê, tao vừa deploy con AI lên K8s, nó trả lời hay hơn cả sếp đấy!”

Tại sao lại chọn EKS thay vì chạy trên laptop cá nhân?

Câu hỏi này cũng giống như việc “Tại sao phải mua xe ô tô khi xe đạp cũng đi được?”. Chạy model AI trên laptop thì được, nhưng khi có 100 người cùng chat với model của bạn, laptop sẽ kêu to như máy bay cất cánh. EKS cho phép bạn scale lên xuống thoải mái, tự động restart khi model “ngỗ nghịch”, và quan trọng nhất là bạn có thể ngủ ngon mà không lo laptop nóng như lò lửa.

Chuẩn bị “đạo cụ” trước khi bắt đầu

Trước khi nhảy vào deploy, chúng ta cần chuẩn bị một số thứ:

  • AWS CLI đã được cấu hình (không phải là “aws s3 ls” rồi “Access Denied” nhé)
  • kubectleksctl đã được cài đặt
  • Docker đang chạy trên máy của bạn
  • Một tài khoản Hugging Face (miễn phí và không spam email như mấy site khác)
  • Tinh thần thép để đối phóng với error messages của Kubernetes

Bước 1: Thiết lập EKS Cluster với GPU

Đầu tiên, chúng ta cần tạo một EKS cluster với GPU nodes. Vì sao cần GPU? Bởi vì chạy LLM mà không có GPU thì cũng như đi xe máy trên cao tốc – chậm và nguy hiểm!

eksctl create cluster \
  --name chatgpt-cluster \
  --version 1.28 \
  --region us-west-2 \
  --nodegroup-name gpu-nodes \
  --node-type g4dn.xlarge \
  --nodes 2 \
  --nodes-min 1 \
  --nodes-max 4 \
  --managed

Lưu ý là instance type g4dn.xlarge có GPU NVIDIA T4, đủ mạnh cho các model vừa và nhỏ. Nếu bạn dự định chạy model 13B parameters trở lên thì hãy nghĩ đến g4dn.2xlarge hoặc p3.2xlarge.

Bước 2: Cài đặt NVIDIA GPU Device Plugin

Kubernetes cần biết rằng nodes của bạn có GPU để phân phối workload hợp lý:

kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml

Sau khi chạy lệnh này, bạn có thể kiểm tra bằng:

kubectl get nodes -o json | jq '.items[].status.capacity."nvidia.com/gpu"'

Nếu thấy số “1” (hoặc số GPU của node) thì chúc mừng, bước này đã thành công!

Bước 3: Chuẩn bị Docker Image với Hugging Face TGI

Hugging Face Text Generation Inference (TGI) là toolkit tuyệt vời để serve LLM models một cách hiệu quả. Theo như tài liệu chính thức từ Hugging Face, TGI cung cấp nhiều tính năng tối ưu như Tensor Parallelism, continuous batching và token streaming.

Tạo một Dockerfile đơn giản:

FROM ghcr.io/huggingface/text-generation-inference:1.4

# Thiết lập model ID (có thể override bằng environment variable)
ENV MODEL_ID="microsoft/DialoGPT-medium"
ENV MAX_CONCURRENT_REQUESTS=128
ENV MAX_BEST_OF=20
ENV MAX_STOP_SEQUENCES=20

EXPOSE 80

Build và push image lên ECR:

# Tạo ECR repository
aws ecr create-repository --repository-name chatgpt-tgi

# Get login token
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin <your-account-id>.dkr.ecr.us-west-2.amazonaws.com

# Build và push
docker build -t chatgpt-tgi .
docker tag chatgpt-tgi:latest <your-account-id>.dkr.ecr.us-west-2.amazonaws.com/chatgpt-tgi:latest
docker push <your-account-id>.dkr.ecr.us-west-2.amazonaws.com/chatgpt-tgi:latest

Bước 4: Tạo Kubernetes Manifests

Đây là phần “ma thuật” thực sự. Tạo file deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chatgpt-deployment
  labels:
    app: chatgpt
spec:
  replicas: 2
  selector:
    matchLabels:
      app: chatgpt
  template:
    metadata:
      labels:
        app: chatgpt
    spec:
      containers:
      - name: tgi
        image: <your-account-id>.dkr.ecr.us-west-2.amazonaws.com/chatgpt-tgi:latest
        ports:
        - containerPort: 80
        env:
        - name: MODEL_ID
          value: "microsoft/DialoGPT-medium"
        - name: NUM_SHARD
          value: "1"
        - name: PORT
          value: "80"
        - name: QUANTIZE
          value: "bitsandbytes-nf4"
        resources:
          requests:
            nvidia.com/gpu: 1
            memory: "8Gi"
            cpu: "4"
          limits:
            nvidia.com/gpu: 1
            memory: "16Gi"
            cpu: "8"
        readinessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 120
          periodSeconds: 15

Và file service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: chatgpt-service
spec:
  selector:
    app: chatgpt
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

Bước 5: Deploy và Kiểm tra

Giờ là lúc “thả” model lên cluster:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

Kiểm tra trạng thái deployment:

kubectl get pods -l app=chatgpt
kubectl logs -f deployment/chatgpt-deployment

Nếu thấy log hiển thị “Connected” và “Ready to serve”, chúc mừng bạn đã thành công! Nếu thấy toàn error thì… welcome to the club, hầu hết chúng ta đều đã từng ở đó 😅

Bước 6: Test API Endpoint

Lấy external IP của service:

kubectl get service chatgpt-service

Test bằng curl:

curl -X POST http://<external-ip>/generate \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": "Hello, how are you today?",
    "parameters": {
      "max_new_tokens": 50,
      "temperature": 0.7
    }
  }'

Tối ưu hóa và Scaling

Để model hoạt động hiệu quả trong production, bạn nên cài đặt Horizontal Pod Autoscaler:

kubectl autoscale deployment chatgpt-deployment --cpu-percent=70 --min=2 --max=10

Đồng thời, monitor resource usage bằng:

kubectl top pods
kubectl top nodes

Xử lý lỗi thường gặp

Pod stuck ở Pending: Thường do thiếu GPU resources hoặc node chưa có GPU plugin.

Out of Memory errors: Tăng memory limits hoặc chọn model nhỏ hơn.

Model loading chậm: Sử dụng init containers để pre-download model vào volume.

Connection timeout: Tăng readinessProbe initialDelaySeconds, vì model cần thời gian để load.

Kết luận

Deploy ChatGPT opensource lên EKS không phải là “rocket science” nhưng cũng không phải “piece of cake”. Với hướng dẫn này, bạn đã có thể tự hào nói rằng mình đã “thuần hóa” được AI trên cloud. Nhớ rằng, chi phí GPU instance khá cao, nên hãy thiết lập auto-scaling và monitoring cẩn thận để tránh “cháy” bill cuối tháng.

Quan trọng nhất là đừng quên backup configuration và data. Vì như câu nói kinh điển: “There are two types of engineers: those who backup, and those who will backup after losing everything once!” 🚀

SEO Keywords: deploy ChatGPT opensource, Hugging Face EKS, Amazon EKS GPU, Text Generation Inference, Kubernetes AI deployment, LLM production deployment, Hugging Face TGI Docker, AWS EKS tutorial, ChatGPT alternative deployment, AI model scaling Kubernetes

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

87 + = 97
Powered by MathCaptcha