我一直在努力评估AWS杰匠使用Tensorflow,并将其集成到我们的Python重架堆栈中以提供模型训练步骤。这个想法是避免购买GPU重型服务器来培训和部署模型,并利用共同定位的S3桶进行培训和数据存储。以下是我们过去季度经验的审查。

我想通过说杰玛司人在5个月前发布。它在生命周期早期,我们希望它继续快速改善。我们仍然计划使用SAGEMAKER并在其周围建立我们的ML基础设施,尽管如下所示。很多问题都很轻微或容易解决。

以下部分是基于他们的文档可能不显而易见的陷阱,其中一些是合法的错误,其中许多是在他们考虑的情况下。但是,对于考虑使用SAGEMAKER的人,请注意我们遇到的内容:

表现

开始培训工作和端点需要〜5-6分钟。唯一可以在介绍搜索机构训练的模型中获得预测的方法是在本地下载和重新创建它或启动端点(这是一个TF服务实例afaict)。我尽量不要让他们耗费终点,因为他们花钱(即使你没有对他们预测),甚至他们廉价管理也比我想更多的开销。

它们不是最新的迄今为止保持Tensorflow - 目前您可以使用1.6。您可以始终在您的较新版本中指定要求.txt.,但这增加了启动时间。

不便

当您创建Tensorflow培训工作时,想法是您提供介绍您需要定义a的代码TF.ESTIMATOR.(即A.model_fn.train_input_fn.等等),然后它会与您提供的args进行培训。如果您有依赖关系,则可以指定它们要求.txt.(如果可能的话)或包括它们source_dir.,这是令人痛苦的。一个注意事项train_input_fn.:杰玛人似乎期待着签名train_input_fn.成为() - >(特征,目标),而这件事TF.ESTIMATOR.构造函数只想签署类似的东西tf.estimator.Inputs.numpy_Input_fn.。如果您希望在不击中Sagemaker的情况下有一种方法来测试这些功能,这是有点烦人的。

他们的纹理板包装器(即设置run_tensorboard_locally = true在里面合身呼叫)是令人愉快的糟糕。我建议我自己运行tensorboard并指着它在你存储检查点的S3桶中指着它(默认情况下它可以做到这一点,只需给它Uri),然而,Tensorboard在这样做时有点慢 - 你呢’t really know when it’s done loading new summaries (that's not Amazon's fault).

他们的'当地的'MODE工作一旦您有Docker设置,但这并不明显。事实证明,它藏了一些例某处。一旦这一切都要照顾,你可以确定instance_type ='local'

而且,对于像我这样的沮丧的从业者,谁只是想知道TF容器正在做什么:如果您有本地模式容器,则可以从容器中退出该代码/usr/local/lib/python2.7/dist-packages/tf_container.。不客气。

然而,它确实在训练后留下了不合理的根本文件。这少于理想,因为人们可能会想象。此外,除非您指定,否则它将其存储在/ TMP中'local':{'container_root':'/ not / tmp'}〜/ .sagemaker / config.yaml

关于AWS的最喜欢的事情之一是其详细的权限系统。此外,这是最讨厌的东西之一,在杰匠方面并不容易。

他们的Python SDK在地方奇怪地不完整。喜欢,你无法通过它删除模型,你必须抓住你的Boto3.会话然后直接通过它调用API。

虫子

不要将Tensorflow-Serving-API更新为1.7版。它休息sagemaker-python-sdk

你知道这件事要求.txt.?没有。对不起。它已经在文件中就像一个月的一个月。似乎没有做任何事物¯_(ツ)_ /。

限制

最终没有办法“延长”TensoRFlow容器,仍然使用它(Afaict)与他们提供的TensoRFlow SDK,因为它将调用默认的TensorFlow图像。你当然可以写自己的杰匠容器,但这是更多的工作......

显然,您发送到Sagemaker开始培训工作(256个字符)的超级参数上有一个微小的大小限制。对我来说似乎有点疯狂,但我们在这里。使用AWS来解决这个问题。

没有VPC对培训工作的支持。这对我们来说意味着什么是我们不能拥有培训工作,因为我们需要设置VPC配对,因此我们无法从数据库中提取数据。相反,我目前拥有一个在其他地方拉动和处理数据的作业,然后将其上载到适当的S3桶。根据AWS支持的修复是将超级参数存储在通道中,就像您如何存储模型初始化的东西一样。这很尴尬但有效。

通过培训/评估钩子基本上是不可能的,因为你需要序列化你发送的任何东西。你可以把它们放进去估算器专业人员那是你的model_fn.返回,但由于它被称为......每次恢复检查点时,如果您需要挂钩保留状态,则会快速获得超级尴尬。

什么工作

只要仅创建模型所需的信息,它真的很容易从SDK上取出一个端点。

GPU培训很容易 - 只要告诉它使用GPU实例。然而,您必须获得服务限制以使用多于一个。

分布式培训也很容易:只是告诉它使用更多的实例!

其他笔记

它似乎在S3桶中每次运行时,我从未告诉过它使用(并告诉我它在运行时创建该桶),似乎将TAR的源代码存储在S3桶中。实际上看着代码这是一个很小的错误:在某些情况下它只是要求默认桶而不是使用提供的桶。

TF.ESTIMATOR.框架与train_and_evaluate.(不是真的一个杰匠问题,但这就是他们对1.6的TF容器的用途,这是我看来尴尬的难以使用,并且有一些大洞(如早期停止是不可能的)。

Readme.txt.在这一点sagemaker-python-sdkrepo是比如Sagemaker的实际AWS文档的更好的文档。我先去那个。

最后一件事 - 我为支持渠道找到的响应顺序已经是:

  1. 我们的实际客户支持线。
  2. 提交问题AGAINT他们的SDK的GitHub repo。
  3. Sagemaker开发商论坛。甚至没有打扰这个。

希望这有助于任何人想要开始做他们的ml培训云端!!