用过 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)权限(和以前的做法一样)。
然后选择内置的对象检测算法:
接下来为训练作业选择实例数量和实例类型,确保拥有足够的存储以满足检查点之需:
随后设置超参数,此处将使用与笔记本中相同的参数。然后定义训练数据集的位置和属性:
对验证数据集执行同样的操作:
再定义模型检查点的保存位置。这是 Amazon SageMaker 将在发生中断时提取检查点以恢复训练作业的位置。
这是最终模型构件的保存位置:
接下来只需要耐心等待。假设启用了托管 Spot 训练功能,并配置了一个十分宽松的48小时最大等待时间:
一切搞定,让我们来训练此模型。训练完成后,成本节省情况在控制台中一目了然。
从上图可以看到,训练作业运行了2423秒,但得益于托管 Spot 训练功能,实际上只支付了837秒的费用,节省达65%!说到费用,下文将介绍该方式的定价机制。
定价
托管 Spot 训练作业按照完成或终止前运行的持续时间收费。
如果不使用检查点功能的内置算法和 AWS Marketplace 算法,会强制执行60分钟最大训练时间(MaxWaitTimeInSeconds 参数)。
最后同样重要的是:无论训练作业重启或恢复了多少次,用户仅需为数据下载时间付费一次。
该功能已在提供 Amazon SageMaker 服务的所有区域推出,立即试试吧。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。