在 sagemaker 上 运行 1000 个训练作业的最佳方式

Best way to run 1000s of training jobs on sagemaker

我有数以千计的培训工作想 运行 在 sagemaker 上。基本上我有一个超参数列表,我想为这些超参数的 all 并行训练模型(不是我们只想优化超参数的标准超参数调整,在这里我们想要训练所有超参数)。我对文档进行了相当广泛的搜索,但令我惊讶的是我找不到任何关于此的信息,尽管它看起来像是一个非常基本的功能。

例如,假设我有 10,000 个训练作业,我的配额是 20 个实例,运行 这些作业利用我所有可用实例的最佳方法是什么?特别是,

你的问题很宽泛,最好的前进方式将取决于你的其他细节use-case,所以我们将不得不做出一些假设。

[队列管理器] SageMaker 没有 有队列管理器。如果最后您决定需要一个队列管理器,我建议您看看 AWS Batch。

[单一训练作业与多重训练作业] 因为你需要 运行 10s of thousands job 我假设你正在训练相当轻量级的模型,所以为了节省时间,你最好为多个训练作业重用实例。 (否则,有 20 个实例限制,您需要 500 轮训练,开始时间为 3 分钟 - 根据实例类型 - 仅等待时间就需要 25 小时。根据每个模型的复杂性,这 25 小时可能是显着或完全可以接受)。

[实例上限提升] 您始终可以要求提高限制,但是 AWS 支持团队可能不会接受一次从 20 到 10k 的限制,除非您是在 AWS 上有使用记录的组织的一部分,在哪种情况下这可能没问题。

[一种可能的选择](假设有多个轻量化模型) 您可以创建一个训练作业,其中包含实例计数,即可供您使用的实例数。 在训练作业中,您的代码可以 运行 for 循环并执行您需要的所有单独训练作业。

在这种情况下,您将需要知道哪个实例是哪个实例,以便您可以拆分 HPO。 SageMaker 将此信息写入文件:/opt/ml/input/config/resourceconfig.json,因此使用它您可以轻松地让每个实例 运行 成为所需训练的一个子集。

要考虑的另一件事是,您是否需要保存生成的模型(您可能需要)。您可以将所有内容保存在输出模型目录中——标准 SM 方法——但这会将所有模型压缩到一个 model.tar.gz 文件中。 如果您不想这样做,并且更喜欢单独保存每个模型,我建议使用 checkpoints 目录,该目录会将写入的所有内容同步到您的 s3 位置。