亚马逊AWS官方博客
Amazon SageMaker Notebook 实例成本优化技巧 – 自动化配置开发环境
一、概述
随着生成式 AI(GenAI)的兴起,越来越多的企业和开发者选择使用 Amazon SageMaker 来加速机器学习模型的开发和部署。Amazon SageMaker Notebook 笔记本实例作为其核心组件之一,提供了便捷的开发环境。然而,在实际使用过程中,如果不合理管理 Notebook 实例的使用,可能会产生较高的成本。本文将介绍一些 Amazon SageMaker Notebook 实例的成本优化技巧,帮助您在使用过程中实现高效管理和配置环境的自动化。
二、SageMaker Notebook 实例介绍
Amazon SageMaker Notebook 实例是一种基于云端的 Jupyter Notebook 环境,用户可以在其中编写、运行和调试代码,用于数据分析、模型训练等任务。SageMaker Notebook 支持多种编程语言,并且与 AWS 生态系统紧密集成,使得数据科学家、机器学习工程师和算法研发人员可以快速开展工作。
三、SageMaker Notebook 实例在使用过程的成本优化
尽管 SageMaker Notebook 实例功能强大,但在长期使用过程中,如果不加以注意,可能会产生不必要的成本开销。以下是一些常见的问题:
- 实例长期开机未充分利用云资源的弹性。SageMaker Notebook 实例默认按照使用时长进行付费,当实例处于运行状态时即开始产生费用。一般公司的做法是为每个算法研发人员创建一台或多台 Notebook 实例作为开发机,之后实例便会一直处于运行态,但是开发人员并不是 7*24 小时的在使用机器,在夜晚和假期这种非工作时间,实例其实是处于空跑的状态的,此时就会有一定的资源浪费,特别是大模型相关算法研发人员往往使用带 GPU 到实例类型作为开发机,实例价格更高。常规情况下,我们会建议客户为稳定的实例用量购买 Saving Plan,以节省成本,但是开发机作为一种非稳定用量的资源(人员变动或者阶段性项目开启多个实例进行开发都会导致用量起伏),不太适合购买 Saving Plan。
- Stop Notebook 实例后所有配置将会被重置。为了节省成本,我们往往建议研发人员在长时间不使用 Notebook 的情况下主动停止(Stop)SageMaker Notebook 实例(例如下班后、周末、假期等)。停止(Stop)Notebook 实例虽然可以减少计算成本,但会导致实例中的所有自定义配置(如环境变量、软件包等)在下次启动时被重置,同时存储在
/home/ec2-user/SageMaker
目录之外的数据也将被重置。这意味着每次启动后,用户都需要重新配置环境,增加了开发时间和管理成本。
四、成本优化方案
针对上述成本问题,我们可以采用以下优化方案:
- 修改 .condarc 配置文件内容,以使用自定义环境存储路径和包缓存路径。conda 配置文件 .condarc 是一个可选的运行时配置文件,这个文件提供了很大的灵活性,允许用户根据自己的需求来调整 conda 的行为。在 SageMaker Notebook 中,.condarc 文件的路径为
/home/ec2-user/.condarc
,重启实例该文件是会被重置的,所以我们需要一种自动化的方式来修改配置,将 envs 路径和 pkgs 路径改到/home/ec2-user/SageMaker
目录下。 - 配置 Sagemaker Notebook 生命周期,使用自动化脚本恢复配置。SageMaker 提供了 Notebook 生命周期配置的功能,允许用户在实例启动和停止时自动执行自定义脚本。通过这一功能,用户可以在实例启动时自动恢复环境配置,减少手动操作。例如,您可以编写一个启动脚本,修改 .condarc 文件、自动安装所需的软件包、加载环境变量等,从而确保每次启动时环境一致。
- (可选)利用定时任务实现自动化的开关机。
五、实施步骤
1. 创建自动化脚本,内容如下:
2. 创建 SageMaker Notebook 生命周期。
3. 创建 SageMaker Notebook 实例时在 Lifecycle configuration 中选择创建好的生命周期配置。
4. 创建 SageMaker Notebook 实例,创建自己的 conda 环境(注意不要使用系统自带的环境),然后就可以开启你的开发之路啦。之后可以随时停止实例,再重新启动实例后,之前创建的 conda 环境依然存在。以下为示例:
5. (可选)使用 Amazon EventBridge 和 Amazon Lambda 实现实例的自动开关机。
首先创建两个 Lambda 函数:一个用于启动 Notebook 实例,另一个用于停止 Notebook 实例。
创建启动 Lambda 函数
- 进入 AWS Lambda 控制台,选择“创建函数”。
- 函数名称:
startSageMakerNotebookInstance
- 运行时:Python 3.12
- 权限:确保 Lambda 拥有访问 SageMaker 的权限(可以通过关联 SageMakerFullAccess 或自定义 IAM 角色实现)
- 在环境变量中设置
NOTEBOOK_INSTANCE_NAME
为您的 Notebook 实例的名称 - 代码如下:
创建停止 Lambda 函数
- 重复上述步骤,但函数代码修改为停止 Notebook 实例,函数名称
stopSageMakerNotebookInstance
:
使用 Amazon EventBridge 来创建定时触发规则,例如分别用于早上 8 点启动和晚上 8 点停止。
创建启动计划
- 进入 Amazon EventBridge 控制台,选择“Schedules → Create schedule”
- 规则名称:
StartNotebookAt8AM
- 描述:每天早上 8 点启动 Notebook 实例
- Schedule pattern:选择“Recurring schedule”,并设置 Cron 表达式:
cron(0 8 * * ? *)
- Target:选择 Lambda 函数
startSageMakerNotebookInstance
创建停止计划
- 规则名称:
StopNotebookAt8PM
- 描述:每天晚上 8 点停止 Notebook 实例
- Schedule pattern:选择“Recurring schedule”,并设置 Cron 表达式:
cron(0 20 * * ? *)
- Target:选择 Lambda 函数
stopSageMakerNotebookInstance
- 在创建 Schedule 之后,如果想跳过执行,可以在控制台手动 disable 该计划
六、能力扩展
如果有其它需要,可以扩展生命周期脚本,例如:自动挂载 EFS、自动设置环境变量,等等。
七、总结
通过合理配置和自动化管理 SageMaker Notebook 实例,可以显著降低使用成本,同时确保开发环境的灵活性和一致性。使用自定义 conda 环境路径和包缓存路径、配置 Notebook 实例生命周期脚本,并在不使用时及时停止实例,都是有效的成本优化策略。希望本文介绍的技巧能帮助您更高效地使用 SageMaker Notebook,实现开发流程的自动化和成本的优化。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。