发布于: Oct 30, 2022
计算工作负载与成本是进行机器学习中需要优先考虑的两个因素。根据不同应用对应的机器学习生命周期内各个阶段,您可以对实际使用的时长与资源进行成本细分,借此优化 Amazon SageMaker 的资源使用开销,保证仅为真正需要的资源付费。在本节中,我们将讨论一系列通行准则,借此为 Amazon SageMaker 机器学习生命周期选择正确的资源。
Amazon SageMaker 目前提供多种机器学习计算实例选项,具体包括以下实例家族:
- T – 通用型峰值性能实例(适用于日常 CPU 资源使用量较低,但在必要时可爆发出极高性能的使用场景)
- M – 通用型实例
- C – 计算优化型实例(适用于高度依赖计算资源的应用场景)
- R – 内存优化型实例(旨在为需要处理内存内大型数据集的工作负载提供强大性能)
- P、G 与 Inf – 加速型计算实例(使用硬件加速器或协处理器)
- EIA – 推理加速型实例 (用于 Amazon Elastic Inference)
运行在 Amazon SageMaker 机器学习计算实例上的计算类工作负载,与运行在 Amazon Elastic Compute Cloud (Amazon EC2)实例上的工作负载适用于相同的实例类型。关于实例规格的更多详细信息,包括虚拟 CPU 数据及内存容量,请参阅 Amazon SageMaker 计费标准。
Amazon SageMaker notebook 实例环境适用于交互式数据探索、脚本编写以及特征工程与原型建模。我们建议大家在交互构建方面使用容量较小的 notebook 实例,而其他更为繁重的作业——包括即席训练、调优与处理作业——则交由更大的实例负责。具体选择方式将在以下各节中加以说明。如此一来,即可避免大型实例(或 GPU)始终随 notebook 同步运行。通过选择正确的实例,您将最大程度降低构建成本。
在构建阶段,Amazon SageMaker 按需 notebook 实例的具体大小取决于您需要在内存中加载的探索性数据分析(EDA)数据量以及对应计算量。我们建议从通用型实例(例如 T 或 M 家族)起步,并根据需求随时做出调整。
支持峰值弹性的T实例家族非常适合 notebook 运行,因为其只会在运行 notebook 内各单元时才带来强度较大的 CPU 压力,平时工作负载较低。例如,ml.t2.medium 实例就足以解决大部分基础数据处理、特征工程与 EDA 需求,而与之对应的小型数据集可以保存在 4 GB 内存当中。如果需要将更多数据加载至内存内以进行特征设计,则可以选择拥有更大内存容量的实例,例如 ml.m5.12xlarge(192 GB 内存)。如果特征工程还涉及大量计算作业(例如图像处理),本文建议大家选择计算优化型 C 实例家族,例如 ml.c5.xlarge。
相较于按需 notebook 实例,Studio notebooks 的主要优势在于其基础计算资源拥有更充分的弹性,允许用户即时变更实例,从而根据计算需求随时实现计算资源的规模伸缩。从 ml.t3.medium 到 ml.g4dn.xlarge,随着构建类计算需求的增加,您的作业或基础设施管理流程不会发生任何中断。不同实例之间的往来移动将无缝实现,您能够在实例启动过程中继续工作。相比之下,按需 notebook 实例则要求大家停止当前实例、更新设置并使用新的实例类型并执行重新启动。
为了降低构建成本,我们建议大家停止使用按需 notebook 实例,或者在不需要时关闭 Studio 实例。此外,大家也可以使用 Amazon Web Services 身份与访问管理(Amazon Identity and Access Management,简称 IAM)条件键作为限制特定用户所使用的部分实例类型(例如 GPU 实例)的有效方法,并借此控制成本。为了避免非必要开支,我们将在后文的建议部分详细介绍更多细节。
在完成数据探索与原型设计,并准备将预处理及转换操作应用于完整数据集后,大家可以使用在 EDA 阶段编写的处理脚本启动 Amazon SageMaker Processing 作业,且无需对此前您所使用的、规模较小的 notebook 实例做出任何扩展。Amazon SageMaker Processing 将把处理完整数据集过程中所需要的一切(包括代码、容器与数据)分派至独立于 Amazon SageMaker notebook 实例之外的计算基础设施当中。在作业完成后,Amazon SageMaker Processing 还将负责资源供应、数据与工件传输,以及基础设施的关闭等操作。
使用 Amazon SageMaker Processing 的好处在于,您只需要在作业运行期间为处理实例付费。因此,您可以选择更为强大的实例,而不必过多担心成本问题。例如,作为一项通行建议,您可以使用ml.m5.4xlarge
处理中等规模的作业(数据量在 MB 到 GB 级别),使用ml.c5.18xlarge
处理需要大量计算资源的工作负载,也可以选择ml.r5.8xlarge
将数 GB 数据加载至内存内以加快处理速度,并仅根据处理作业的运行时长付费。有时候,您也可以考虑使用更大的实例加快作业执行速度,这可能反而有助于降低总体作业成本。
此外,对于分布式处理作业,您可以增加实例数量以通过多个较小实例建立起集群。要采用这种方式,大家可以在 ProcessingInput 当中设置s3_data_distribution_type='ShardedByS3Key'
,通过 Amazon Simple Storage Service (Amazon S3)键对输入对象进行分片,以确保各个实例接收到的输入对象数量大体相当,从而降低管理难度。如此一来,您可以在较小实例建立的集群中批量处理输入对象,显著节约成本。再有,您也可以使用 .run(…, wait = False)异步执行处理作业,即在提交作业后立即释放 notebook 单元供其他活动使用,借此更高效地利用计算实例的构建时间。
Amazon SageMaker Processing 中的计算范式与优势,也同样适用于 Amazon SageMaker 训练与调优作业。当您使用全托管 Amazon SageMaker 进行模型训练时,其会将训练作业所需要的一切内容(例如代码、容器与数据等)分派至独立于 Amazon SageMaker notebook 实例之外的计算基础设施当中。因此,您的训练作业将不会受到当前 notebook 实例的计算资源限制。您还可以通过调用.fit(…, wait = False)
实现所支持的异步训练机制。以此为基础,您可以立即将 notebook 单元释放出来以供其他活动使用。例如,您可以在另一个机器学习计算实例中再次调用 .fit()
以建立新的训练作业,或者出于实验目的更改超参数设置。一般来说,机器学习训练往往是机器学习生命周期当中计算资源密度最大、耗费时间最长的部分,因此如果能够将训练作业放置在远程计算基础设施中异步进行,我们将可以安全关闭当前 notebook 实例以实现更全面的成本优化。在后文的建议部分中,我们将具体探讨如何自动关闭未使用的闲置按需 notebook 实例,借此避免非必要性成本。
在进行训练实例选择时,您需要考虑的成本优化因素包括:
- 实例家族——哪种类型的实例最适合训练?我们需要针对训练的总体成本进行优化,有时候选择单一大型实例能够显著加快训练速度,从而降低总体成本。另外,您还需要考虑所使用的算法能否支持 GPU 实例。
- 实例大小——算法在运行训练时所需要的最低计算资源与内存容量是多少?我们能否使用分布式训练机制?
- 实例数量——如果您可以使用分布式训练机制,那么应该在集群当中使用哪种实例类型(CPU 或 GPU)?具体实例数量应该如何计算?
在实例类型的选择方面,大家可以根据负责处理工作负载的实际算法或框架作出决定。如果您使用的是 Amazon SageMaker 内置算法,则无需复杂编程即可轻松启动作业,关于更多详细信息请参阅适用于内置算法的实例类型。例如,XGBoost 目前只能使用 CPU 进行训练。面对这样一种内存绑定(对应于计算绑定)算法,通用型计算实例(例如 M5)的效果要比计算优化型实例(例如 C4)更好。
另外,我们还建议大家确保在选定的实例中分配充足的总内存容量,用于保存训练数据。尽管各实例支持使用磁盘空间处理不适合存放在主内存中的数据(通过 libsym 输入模式实现的非核外功能),但将缓存文件写入磁盘必然会减慢算法的处理速度。我们支持使用以下 GPU 实例进行训练:
ml.p2.xlarge
ml.p2.8xlarge
ml.p2.16xlarge
ml.p3.2xlarge
ml.p3.8xlarge
ml.p3.16xlarge
本文建议大家使用内存容量更大的 GPU 实例进行大规模批量训练。当然,您也可以在多 GPU 及多设备上运行算法以实现分布式训练。
如果您打算在脚本模式或自定义容器中使用自有算法,则首先需要明确该框架或算法是否支持 CPU、GPU 或者同时支持两者,再据此确定用于运行工作负载的实例类型。例如,scikit-learn 并不支持 GPU,因此即使您的计算实例带有 GPU 加速机制,也不会在运行过程中带来任何实质性的收益(而只会带来更高的训练成本)。要确定实例类型与实例数量(包括是否采用分布式方式进行训练),我们强烈建议您对工作负载进行分析,保证找到实例数量与运行时长之间的最佳平衡点。关于更多详细信息,请参阅 Amazon Web Services 在 BERT 与 R-CNN 上实现更快训练速度。此外,您还需要在实例类型、实例数量与运行时之间寻求平衡,关于更多详细信息,请参阅在 Amazon SageMaker 上通过 TensorFlow 训练 ALBERT 以实现自然语言处理。
对于采用 GPU 的 P 与 G 实例家族,我们还需要进一步考虑其中的差异因素。例如,P3 GPU 计算实例善于处理大规模分布式训练任务,能够以更快速度完成训练;而 G4 实例则更适合强调成本效益的小型训练作业。
在训练方面,您需要考虑的另一个因素,在于选择使用按需实例抑或是竞价实例。在使用按需机器学习实例的情况下,您需要根据实例的实际运行时长及对应机器学习计算资源付费。但对于其他一些可以随时中断,或者不需要在特定时间启动的作业,您可以选择托管竞价实例(即 Managed Spot Training 选项)。与按需实例相比,Amazon SageMaker 能够在竞价实例上将模型的训练成本降低达 90%,并妥善帮助您处理竞价实例中断状况。
相关文章