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é)
- kubectl và eksctl đã đượ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

