Amazon SageMaker es una plataforma de aprendizaje automático (ML) diseñada para simplificar el proceso de creación, entrenamiento, implementación y gestión de modelos de ML a escala. Con un conjunto integral de herramientas y servicios, SageMaker ofrece a los desarrolladores y científicos de datos los recursos que necesitan para acelerar el desarrollo y la implementación de soluciones de ML.
En el vertiginoso panorama tecnológico actual, la eficiencia y la agilidad son esenciales para las empresas y los desarrolladores que se esfuerzan por innovar. AWS desempeña un papel fundamental a la hora de hacer posible esta innovación, ya que proporciona una gama de servicios que eliminan las complejidades de la gestión de la infraestructura. Al gestionar tareas como el aprovisionamiento, el escalado y la gestión de recursos, AWS permite a los desarrolladores centrarse más en la lógica empresarial básica y aplicar rápidamente nuevas ideas.
A medida que los desarrolladores implementan y escalan aplicaciones, los recursos no utilizados, como los puntos finales inactivos de SageMaker, pueden acumularse sin que nadie se dé cuenta, lo que genera mayores costos operativos. Esta publicación aborda el problema de la identificación y la gestión de puntos finales inactivos en SageMaker. Exploramos métodos para monitorear los puntos finales de SageMaker de manera efectiva y distinguir entre los activos y los inactivos. Además, analizamos un script de Python que automatiza la identificación de puntos finales inactivos mediante Métricas de Amazon CloudWatch.
Identificar puntos finales inactivos con un script de Python
Para administrar eficazmente los puntos finales de SageMaker y optimizar la utilización de recursos, utilizamos un script de Python que utiliza el SDK de AWS para Python (Boto3) para interactuar con SageMaker y CloudWatch. Este script automatiza el proceso de consulta de métricas de CloudWatch para determinar la actividad de los puntos de conexión e identifica los puntos de conexión inactivos en función de la cantidad de invocaciones durante un período de tiempo específico.
Analicemos los componentes clave del script de Python y expliquemos cómo cada parte contribuye a la identificación de puntos finales inactivos:
- Variables globales e inicialización del cliente de AWS: el script comienza importando los módulos necesarios e inicializando variables globales como
NAMESPACE,METRIC,LOOKBACKyPERIODEstas variables definen parámetros para consultar las métricas de CloudWatch y los puntos de conexión de SageMaker. Además, los clientes de AWS para interactuar con los servicios de SageMaker y CloudWatch se inicializan mediante Boto3.
from datetime import datetime, timedelta
import boto3
import logging
# AWS clients initialization
cloudwatch = boto3.client("cloudwatch")
sagemaker = boto3.client("sagemaker")
# Global variables
NAMESPACE = "AWS/SageMaker"
METRIC = "Invocations"
LOOKBACK = 1 # Number of days to look back for activity
PERIOD = 86400 # We opt for a granularity of 1 Day to reduce the volume of metrics retrieved while maintaining accuracy.
# Calculate time range for querying CloudWatch metrics
ago = datetime.utcnow() - timedelta(days=LOOKBACK)
now = datetime.utcnow()
- Identificar puntos finales inactivos: en función de los datos de métricas de CloudWatch, el script determina si un punto final está inactivo o activo. Si un punto final no ha recibido invocaciones durante el período definido, se marca como inactivo. En este caso, seleccionamos un umbral predeterminado prudente de cero invocaciones durante el período analizado. Sin embargo, según su caso de uso específico, puede ajustar este umbral para que se adapte a sus requisitos.
# Helper function to extract endpoint name from CloudWatch metric
def get_endpoint_name_from_metric(metric):
for d in metric["Dimensions"]:
if d["Name"] == "EndpointName" or d["Name"] == "InferenceComponentName" :
yield d["Value"]
# Helper Function to aggregate individual metrics for a designated endpoint and output the total. This validation helps in determining if the endpoint has been idle during the specified period.
def list_metrics():
paginator = cloudwatch.get_paginator("list_metrics")
response_iterator = paginator.paginate(Namespace=NAMESPACE, MetricName=METRIC)
return [m for r in response_iterator for m in r["Metrics"]]
# Helper function to check if endpoint is in use based on CloudWatch metrics
def is_endpoint_busy(metric):
metric_values = cloudwatch.get_metric_data(
MetricDataQueries=[{
"Id": "metricname",
"MetricStat": {
"Metric": {
"Namespace": metric["Namespace"],
"MetricName": metric["MetricName"],
"Dimensions": metric["Dimensions"],
},
"Period": PERIOD,
"Stat": "Sum",
"Unit": "None",
},
}],
StartTime=ago,
EndTime=now,
ScanBy="TimestampAscending",
MaxDatapoints=24 * (LOOKBACK + 1),
)
return sum(metric_values.get("MetricDataResults", [{}])[0].get("Values", [])) > 0
# Helper function to log endpoint activity
def log_endpoint_activity(endpoint_name, is_busy):
status = "BUSY" if is_busy else "IDLE"
log_message = f"{datetime.utcnow()} - Endpoint {endpoint_name} {status}"
print(log_message)
- Función principal – La
main()La función sirve como punto de entrada para ejecutar el script. Organiza el proceso de recuperación de puntos finales de SageMaker, consulta de métricas de CloudWatch y registro de la actividad de los puntos finales.
# Main function to identify idle endpoints and log their activity status
def main():
endpoints = sagemaker.list_endpoints()["Endpoints"]
if not endpoints:
print("No endpoints found")
return
existing_endpoints_name = []
for endpoint in endpoints:
existing_endpoints_name.append(endpoint["EndpointName"])
for metric in list_metrics():
for endpoint_name in get_endpoint_name_from_metric(metric):
if endpoint_name in existing_endpoints_name:
is_busy = is_endpoint_busy(metric)
log_endpoint_activity(endpoint_name, is_busy)
else:
print(f"Endpoint {endpoint_name} not active")
if __name__ == "__main__":
main()
Si sigue la explicación del script, obtendrá una comprensión más profunda de cómo automatizar la identificación de puntos finales inactivos en SageMaker, allanando el camino para una gestión de recursos más eficiente y una optimización de costos.
Permisos necesarios para ejecutar el script
Antes de ejecutar el script de Python proporcionado para identificar puntos finales inactivos en SageMaker, asegúrese de que su Gestión de identidad y acceso de AWS El usuario o rol (IAM) tiene los permisos necesarios. Los permisos necesarios para el script incluyen:
- Permisos de CloudWatch: la entidad de IAM que ejecuta el script debe tener permisos para las acciones de CloudWatch
cloudwatch:GetMetricDataycloudwatch:ListMetrics - Permisos de SageMaker: la entidad IAM debe tener permisos para enumerar los puntos finales de SageMaker mediante
sagemaker:ListEndpointsacción
Ejecutar el script de Python
Puede ejecutar el script de Python utilizando varios métodos, incluidos:
- La CLI de AWS: asegúrese de que Interfaz de línea de comandos de AWS (AWS CLI) está instalado y configurado con las credenciales adecuadas.
- AWS Cloud9: si prefiere un entorno de desarrollo integrado (IDE) basado en la nube, AWS Cloud9 Proporciona un IDE con configuraciones preconfiguradas para el desarrollo de AWS. Simplemente cree un nuevo entorno, clone el repositorio de scripts y ejecute el script dentro del entorno de Cloud9.
En esta publicación, demostramos cómo ejecutar el script de Python a través de AWS CLI.
Acciones a tomar después de identificar puntos finales inactivos
Una vez que haya identificado correctamente los puntos finales inactivos en su entorno de SageMaker mediante el script de Python, puede tomar medidas proactivas para optimizar el uso de recursos y reducir los costos operativos. A continuación, se muestran algunas medidas prácticas que puede implementar:
- Eliminar o reducir la escala de los puntos finales: en el caso de los puntos finales que no muestran actividad de manera constante durante un período prolongado, considere eliminarlos o reducir su escala para minimizar el desperdicio de recursos. SageMaker le permite eliminar puntos finales inactivos a través de la consola de administración de AWS o mediante programación utilizando el SDK de AWS.
- Revise y perfeccione la estrategia de implementación del modelo: evalúe la estrategia de implementación de sus modelos de ML y evalúe si todos los puntos de conexión implementados son necesarios. A veces, los puntos de conexión pueden quedar inactivos debido a cambios en los requisitos comerciales o actualizaciones del modelo. Al revisar su estrategia de implementación, puede identificar oportunidades para consolidar u optimizar los puntos de conexión para lograr una mayor eficiencia.
- Implementar políticas de escalamiento automático – Configurar políticas de escalado automático para que los puntos finales activos ajusten dinámicamente la capacidad de cómputo en función de la demanda de carga de trabajo. SageMaker admite el escalamiento automático, lo que le permite aumentar o disminuir automáticamente la cantidad de instancias que brindan predicciones en función de métricas predefinidas, como la utilización de la CPU o la latencia de inferencia.
- Explore las opciones de inferencia sin servidor: considere usar Inferencia sin servidor de SageMaker como una alternativa al aprovisionamiento tradicional de puntos finales. La inferencia sin servidor elimina la necesidad de una gestión manual de puntos finales al escalar automáticamente los recursos informáticos en función de las solicitudes de predicción entrantes. Esto puede reducir significativamente la capacidad inactiva y optimizar los costos para cargas de trabajo intermitentes o impredecibles.
Conclusión
En esta publicación, analizamos la importancia de identificar los puntos finales inactivos en SageMaker y proporcionamos un script de Python para ayudar a automatizar este proceso. Al implementar soluciones de monitoreo proactivo y optimizar el uso de recursos, los usuarios de SageMaker pueden administrar eficazmente sus puntos finales, reducir los costos operativos y maximizar la eficiencia de sus flujos de trabajo de aprendizaje automático.
Comience con las técnicas que se muestran en esta publicación para automatizar el monitoreo de costos para la inferencia de SageMaker. Explorar AWS re:Publicación para obtener recursos valiosos sobre cómo optimizar su infraestructura en la nube y maximizar los servicios de AWS.
Recursos
Para obtener más información sobre las características y servicios utilizados en esta publicación, consulte lo siguiente:
Sobre los autores
Pablo Colazurdo es arquitecto de soluciones principal en AWS, donde disfruta ayudando a los clientes a lanzar proyectos exitosos en la nube. Tiene muchos años de experiencia trabajando en diversas tecnologías y le apasiona aprender cosas nuevas. Pablo creció en Argentina, pero ahora disfruta de la lluvia en Irlanda mientras escucha música, lee o juega D&D con sus hijos.
Özgur Canibeyaz Ozgur es gerente sénior de cuentas técnicas en AWS y tiene 8 años de experiencia. Ayuda a los clientes a optimizar el uso de AWS al abordar desafíos técnicos, explorar oportunidades de ahorro de costos, lograr la excelencia operativa y crear servicios innovadores utilizando productos de AWS.