我有一个Master-Workers风格的计算模型。而且,我通过Ansible剧本通过AMI启动了工作程序。

工作程序的AMI具有进行计算所需的所有必要配置(主要是ML任务的管道)。

但是,我们几乎会定期更新和优化算法和ML模型,这意味着我必须保持Worker AMI的最新状态。

所以,是否有工具或技术可以帮助我做到这一点?

还可以扩展吗,还是在容器化方面做得更好?
[我是说启动EC2实例并拉出容器并在容器内进行计算]。

#1 楼

我们计划为Jenkins EC2从站自动化此过程。

当前,每次构建新的AMI时,我们都必须手动更新AMI ID,但要利用Jenkins存储所有内容的config.xml文件它的配置,我们应该能够自动更新此文件中的AMI值,然后重新启动Jenkins以使这些更改生效。

EDIT:请参见下面的注释,以获得进行这些更改的更好方法,而不是config.xml文件

评论


如果您通过Jenkins本身以任何可以解析ID输出的自动化方式构建新的AMI,则可以通过postbuild groovy脚本更新它们,请参见此处-github.com/jenkinsci/ec2-plugin/pull/154

– Michael Bravo
17年3月14日在22:00

哇,非常感谢您提供该信息,这听起来比直接在xml文件中进行更新要好得多!

–迈克尔·佩雷拉(Michael Pereira)
17年3月14日在22:38

#2 楼

我可以回答实际的操作方法:

我们在AWS及其CI系统上使用了私有的Gitlab。
我们有一个用于构建环境的存储库(带有Packer的docker映像/ scripts / json描述amis)和一个带有.gitlab-ci.yml的文件,用于描述我们每个基本AMI的构建和导出任务。
每个项目在每次推送时都从我们的基础上构建自己的AMI,使用DynamoDb表存储部署的版本和AMI ID。

这是一种方法,其中ML taks更新将触发AMI构建。

在docker方式上,您应该看一下AWS ECS,它将在拉取docker映像之前减轻启动EC2实例的负担。

另一种选择是完全迁移到Amazon Machine Learning,但在这种情况下,如果需要的话,您将增加将工作迁移到AWS之外的负担。

我认为没有“最佳”方法,所有方法都是有效的,而您最满意的是应该 是您的选择:)

评论


Ami代表Amazon机器映像,ec2代表弹性云计算(IIRC),我敢肯定Google可以回答那句广告恶心:)

–滕西拜
17 Mar 15 '11:46



1)好吧,我尽最大努力诚实地介绍了这些术语,而没有直接访问Google :) 2)我不这么认为,已经有一个关于devops术语的文章,我仍然觉得这没有为网站带来价值。我觉得给答案中的每个工具都没有链接可以帮助读者自己评估它们

–滕西拜
17 Mar 15 '17 at 11:59

帮助人们了解缩写词含义的一个好方法是链接到aws开放指南

–迈克尔·佩雷拉(Michael Pereira)
17年3月15日在17:15

#3 楼

您应该看一下打包程序,我们发现它对于自动构建包括AMI在内的映像类型非常有帮助。

我们利用带有厨师簿的Chef客户预配程序来管理应用于映像,尽管支持许多其他配置程序(shell,木偶,ansible等)。我们可以从共享配置中输出docker映像,AMI和无用的盒子,所有版本均由其余的配置管理代码控制。

请参阅此处,了解适用于更广泛过程的细分。这种方法听起来很明智。

使用打包程序之类的工具意味着,如果您决定切换到容器,图像生成方面就很难转换了。

评论


解释一下您为什么以后觉得对读者有用的原因可能会有所帮助,请参阅“如何回答”以获取有关如何提供详细信息链接的提示。

–Aurora0001
17年3月14日在18:57

#4 楼

将容器用于此类计算节点非常有意义,并且还将提供其他优势。但这不是灵丹妙药。

要真正回答您的问题,我需要知道您如何部署系统(是使用ASG还是手动部署?还是使用诸如Ansible之类的工具进行部署? )。

如果您使用的是ASG,则对其进行泊坞化无法解决必须更新AMI的问题。它仍然需要更新,因为启动配置引用了它,而ASG将启动“旧”版本。当然,您可以使用Chef或类似工具使ASG实例更智能,然后让它们自行配置并获取其应运行版本的最新版本。但这意味着如果您还没有基础设施,请投资于它。而且这还意味着增加了扩展延迟,因为在启动新实例时需要花费一些时间来进行自我更新。

如果您不使用ASG,则可以推送最新的映像部署时将其部署到实例上。在这里,使用docker化解决方案确实非常方便。例如如果将实例加入Docker群中,则可以使用一条指令来部署新版本,并通过滚动升级等方式来完成。

因此,如您所见,有一个一堆方法来做到这一点。取决于您现在已经在做什么以及您的需求是什么。

#5 楼

也许您可以从软件中抽象出平台(具有基本依赖性的AMI)而受益。每次更新算法和模型时,您真的需要重新滚动AMI吗?或者,是否在更改库后重新滚动并将部署设置添加到在AMI上设置ML堆栈的设置中?如果可以对执行模型进行重新设计以支持这一点,则您的迭代速度可能会更高。

如果不能,我建议让CI流程生成并发布新的AMI或图像。

评论


重新滚动AMI,使其准备开始计算并且在启动时未配置,这是ML群集可伸缩性的重要组成部分。返回到已经处于不可变服务器模式的phoenix服务器模型听起来会适得其反,并会导致扩展过程延迟,这意味着在AWS术语中增加了非盈利时间(配置/部署时间)的成本。

–滕西拜
17 Mar 24 '17在15:36