问题描述
希望在云平台上只在需要时启动VM实例,并在启动后运行容器化的脚本(以下简称”作业”)。作业执行时间约为5到15分钟,之后会返回大约100 MiB的数据(例如,脚本本身可以将数据上传到某个存储桶中)。目前,用户已经尝试使用AWS SageMaker的训练和处理作业,以及GCP AI平台的训练作业。问题在于,脚本实际开始运行之前存在相对较长的开销(约5分钟),这几乎使得获取结果的时间翻倍。由于作业需要GPU来在合理的时间内完成,因此GCP Cloud Run和AWS Lambda并不适用。而全天租用VM实例也不是一个好的解决方案,因为它不能处理作业的并行运行,并且大部分时间都处于空闲状态。用户已经阅读了Kubernetes的文档,但仍然不确定它是否适合他的需求,也不清楚是否有更适合的解决方案。
用户的问题主要集中在以下几点:
1. Kubernetes是否是他所需要的工具?
2. 是否有其他适用于他需求的GCP和AWS的解决方案,可能是因为他没有注意到一些用户界面(UI)中的选项?
3. 是否应该通过EC2或GCP CE的API来自动启动和关闭需要GPU支持的VM实例?但他担心这种方法可能不够健壮、可扩展和成本高效。
解决方案
请注意以下操作可能存在版本差异及修改前做好备份。
根据您的需求,以下是几种可能的解决方案:
方案1:使用AWS ECS来自动化启动和运行
AWS Elastic Container Service(ECS)是一种完全托管的容器编排服务,适用于部署、管理和扩展容器化应用程序。根据您的描述,ECS可以满足您的需求,并且比Kubernetes更简单易用。
步骤
- 创建一个ECS集群,您可以选择使用Fargate来完全摆脱基础设施管理,或者使用EC2实例来获得更多的控制权。
- 创建一个ECS任务定义,其中包括您要运行的容器和所需的资源配置,例如GPU支持。
- 使用ECS任务计划(Scheduled Tasks)或通过API来启动您的ECS任务。您可以根据需要自动化任务的启动时间和频率。
方案2:自动化使用EC2实例
如果您更倾向于使用EC2实例,并希望自动化启动和停止,您可以编写脚本或使用AWS服务来实现这一目标。您可以使用AWS Lambda和Amazon CloudWatch Events来触发启动和停止EC2实例。
步骤
- 创建一个Lambda函数,编写代码以启动或停止EC2实例。您可以在代码中设置GPU实例类型以满足您的作业需求。
- 使用CloudWatch Events设置定时触发,以调用Lambda函数来启动和停止实例。您可以根据作业的时间预测来设置触发时间。
方案3:使用GCP Compute Engine实例和Cloud Scheduler
类似地,您可以在Google Cloud Platform上使用Compute Engine实例并使用Cloud Scheduler来自动化启动和停止实例。
步骤
- 创建一个Compute Engine实例模板,配置您需要的资源,包括GPU实例。
- 创建一个Cloud Scheduler作业,以设定启动和停止实例的时间计划。
- 在Cloud Scheduler作业中,调用Compute Engine API来启动和停止实例。
结论
针对您的需求,AWS ECS和GCP Compute Engine都是非常适合的解决方案。使用ECS可以轻松地在需要时启动和运行容器化作业,而使用EC2实例和Compute Engine实例结合Cloud Scheduler可以实现自动化的启动和停止。
需要根据您的具体情况和偏好,选择适合您的解决方案,并根据平台文档来配置和管理。通过合理规划,您可以在满足作业需求的同时,实现更高效的资源利用和降低成本。