Các công ty ngày càng sử dụng cơ sở hạ tầng trí tuệ nhân tạo (AI) để lưu trữ và quản lý khối lượng công việc tự động. Do đó,
Việc triển khai cơ sở hạ tầng AI thường cung cấp đủ sức mạnh tính toán để thực thi và xử lý các tập dữ liệu lớn. Những nhu cầu này có thể chuyển thành nhu cầu về các phương pháp có khả năng mở rộng cho phép các mô hình AI chạy trên khối lượng công việc lớn mà không làm giảm hiệu suất.
Lượng dữ liệu ngày càng tăng là mối quan tâm của các hệ thống AI ở nhiều khía cạnh. Hầu hết các mô hình AI, đặc biệt là các mô hình dựa trên học sâu, phụ thuộc rất nhiều vào lượng dữ liệu lớn trong quá trình đào tạo và suy luận. Tuy nhiên, nếu không có cơ sở hạ tầng có khả năng mở rộng, xử lý và diễn giải các dữ liệu như vậy
Phần cứng AI có thể mở rộng hỗ trợ hiệu suất đáng tin cậy và ổn định mặc dù tải tính toán quá lớn. Với Kubernetes, việc mở rộng theo chiều ngang các tác vụ AI trở nên dễ dàng và việc thay đổi kích thước động của số lượng bản sao có thể được thực hiện theo nhu cầu. Ngược lại, các container Docker hỗ trợ các môi trường tinh gọn, biệt lập để chạy các mô hình AI, nơi xung đột tài nguyên không phải là nút thắt cổ chai về hiệu suất.
Sử dụng hiệu quả tài nguyên là chìa khóa để triển khai AI tiết kiệm chi phí và bền vững. Các yêu cầu và giới hạn tài nguyên của Kubernetes cho phép quản lý tài nguyên CPU và bộ nhớ chi tiết bằng cách tránh cung cấp thiếu và cung cấp quá mức. Quản lý tài nguyên của Docker lấp đầy khoảng trống bằng cách cô lập các tài nguyên container.
Container hóa là một trong những cột mốc trong quá trình phát triển cơ sở hạ tầng trí tuệ nhân tạo có khả năng mở rộng. Container hóa ứng dụng AI và các phụ thuộc của nó trong một container Docker đảm bảo tính nhất quán trong suốt quá trình phát triển, thử nghiệm và triển khai môi trường.
Trước tiên, bạn phải định nghĩa Dockerfile để cài đặt môi trường. Dockerfile là một loạt các hướng dẫn về cách xây dựng một hình ảnh Docker. Nó khai báo một hình ảnh cơ sở, các phụ thuộc cần thiết và các lệnh thiết lập ban đầu áp dụng cho ứng dụng của bạn. Sau đây là Dockerfile cơ bản cho mô hình học máy Python:
# Use an official Python runtime as a parent image FROM python:3.9-slim # Set the working directory in the container WORKDIR /usr/src/app # Copy the current directory contents into the container COPY . . # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Expose the port the app runs on EXPOSE 5000 # Define environment variable ENV NAME World # Run the app CMD ["python", "./app.py"]
Nếu Dockerfile đã sẵn sàng, bạn có thể xây dựng hình ảnh Docker và chạy container. Chạy các lệnh sau:
# Build the Docker image docker build -t ml-model:latest . # Run the container docker run -p 5000:5000 ml-model:latest
apiVersion: apps/v1 kind: Deployment metadata: name: ml-model-deployment spec: replicas: 3 selector: matchLabels: app: ml-model template: metadata: labels: app: ml-model spec: containers: - name: ml-model-container image: ml-model:latest ports: - containerPort: 5000
Đoạn mã trên cho thấy cách triển khai mô hình AI, nhưng bạn cũng cần phải làm cho mô hình có thể truy cập bên ngoài. Bạn sẽ cần phải phơi bày nó bằng cách định nghĩa một Dịch vụ Kubernetes. service.yaml bên dưới minh họa một ví dụ:
apiVersion: v1 kind: Service metadata: name: ml-model-service spec: selector: app: ml-model ports: - protocol: TCP port: 80 targetPort: 5000 type: LoadBalancer
Sử dụng công cụ dòng lệnh kubectl để áp dụng cấu hình triển khai và dịch vụ:
# Deploy the application kubectl apply -f deployment.yaml # Expose the service kubectl apply -f service.yaml
Kubernetes cung cấp khả năng mở rộng tuyệt vời cho môi trường AI, tối đa hóa việc sử dụng tài nguyên và hiệu suất. Mở rộng theo chiều ngang được thực hiện bằng cách thêm các container bổ sung và mở rộng theo chiều dọc liên quan đến việc thêm các tài nguyên bổ sung như CPU hoặc bộ nhớ vào một container.
Việc mở rộng theo chiều ngang được sử dụng để mở rộng số lượng bản sao (Pod) của hệ thống AI để xử lý khối lượng công việc cao hơn. Quy trình này yêu cầu bật tính năng mở rộng động tùy thuộc vào số lượng bản sao. Lệnh được sử dụng để bật quy trình như vậy là `kubectl scale`. Lệnh cụ thể được sử dụng để thiết lập triển khai hoạt động lên đến tối đa năm bản sao:
`kubectl scale --replicas=5 triển khai/ml-model-deployment`
Lệnh mở rộng ml-model-deployment để sử dụng năm bản sao của container mô hình học máy. Hệ thống sẽ cung cấp động nhiều Pod hơn để đáp ứng số lượng yêu cầu sau đó.
Kubernetes hỗ trợ tự động mở rộng quy mô bằng cách sử dụng Horizontal Pod Autoscaler (HPA). HPA điều chỉnh động số lượng bản sao dựa trên việc sử dụng tài nguyên, tức là CPU hoặc bộ nhớ, liên quan đến các giới hạn đã đặt. Cấu hình YAML được hiển thị bên dưới là một ví dụ có liên quan về HPA tự động mở rộng quy mô cho ml-model-deployment để đáp ứng việc sử dụng CPU:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: ml-model-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: ml-model-deployment minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 50
Trong thiết lập này, scaleTargetRef được sử dụng để xác định Triển khai cần được mở rộng, tức là ml-model-deployment. Số lượng bản sao tối thiểu được đặt bằng MinReplicas, trong khi số lượng bản sao tối đa được kiểm soát bằng maxReplicas. Ngoài ra, tỷ lệ sử dụng CPU được đặt bằng targetCPUUtilizationPercentage, tức là thành 50%.
Việc sử dụng CPU hơn 50% trên tất cả các Pod sẽ dẫn đến việc tự động tăng số lượng bản sao lên tối đa là 10. Ngay khi việc sử dụng CPU giảm xuống dưới tỷ lệ phần trăm đã đặt, Kubernetes sẽ tự động giảm số lượng bản sao để giải phóng tài nguyên.
Mở rộng theo chiều ngang chủ yếu là để đối phó với nhiều lưu lượng hơn, trong khi mở rộng theo chiều dọc cung cấp nhiều tài nguyên hơn (như CPU hoặc bộ nhớ) cho các container hiện có. Quy trình này là tăng hoặc giảm các yêu cầu tài nguyên và giới hạn trong Kubernetes Deployment. Để mở rộng các giới hạn CPU và bộ nhớ của ml-model-deployment, người ta cần mở tệp deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: ml-model-deployment spec: replicas: 3 selector: matchLabels: app: ml-model template: metadata: labels: app: ml-model spec: containers: - name: ml-model-container image: ml-model:latest ports: - containerPort: 5000 resources: requests: cpu: "1" memory: "2Gi" limits: cpu: "2" memory: "4Gi"
Trong cấu hình cập nhật này: