我们正在AWS上开发深度学习应用程序。模型训练的自动化是相当具有挑战性的。第一步是准备数据进行训练,这涉及到从数十万个小的2D numpy数组中生成一个巨大的3D numpy数组(> 100GB)。小的numpy数组作为小文件保存在S3 bucket中。转换后,大numpy数组将保存到另一个S3 bucket中。训练脚本将在训练之前选择大的3D numpy数组。由于lambda函数有内存限制,因此我们必须手动启动EC2示例。
我想知道从外部启动EC2示例并在示例上运行python脚本来进行数据加载和转换的最佳实践是什么?
整个工作流程可能会使用AWS步骤功能自动化。
3条答案
按热度按时间k5ifujac1#
我会选择最简单的解决方案,因为这不是那么复杂的任务(从架构的Angular 来看)。
为存储桶配置S3事件,即存储新的大3D数组的存储桶,以便在对象放入存储桶后触发lambda函数(如果您将所有/不同数据存储在同一存储桶中,则可以更细粒度地基于前缀触发它)。
在lambda函数内部,您只需启动新的EC2示例并向其传递
user data
脚本,该脚本将下载必要的文件并运行任务(这可以使用Python的boto 3完成)。在这种情况下使用CloudFormation将是矫枉过正(我的意见)。
k4aesqcs2#
您可以使用云形成模板中的配置集来定义在启动EC2资源时执行复制或运行脚本或命令的步骤。您甚至可以暂时运行它,以便它在所有操作完成后自行关闭。
然后,您可以使用脚本或Lambda函数来执行Cloudformation堆栈
ars1skjm3#
我不同意所有这些答案。对于你的用例来说,最有效的方法是使用状态机。不是在EC2示例中运行您的任务,而是使用与Step Functions状态机协调的AWS Batch作业。事实上,这是一个非常常见的任务,AWS文档中有一个完整的部分,标题为“在AWS Batch控制台中使用Step Functions状态机来演示AWS Batch作业”,可以通过DuckDuckGo或其他搜索引擎快速搜索找到。
使用Step Functions的另一个优点是,您可以将其他机器学习资源集成到其中,并确保流程按顺序运行,并由try/catch状态进行处理。