Skip to main content
NetApp Solutions
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

第3部分-构建简化的MLOps管道(CI/CT/CD)

贡献者

本文提供了使用AWS服务构建MLOps管道的指南、重点介绍自动化模型重新培训、部署和成本优化。
——

作者:
Jian Jian (Ken)、NetApp高级数据和应用科学人员

简介

在本教程中、您将了解如何利用各种AWS服务构建一个简单的MLOps管道、其中包括持续集成(CI)、持续培训(CT)和持续部署(CD)。与传统DevOps管道不同、MLOps需要额外的注意事项才能完成运营周期。通过学习本教程、您将深入了解如何将CT整合到MLOps循环中、从而可以持续训练您的模型并无缝部署数据进行推导。本教程将指导您完成利用AWS服务建立此端到端MLOps管道的过程。

清单文件

功能 Name comment

数据存储

AWS FSX ONTAP

请参阅 "第1部分—将Amazon FSx for NetApp ONTAP (FSx ONTAP)作为私有S3存储分段集成到AWS SageMaker中"

数据科学IDE

AWS SageMaker

本教程基于中提供的Jupyter笔记本"第2部分-利用Amazon FSx for NetApp ONTAP (FSx ONTAP)作为SageMaker模型训练的数据源"

用于触发MLOps管道的功能

AWS Lamb开发 函数

-

cron作业触发器

AWS EventBridge

-

深度学习框架

PyTorch

-

AWS Python SDK

僵尸3

-

编程语言

Python

v3.10

前提条件

  • 一种预配置的FSx ONTAP文件系统。本教程将利用FSx ONTAP中存储的数据进行训练。

  • 一个* SageMaker笔记本电脑实例*,该实例配置为与上述FSx ONTAP文件系统共享同一个VPC。

  • 在触发*AWS Lambd*函数之前,请确保*SageMaker笔记本实例*处于*STOPPED*状态。

  • 要利用深度神经网络的必要GPU加速、需要使用*毫升g4dn.x大*实例类型。

架构

架构

此MLOps管道是一种实际实施、它利用cron作业触发无服务器功能、进而执行使用生命周期回调函数注册的AWS服务。AWS EventBridge*用作cron作业。它会定期调用一个*AWS Lambad*函数,负责对模型进行重新培训和重新部署。此过程涉及到启动*AWS SageMaker笔记本*实例以执行必要的任务。

逐步配置

生命周期配置

要为AWS SageMaker笔记本实例配置生命周期回调函数,应使用*Lifecycle configurations*。通过此服务,您可以定义在启动笔记本实例期间要执行的必要操作。具体而言,可以在*Lifecycle configuration*中实施shell脚本,以便在完成培训和部署过程后自动关闭笔记本实例。这是必需的配置、因为成本是MLOps中的主要考虑因素之一。

需要注意的是,需要提前设置*生命周期配置*的配置。因此、建议在继续其他MLOps管道设置之前、优先配置此方面。

  1. 要设置生命周期配置,请打开*Sager*面板,然后导航到*Admin configurations*部分下的*Lifecycle configurations*。

    SageMaker面板

  2. 选择*笔记本实例*选项卡,然后单击*创建配置*按钮

    生命周期配置欢迎页面

  3. 将以下代码粘贴到输入区域。

    #!/bin/bash
    
    set -e
    sudo -u ec2-user -i <<'EOF'
    # 1. Retraining and redeploying the model
    NOTEBOOK_FILE=/home/ec2-user/SageMaker/tyre_quality_classification_local_training.ipynb
    echo "Activating conda env"
    source /home/ec2-user/anaconda3/bin/activate pytorch_p310
    nohup jupyter nbconvert "$NOTEBOOK_FILE" --ExecutePreprocessor.kernel_name=python --execute --to notebook &
    nbconvert_pid=$!
    conda deactivate
    
    # 2. Scheduling a job to shutdown the notebook to save the cost
    PYTHON_DIR='/home/ec2-user/anaconda3/envs/JupyterSystemEnv/bin/python3.10'
    echo "Starting the autostop script in cron"
    (crontab -l 2>/dev/null; echo "*/5 * * * * bash -c 'if ps -p $nbconvert_pid > /dev/null; then echo \"Notebook is still running.\" >> /var/log/jupyter.log; else echo \"Notebook execution completed.\" >> /var/log/jupyter.log; $PYTHON_DIR -c \"import boto3;boto3.client(\'sagemaker\').stop_notebook_instance(NotebookInstanceName=get_notebook_name())\" >> /var/log/jupyter.log; fi'") | crontab -
    EOF
  4. 此脚本执行Jupyter笔记本、该笔记本负责重新训练和重新部署模型以进行引用。执行完成后、笔记本电脑将在5分钟内自动关闭。要了解有关问题陈述和代码实施的更多信息,请参阅"第2部分-利用Amazon FSx for NetApp ONTAP (FSx ONTAP)作为SageMaker模型训练的数据源"

    创建生命周期配置

  5. 创建后,导航到“笔记本实例”,选择目标实例,然后单击“操作”下拉列表中的*更新设置*。

    更新设置下拉列表

  6. 选择已创建的*生命周期配置*,然后单击*更新笔记本实例*。

    更新笔记本电脑的生命周期配置

AWS Lamb达 无服务器函数

如前所述,AWS Lambd*功能负责启动*AWS SageMaker笔记本实例

  1. 要创建*AWS Lamba函数*,请导航到相应的面板,切换到*FUNCHUDENTS*选项卡,然后单击*Create FUNCHUD*。

    AWS兰德函数欢迎页面

  2. 请将页面上所有必需的条目归档,并记住将运行时切换到*Python 3.10*。

    创建AWS兰德函数

  3. 请验证指定角色是否具有所需的权限*Amazon SageMakerFullAccess*,然后单击*Create Function (创建功能)*按钮。

    选择执行角色

  4. 选择创建的Lamb编制 函数。在代码选项卡中、将以下代码复制并粘贴到文本区域中。此代码将启动名为*fsxn-ONTAP的笔记本实例。

    import boto3
    import logging
    
    def lambda_handler(event, context):
        client = boto3.client('sagemaker')
        logging.info('Invoking SageMaker')
        client.start_notebook_instance(NotebookInstanceName='fsxn-ontap')
        return {
            'statusCode': 200,
            'body': f'Starting notebook instance: {notebook_instance_name}'
        }
  5. 单击*DEPLE*按钮以应用此代码更改。

    部署

  6. 要指定如何触发此AWS Lambar函数、请单击添加触发器按钮。

    添加AWS功能触发器

  7. 从下拉菜单中选择EventBridge、然后单击标有创建新规则的单选按钮。在计划表达式字段中、输入 rate(1 day),然后单击添加按钮以创建此新的cron作业规则并将其应用于AWS Lamb另 一个函数。

    完成触发

每天完成两步配置后,AWS Lambd*功能将启动*SageMaker笔记本,使用*FSx ONTAP存储库中的数据执行模型重新训练,将更新的模型重新部署到生产环境,并自动关闭*SageMaker笔记本实例*以优化成本。这可确保模型保持最新。

开发MLOps管道的教程到此结束。