11

image

用过 Amazon EC2 实例的用户可能都知道,EC2 有一种 Spot 实例,可以将亚马逊云科技 (Amazon Web Services)中暂未使用的 EC2 容量提供给用户,相比按需实例,最多可享受90%的价格折扣。

那么当你使用 Amazon SageMaker 训练自己的 ML 模型时,面对长时间运行训练任务导致的高额账单,是否考虑过,能不能通过 EC2 Spot 实例的方式来节约成本?

好消息来了!

托管 Spot 训练功能隆重上线

Amazon SageMaker 的托管 Spot 训练功能已经正式发布!这是一个基于Amazon EC2 Spot 实例的新功能,与在 Amazon SageMaker 中使用按需实例相比,最高可节约90%的 ML 训练成本。Spot 实例并不是新事物,从推出至今的近10年时间里,Spot 实例已经成为在亚马逊云科技上构建可扩展和经济实惠 IT 平台的基石之一。从今天开始,用户不仅能在完全托管的基础设施上运行 Amazon SageMaker 训练作业,同时也将受益于完全托管的成本优化优势,以同样预算取得更大成果。

所有训练配置中都可以使用托管 Spot 训练功能:

  • Amazon SageMaker 支持的所有实例类型;
  • 所有模型:内置算法、内置框架和自定义模型
  • 所有配置:单实例训练、分布式训练、自动模型调整
  • 与任何完全托管式服务一样,它的设置极为简单:
  • 如果使用控制台,只需打开此功能即可。
  • 如果使用 Amazon SageMaker 软件开发工具包,只需在 Estimator 构建器中将 train_use_spot_instances 设置为 true 即可。

就是这么简单:并且可以最高节省90%的成本!很棒吧。

中断与检查点设置

使用托管Spot训练功能时需要注意一个重要差异:按需训练实例在训练作业完成前都会保持可用,而托管Spot训练实例可能在我们需要更多容量时随时被收回。
使用 Amazon Elastic Compute Cloud (EC2) Spot 实例时,我们将提前2分钟收到终止通知,并且必须自行采取恰当行动。不过也无需担心,因为 Amazon SageMaker 是一种完全托管的服务,它会自动处理此工作,中断训练作业,再次取得足够的 Spot 容量后重启或恢复训练作业。如果在作业开始时间和持续时间上比较灵活,托管 Spot 训练功能将尤其有意义。此外,我们还可以使用 MaxWaitTimeInSeconds 参数来控制训练作业的总持续时间(实际训练时间加等候时间)。

为避免在训练作业中断时从头重启训练作业,强烈建议设置检查点,借此即可按一定间隔保存训练中的模型。这样我们就可以从定义明确的时间点恢复训练作业,从最近的部分训练模型继续作业。

  • 内置框架和自定义模型:训练代码由我们自己完全控制。只需确保使用自己在 CheckpointConfig 参数中定义并传递到 SageMaker Estimator 的位置,通过恰当的 API 定期将模型检查点保存到 Amazon Simple Storage Service (S3)。请注意 TensorFlow 会默认使用检查点。对于其他框架,相关示例参见示例笔记本文档
  • 内置算法:计算机视觉算法支持检查点功能(对象检测算法语义分割算法以及最近推出的图像分类算法)。由于这些算法往往用于大型数据集的训练,运行的时间也长于其他算法,发生中断的可能性也更高。其他内置算法目前不支持检查点功能。

接下来一起看看实际操作演示吧。

使用 Spot 训练功能训练内置的对象检测模型

参考此示例笔记本,我们一起通过亚马逊云科技控制台使用托管 Spot 训练实例来训练同样的作业,而不使用按需训练实例。上文曾经提到,此时只需关注两件事情:

  • 启用托管 Spot 训练功能(显而易见)。
  • 设置 MaxWaitTimeInSeconds 参数。

首先为训练作业命名,确保它拥有恰当的 Amazon Identity and Access Management (IAM)权限(和以前的做法一样)。

julsimon-sm-spot-1-1024x452.png

然后选择内置的对象检测算法:

julsimon-sm-spot-2-1024x808.png

接下来为训练作业选择实例数量和实例类型,确保拥有足够的存储以满足检查点之需:

julsimon-sm-spot-3-1024x589.png

随后设置超参数,此处将使用与笔记本中相同的参数。然后定义训练数据集的位置和属性:

julsimon-sm-spot-4-1024x822.png

对验证数据集执行同样的操作:

juliensimon-sm-spot-6-1024x605.png

再定义模型检查点的保存位置。这是 Amazon SageMaker 将在发生中断时提取检查点以恢复训练作业的位置。

julsimon-sm-spot-6-1024x379.png

这是最终模型构件的保存位置:

julsimon-sm-spot-7-1024x298.png

接下来只需要耐心等待。假设启用了托管 Spot 训练功能,并配置了一个十分宽松的48小时最大等待时间:

julsimon-sm-spot-8-1024x354.png

一切搞定,让我们来训练此模型。训练完成后,成本节省情况在控制台中一目了然。

julsimon-sm-spot-9-1024x403.png

从上图可以看到,训练作业运行了2423秒,但得益于托管 Spot 训练功能,实际上只支付了837秒的费用,节省达65%!说到费用,下文将介绍该方式的定价机制。

定价

托管 Spot 训练作业按照完成或终止前运行的持续时间收费。

如果不使用检查点功能的内置算法和 AWS Marketplace 算法,会强制执行60分钟最大训练时间(MaxWaitTimeInSeconds 参数)。

最后同样重要的是:无论训练作业重启或恢复了多少次,用户仅需为数据下载时间付费一次。

该功能已在提供 Amazon SageMaker 服务的所有区域推出,立即试试吧。

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。