Las empresas utilizan cada vez más infraestructuras de inteligencia artificial (IA) para alojar y gestionar cargas de trabajo autónomas.
La implementación de una infraestructura de IA suele proporcionar la potencia de cálculo adecuada para ejecutar y procesar grandes conjuntos de datos. Estas exigencias pueden traducirse en la necesidad de métodos escalables que permitan que los modelos de IA se ejecuten en grandes cargas de trabajo sin perjudicar el rendimiento.
La creciente cantidad de datos es una preocupación para los sistemas de IA en muchas facetas. La mayoría de los modelos de IA, especialmente los basados en el aprendizaje profundo, dependen en gran medida de grandes cantidades de datos durante el entrenamiento y la inferencia. Sin embargo, sin una infraestructura escalable adecuada, el procesamiento y la interpretación de dichos datos
El hardware de IA escalable permite un rendimiento confiable y estable a pesar de cargas computacionales abrumadoras. Con Kubernetes, el escalamiento horizontal de trabajos de IA es muy sencillo y el cambio de tamaño dinámico de los números de réplicas se puede realizar en función de la necesidad. Por el contrario, los contenedores Docker admiten entornos aislados y esbeltos para ejecutar modelos de IA donde el conflicto de recursos no es un cuello de botella en el rendimiento.
El uso eficiente de los recursos es la clave para una implementación de IA rentable y sostenible. Las solicitudes y los límites de recursos de Kubernetes permiten una gestión detallada de los recursos de CPU y memoria al evitar el aprovisionamiento insuficiente y excesivo. La gestión de recursos de Docker llena el vacío al aislar los recursos de los contenedores.
La contenerización es uno de los hitos en la evolución de la infraestructura de inteligencia artificial escalable. La contenerización de la aplicación de IA y sus dependencias en un contenedor Docker garantiza la coherencia en los entornos de desarrollo, prueba e implementación.
Primero, debes definir un Dockerfile para instalar el entorno. El Dockerfile es una serie de instrucciones sobre cómo crear una imagen de Docker. Declara una imagen base, las dependencias requeridas y los comandos de configuración inicial que se aplican a tu aplicación. El siguiente es un Dockerfile básico para un modelo de aprendizaje automático de 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"]
Si el Dockerfile está listo, puedes crear la imagen de Docker y ejecutar el contenedor. Ejecuta los siguientes comandos:
# 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
El fragmento de código anterior muestra cómo implementar el modelo de IA, pero también es necesario hacer que el modelo sea accesible externamente. Deberá exponerlo definiendo un servicio de Kubernetes. El service.yaml que aparece a continuación ilustra un ejemplo:
apiVersion: v1 kind: Service metadata: name: ml-model-service spec: selector: app: ml-model ports: - protocol: TCP port: 80 targetPort: 5000 type: LoadBalancer
Utilice la herramienta de línea de comandos kubectl para aplicar las configuraciones de implementación y servicio:
# Deploy the application kubectl apply -f deployment.yaml # Expose the service kubectl apply -f service.yaml
Kubernetes ofrece excelentes capacidades de escalado para entornos de IA, lo que maximiza el uso y el rendimiento de los recursos. El escalado horizontal se realiza agregando contenedores adicionales, y el escalado vertical implica agregar recursos adicionales, como CPU o memoria, a un contenedor.
El escalamiento horizontal se utiliza para aumentar la cantidad de réplicas (pods) de un sistema de IA para manejar una mayor carga de trabajo. El proceso requiere habilitar el escalamiento dinámico según la cantidad de réplicas. El comando que se utiliza para habilitar dicho proceso es `kubectl scale`. El comando en particular se utiliza para configurar la implementación para que funcione hasta un máximo de cinco réplicas:
`kubectl scale --replicas=5 implementación/ml-model-deployment`
El comando amplía ml-model-deployment para utilizar cinco réplicas del contenedor del modelo de aprendizaje automático. El sistema aprovisiona dinámicamente más pods para alcanzar la cantidad requerida posteriormente.
Kubernetes facilita el escalado automático mediante el escalador automático de pods horizontal (HPA). El HPA ajusta dinámicamente la cantidad de réplicas en función del uso de recursos, es decir, CPU o memoria, en relación con los límites establecidos. La configuración de YAML que se muestra a continuación es un ejemplo relevante de un HPA que se escala dinámicamente para ml-model-deployment en respuesta al uso de 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
En esta configuración, scaleTargetRef se utiliza para definir la implementación que se va a escalar, es decir, ml-model-deployment. El recuento mínimo de réplicas se establece mediante MinReplicas, mientras que el recuento máximo de réplicas se controla mediante maxReplicas. Además, el porcentaje de utilización de la CPU se establece mediante targetCPUUtilizationPercentage, es decir, al 50 %.
Si el uso de la CPU supera el 50 % en todos los pods, el recuento de réplicas se amplía automáticamente a un máximo de 10. En cuanto el uso de la CPU cae por debajo del porcentaje establecido, Kubernetes reduce automáticamente el recuento de réplicas para liberar recursos.
El escalado horizontal se realiza principalmente para hacer frente a un mayor tráfico, mientras que el escalado vertical proporciona más recursos (como CPU o memoria) a los contenedores existentes. El proceso consiste en aumentar o reducir las solicitudes y los límites de recursos en la implementación de Kubernetes. Para aumentar los límites de CPU y memoria de ml-model-deployment, se debe abrir el archivo 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"
En esta configuración actualizada: