Aceleración de la experimentación de ML con seguridad mejorada: compatibilidad de AWS PrivateLink con Amazon SageMaker con MLflow

Como
Gustó

Fecha:

Con acceso a una amplia gama de IA generativa modelos de base (FM) y la capacidad de construir y entrenar sus propios modelos de aprendizaje automático (ML) en Amazon SageMakerLos usuarios quieren una forma sencilla y segura de experimentar y seleccionar los modelos que aportan más valor a su negocio. En las etapas iniciales de un proyecto de ML, los científicos de datos colaboran estrechamente y comparten los resultados experimentales para abordar los desafíos comerciales. Sin embargo, realizar un seguimiento de numerosos experimentos, sus parámetros, métricas y resultados puede resultar difícil, especialmente cuando se trabaja en proyectos complejos de forma simultánea. flujo ml, una popular herramienta de código abierto, ayuda a los científicos de datos a organizar, rastrear y analizar experimentos de ML e IA generativa, lo que facilita la reproducción y comparación de resultados.

SageMaker es un servicio de ML integral y totalmente administrado, diseñado para brindarles a los científicos de datos e ingenieros de ML las herramientas que necesitan para manejar todo el flujo de trabajo de ML. Amazon SageMaker con MLflow es una capacidad de SageMaker que permite a los usuarios crear, administrar, analizar y comparar sus experimentos de ML sin problemas. Simplifica las tareas, a menudo complejas y que requieren mucho tiempo, involucradas en la configuración y administración de un entorno de MLflow, lo que permite a los administradores de ML establecer rápidamente entornos de MLflow seguros y escalables en AWS. Ver MLFlow totalmente administrado en Amazon SageMaker para obtener más información.

Seguridad mejorada: AWS VPC y AWS PrivateLink

Al trabajar con SageMaker, puede decidir el nivel de acceso a Internet que desea proporcionar a sus usuarios. Por ejemplo, puede otorgarles permiso de acceso para descargar paquetes populares y personalizar el entorno de desarrollo. Sin embargo, esto también puede presentar riesgos potenciales de acceso no autorizado a sus datos. Para mitigar estos riesgos, puede restringir aún más el tráfico que puede acceder a Internet iniciando su entorno de ML en un Nube privada virtual de Amazon (Amazon VPC)Con una VPC de Amazon, puede controlar el acceso a la red y la conectividad a Internet de su entorno de SageMaker, o incluso eliminar el acceso directo a Internet para agregar otra capa de seguridad. Ver Conéctese a SageMaker a través de un punto final de interfaz VPC comprender las implicaciones de ejecutar SageMaker dentro de una VPC y las diferencias al usar el aislamiento de red.

SageMaker con MLflow ahora es compatible Enlace privado de AWS, que le permite transferir datos críticos desde su VPC a Servidores de seguimiento de MLflow a través de un punto final de VPC. Esta capacidad mejora la protección de la información confidencial al garantizar que los datos enviados a los servidores de seguimiento de MLflow se transfieran dentro de la red de AWS, lo que evita la exposición a Internet pública. Esta capacidad está disponible en todas las regiones de AWS donde SageMaker está disponible actualmente, excepto las regiones de China y las regiones de GovCloud (EE. UU.). Para obtener más información, consulte Conéctese a un servidor de seguimiento de MLflow a través de un punto final de VPC de interfaz.

En esta publicación de blog, demostramos un caso de uso para configurar un SageMaker ambiente en un VPC privada (sin acceso a Internet), mientras se utiliza flujo ml capacidades para Acelerar la experimentación con ML.

Resumen de la solución

Puede encontrar el código de referencia de esta muestra en GitHubLos pasos de alto nivel son los siguientes:

  1. Implementar infraestructura con el Kit de desarrollo en la nube de AWS (AWS CDK) incluyendo:
  2. Ejecute la experimentación de ML con MLflow utilizando el @decorador remoto del código abierto SDK de SageMaker Python.

La arquitectura general de la solución se muestra en la siguiente figura.

Arquitectura de soluciones

Para su referencia, esto entrada del blog demuestra una solución para crear una VPC sin conexión a Internet utilizando un Formación en la nube de AWS plantilla.

Requisitos previos

Necesita una cuenta de AWS con un Función de gestión de identidad y acceso (IAM) de AWS con permisos para administrar recursos creados como parte de la solución. Para obtener más detalles, consulte Creación de una cuenta de AWS.

Implementar infraestructura con AWS CDK

El primer paso es crear la infraestructura utilizando Esta pila CDKPuede seguir las instrucciones de implementación desde el README.

Primero echemos un vistazo más de cerca a la pila CDK en sí.

Define varios puntos finales de VPC, incluido el punto final de MLflow, como se muestra en el siguiente ejemplo:

vpc.add_interface_endpoint(
    "mlflow-experiments",
    service=ec2.InterfaceVpcEndpointAwsService.SAGEMAKER_EXPERIMENTS,
    private_dns_enabled=True,
    subnets=ec2.SubnetSelection(subnets=subnets),
    security_groups=[studio_security_group]
)

También tratamos de restringir la Rol de IAM de ejecución de SageMaker para que puedas usar SageMaker MLflow solo cuando estés en la VPC correcta.

Puede restringir aún más el punto final de VPC para MLflow adjuntando un Política de punto final de VPC.

Los usuarios fuera de la VPC pueden conectarse potencialmente a Sagemaker MLflow a través del punto de conexión de la VPC a MLflow. Puede agregar restricciones para que El acceso de usuario a SageMaker MLflow solo está permitido desde su VPC.

studio_execution_role.attach_inline_policy(
    iam.Policy(self, "mlflow-policy",
        statements=[
            iam.PolicyStatement(
                effect=iam.Effect.ALLOW,
                actions=["sagemaker-mlflow:*"],
                resources=["*"],
                conditions={"StringEquals": {"aws:SourceVpc": vpc.vpc_id } }
            )
        ]
    )
)

Después de una implementación exitosa, debería poder ver el nuevo VPC en la consola de administración de AWS para Amazon VPC sin acceso a Internet, como se muestra en la siguiente captura de pantalla.

vpc

A Dominio CodeArtifact y Repositorio de CodeArtifact con conexión externa a PyPI También se debe crear un repositorio, como se muestra en la siguiente figura, para que SageMaker pueda usarlo para descargar los paquetes necesarios sin acceso a Internet. Puede verificar la creación del dominio y del repositorio yendo a la consola CodeArtifact. Elija “Repositorios” en “Artefactos” desde el panel de navegación y verá el repositorio “pip”.

CódigoArtefacto

Experimentación de ML con MLflow

Preparar

Después de la creación de la pila CDK, una nueva Dominio de SageMaker con perfil del usuario También debería crearse. Inicie Amazon SageMaker Studiocrear un espacio JupyterLabEn el espacio JupyterLab, elija un tipo de instancia de ml.t3.mediumy seleccione una imagen con SageMaker Distribution 2.1.0.

Para comprobar que el entorno de SageMaker no tiene conexión a Internet, abra el espacio JupyterLab y verifique la conexión a Internet ejecutando el comando rizo comando en una terminal.

Sin acceso a internet

SageMaker con MLflow ahora es compatible con la versión MLflow 2.16.2 para acelerar los flujos de trabajo de IA generativa y ML desde la experimentación hasta la producción. Un flujo de ML 2.16.2 El servidor de seguimiento se crea junto con la pila CDK.

Usted puede encontrar el Servidor de seguimiento MLflow Nombre de recurso de Amazon (ARN) ya sea desde la salida del CDK o desde la interfaz de usuario de SageMaker Studio haciendo clic en el icono “MLFlow”, como se muestra en la siguiente figura. Puede hacer clic en el botón “copiar” junto a “mlflow-server” para copiar el ARN del servidor de seguimiento de MLflow.

servidor de seguimiento mlflow

Como conjunto de datos de ejemplo para entrenar el modelo, descargue el conjunto de datos de referencia del sitio público Repositorio de ML de la Universidad de California en Irvine a su PC local y asígnele un nombre predictive_maintenance_raw_data_header.csv.

Cargue el conjunto de datos de referencia desde su PC local a su espacio JupyterLab como se muestra en la siguiente figura.

JupyterLab

Para probar su conectividad privada con el servidor de seguimiento de MLflow, puede descargar el cuaderno de muestra que se cargó automáticamente durante la creación de la pila en un depósito dentro de su cuenta de AWS. Puede encontrar el nombre de un depósito de S3 en la salida del CDK, como se muestra en la siguiente figura.

Cubo s3 arn

Desde la terminal de la aplicación JupyterLab, ejecute el siguiente comando:

aws s3 cp --recursive <YOUR-BUCKET-URI> ./

Ahora puede abrir el privado-mlflow.ipynb cuaderno.

En la primera celda, obtener credenciales para el repositorio CodeArtifact PyPI para que SageMaker pueda usar pip desde el repositorio privado AWS CodeArtifact. Las credenciales vencerán en 12 horas. Asegúrese de volver a iniciar sesión cuando expiren.

%%bash
AWS_ACCOUNT=$(aws sts get-caller-identity --output text --query 'Account')
aws codeartifact login --tool pip --repository pip --domain code-artifact-domain --domain-owner ${AWS_ACCOUNT} --region ${AWS_DEFAULT_REGION}

Experimentación

Después de la configuración, comience la experimentación. El escenario utiliza el XGBoost Algoritmo para entrenar un modelo de clasificación binaria. Tanto el trabajo de procesamiento de datos como el de entrenamiento del modelo utilizan @decorador remoto para que los trabajos se ejecuten en las subredes privadas y el grupo de seguridad asociados a SageMaker desde su VPC privada.

En este caso, el decorador @remote busca los valores de los parámetros de SageMaker. archivo de configuración (config.yaml)Estos parámetros se utilizan para el procesamiento de datos y los trabajos de capacitación. Definimos las subredes privadas y el grupo de seguridad asociados a SageMaker en el archivo de configuración. Para obtener la lista completa de configuraciones compatibles con el decorador @remote, consulte Archivo de configuración en la Guía para desarrolladores de SageMaker.

Tenga en cuenta que especificamos en PreExecutionCommands de la forma más aws codeartifact login Comando para apuntar a SageMaker al repositorio privado de CodeAritifact. Esto es necesario para garantizar que las dependencias se puedan instalar en tiempo de ejecución. Alternativamente, puede pasar una referencia a un contenedor en su Amazon ECR a través de ImageUri, que contiene todas las dependencias instaladas.

Especificamos la información del grupo de seguridad y las subredes en VpcConfig.

config_yaml = f"""
SchemaVersion: '1.0'
SageMaker:
  PythonSDK:
    Modules:
      TelemetryOptOut: true
      RemoteFunction:
        # role arn is not required if in SageMaker Notebook instance or SageMaker Studio
        # Uncomment the following line and replace with the right execution role if in a local IDE
        # RoleArn: <replace the role arn here>
        # ImageUri: <replace with your image if you want to avoid installing dependencies at run time>
        S3RootUri: s3://{bucket_prefix}
        InstanceType: ml.m5.xlarge
        Dependencies: ./requirements.txt
        IncludeLocalWorkDir: true
        PreExecutionCommands:
        - "aws codeartifact login --tool pip --repository pip --domain code-artifact-domain --domain-owner {account_id} --region {region}"
        CustomFileFilter:
          IgnoreNamePatterns:
          - "data/*"
          - "models/*"
          - "*.ipynb"
          - "__pycache__"
        VpcConfig:
          SecurityGroupIds: 
          - {security_group_id}
          Subnets: 
          - {private_subnet_id_1}
          - {private_subnet_id_2}
"""

A continuación te mostramos cómo puedes configurar un experimento de MLflow similar a este.

from time import gmtime, strftime

# Mlflow (replace these values with your own, if needed)
project_prefix = project_prefix
tracking_server_arn = mlflow_arn
experiment_name = f"{project_prefix}-sm-private-experiment"
run_name=f"run-{strftime('%d-%H-%M-%S', gmtime())}"

Preprocesamiento de datos

Durante el procesamiento de datos, utilizamos los siguientes datos: @remote decorador para vincular parámetros en configuración.yaml para usted preprocess función.

Tenga en cuenta que el seguimiento de MLflow comienza desde el mlflow.start_run() API.

El mlflow.autolog() La API puede registrar automáticamente información como métricas, parámetros y artefactos.

Puedes usar log_input() método para registrar un conjunto de datos en el almacén de artefactos MLflow.

@remote(keep_alive_period_in_seconds=3600, job_name_prefix=f"{project_prefix}-sm-private-preprocess")
def preprocess(df, df_source: str, experiment_name: str):
    
    mlflow.set_tracking_uri(tracking_server_arn)
    mlflow.set_experiment(experiment_name)    
    
    with mlflow.start_run(run_name=f"Preprocessing") as run:            
        mlflow.autolog()
        
        columns = ['Type', 'Air temperature [K]', 'Process temperature [K]', 'Rotational speed [rpm]', 'Torque [Nm]', 'Tool wear [min]', 'Machine failure']
        cat_columns = ['Type']
        num_columns = ['Air temperature [K]', 'Process temperature [K]', 'Rotational speed [rpm]', 'Torque [Nm]', 'Tool wear [min]']
        target_column = 'Machine failure'                    
        df = df[columns]

        mlflow.log_input(
            mlflow.data.from_pandas(df, df_source, targets=target_column),
            context="DataPreprocessing",
        )
        
        ...
        
        model_file_path="/opt/ml/model/sklearn_model.joblib"
        os.makedirs(os.path.dirname(model_file_path), exist_ok=True)
        joblib.dump(featurizer_model, model_file_path)

    return X_train, y_train, X_val, y_val, X_test, y_test, featurizer_model

Ejecute el trabajo de preprocesamiento, luego vaya a la interfaz de usuario de MLflow (que se muestra en la siguiente figura) para ver el trabajo de preprocesamiento rastreado con el conjunto de datos de entrada.

X_train, y_train, X_val, y_val, X_test, y_test, featurizer_model = preprocess(df=df, 
                                                                              df_source=input_data_path, 
                                                                              experiment_name=experiment_name)

Puede abrir una interfaz de usuario de MLflow desde SageMaker Studio como se muestra en la siguiente figura. Haga clic en “Experimentos” en el panel de navegación y seleccione su experimento.

Interfaz de usuario de mlflow

Desde la interfaz de usuario de MLflow, puede ver el trabajo de procesamiento que acaba de ejecutarse.

Experimento de mlflow

También puede ver los detalles de seguridad en la consola de SageMaker Studio en el trabajo de capacitación correspondiente, como se muestra en la siguiente figura.

seguridad del entrenamiento

Entrenamiento modelo

De manera similar al trabajo de procesamiento de datos, también puede utilizar @remote Decorador con el trabajo de formación.

Tenga en cuenta que log_metrics() El método envía las métricas definidas al servidor de seguimiento MLflow.

@remote(keep_alive_period_in_seconds=3600, job_name_prefix=f"{project_prefix}-sm-private-train")
def train(X_train, y_train, X_val, y_val,
          eta=0.1, 
          max_depth=2, 
          gamma=0.0,
          min_child_weight=1,
          verbosity=0,
          objective='binary:logistic',
          eval_metric='auc',
          num_boost_round=5):     
    
    mlflow.set_tracking_uri(tracking_server_arn)
    mlflow.set_experiment(experiment_name)
    
    with mlflow.start_run(run_name=f"Training") as run:               
        mlflow.autolog()
             
        # Creating DMatrix(es)
        dtrain = xgboost.DMatrix(X_train, label=y_train)
        dval = xgboost.DMatrix(X_val, label=y_val)
        watchlist = [(dtrain, "train"), (dval, "validation")]
    
        print('')
        print (f'===Starting training with max_depth {max_depth}===')
        
        param_dist = {
            "max_depth": max_depth,
            "eta": eta,
            "gamma": gamma,
            "min_child_weight": min_child_weight,
            "verbosity": verbosity,
            "objective": objective,
            "eval_metric": eval_metric
        }        
    
        xgb = xgboost.train(
            params=param_dist,
            dtrain=dtrain,
            evals=watchlist,
            num_boost_round=num_boost_round)
    
        predictions = xgb.predict(dval)
    
        print ("Metrics for validation set")
        print('')
        print (pd.crosstab(index=y_val, columns=np.round(predictions),
                           rownames=['Actuals'], colnames=['Predictions'], margins=True))
        
        rounded_predict = np.round(predictions)
    
        val_accuracy = accuracy_score(y_val, rounded_predict)
        val_precision = precision_score(y_val, rounded_predict)
        val_recall = recall_score(y_val, rounded_predict)

        # Log additional metrics, next to the default ones logged automatically
        mlflow.log_metric("Accuracy Model A", val_accuracy * 100.0)
        mlflow.log_metric("Precision Model A", val_precision)
        mlflow.log_metric("Recall Model A", val_recall)
        
        from sklearn.metrics import roc_auc_score
    
        val_auc = roc_auc_score(y_val, predictions)
        
        mlflow.log_metric("Validation AUC A", val_auc)
    
        model_file_path="/opt/ml/model/xgboost_model.bin"
        os.makedirs(os.path.dirname(model_file_path), exist_ok=True)
        xgb.save_model(model_file_path)

    return xgb

Defina hiperparámetros y ejecute el trabajo de entrenamiento.

eta=0.3
max_depth=10

booster = train(X_train, y_train, X_val, y_val,
              eta=eta, 
              max_depth=max_depth)

En la interfaz de usuario de MLflow, puede ver las métricas de seguimiento como se muestra en la siguiente figura. En la pestaña “Experimentos”, vaya al trabajo “Entrenamiento” de su tarea de experimento. Se encuentra en la pestaña “Descripción general”.

Resultado del entrenamiento de mlflow

También puede ver las métricas como gráficos. En la pestaña “Métricas del modelo”, puede ver las métricas de rendimiento del modelo que se configuraron como parte del registro de trabajo de entrenamiento.

Métricas de entrenamiento de mlflow

Con MLflow, puede registrar la información de su conjunto de datos junto con otras métricas clave, como hiperparámetros y evaluación de modelos. Encuentre más detalles en la publicación del blog Experimentación LLM con MLFlow.

Limpiar

Para limpiar, primero elimine todos los espacios y aplicaciones creados dentro del dominio de SageMaker Studio. Luego destruya la infraestructura creada ejecutando el siguiente código.

cdk destroy

Conclusión

SageMaker con MLflow permite a los profesionales de ML crear, administrar, analizar y comparar experimentos de ML en AWS. Para mejorar la seguridad, SageMaker con MLflow ahora admite Enlace privado de AWSTodas las versiones del servidor de seguimiento MLflow, incluidas 2.16.2 se integra perfectamente con esta función, lo que permite una comunicación segura entre sus entornos de ML y los servicios de AWS sin exponer datos a Internet público.

Para una capa adicional de seguridad, puede configurar SageMaker Studio dentro de su VPC privada sin acceso a Internet y ejecutar sus experimentos de ML en este entorno.

SageMaker con MLflow ahora es compatible con MLflow 2.16.2Configurar una nueva instalación proporciona la mejor experiencia y compatibilidad total con las últimas funciones.


Acerca de los autores

perfil xiaoyuXing Xiaoyu es arquitecta de soluciones en AWS. La impulsa una profunda pasión por la inteligencia artificial (IA) y el aprendizaje automático (ML). Se esfuerza por cerrar la brecha entre estas tecnologías de vanguardia y un público más amplio, empoderando a personas de diversos orígenes para que aprendan y aprovechen la IA y el ML con facilidad. Ayuda a los clientes a adoptar soluciones de IA y ML en AWS de forma segura y responsable.

Perfil de paolopaolo di francesco es arquitecto de soluciones sénior en Amazon Web Services (AWS). Tiene un doctorado en ingeniería de telecomunicaciones y experiencia en ingeniería de software. Le apasiona el aprendizaje automático y actualmente se centra en utilizar su experiencia para ayudar a los clientes a alcanzar sus objetivos en AWS, en particular en las discusiones sobre MLOps. Fuera del trabajo, le gusta jugar al fútbol y leer.

Perfil de Tomer Tomer Shenhar es gerente de productos en AWS. Se especializa en IA responsable y lo impulsa la pasión por desarrollar soluciones de IA éticamente sólidas y transparentes.

Artículos relacionados

punto_img

Artículos Recientes

punto_img