我一直在努力评估AWSSageMaker与TensorFlow,并将其集成到我们的Python重ML栈提供模型训练的步骤。这样做是为了避免购买GPU沉重的服务器,以培训和部署模型,并利用共同位于S3桶的培训和数据存储。下面是什么是从我们过去的经验季度检讨。

我想要说SageMaker发布4个月前,以前言它。它是在其生命周期的早期,我们期望它继续快速提高。我们仍然计划使用SageMaker和建设我们的周围ML基础设施,尽管所有的下方。很多问题都是次要的或易周围的工作。

以下一些缺陷是基于他们的文档可能不会是超级明显,有些是合法的漏洞,其中有许多是在他们的考虑。然而,对于任何人使用SageMaker考虑,注意到我们碰到的:

性能

这需要〜5-6分钟开始培训工作和端点。唯一的方式来获得预测出培训了Sagemaker模型的是下载并在本地重新创建或启动端点(这是服务实例AFAICT一个TF)。我尽量不会让端点上运行,因为他们的成本钱(即使你没有做对他们的预测),即使他们很便宜,其管理多一点的开销比我想。

他们是不是最好的关于保持Tensorflow最新的 - 现在你可以使用1.6。您可以随时指定新版本的requirements.txt,但增加了启动时间。

不便之处

当你创建一个TensorFlow培训工作,这个想法是,你给Sagemaker的代码,你需要定义一个tf.Estimator(即model_fntrain_input_fn等等),然后去和做与您提供的ARGS训练的事情。如果你有依赖,你可以指定它们requirements.txt(如果可能的话),或在包括它们source_dir,这是tar'd并送了过来。对一注train_input_fn:SageMaker似乎期待的签名train_input_fn成为() - >(的特征字典,目标),而tf.Estimator构造函数只是想要的东西,如签名tf.estimator.inputs.numpy_input_fn。如果你想有一个方法来测试这些功能没有击中SageMaker这是一个有点讨厌。

他们TensorBoard包装(即设置run_tensorboard_locally = TRUE在里面适合调用)是欢快坏。我建议,而不是仅仅运行Tensorboard自己,并在您保存您的检查站S3存储指向它(它可以在默认情况下做到这一点,只要给它的URI),但是TensorBoard有点慢做这个 - 而你不知道’t really know when it’s done loading new summaries (that's not Amazon's fault).

'本地'一旦你的泊坞窗设置模式的伟大工程,但它并不明显如何做到这一点。原来它藏在一些例如某处。一旦一切都照顾的,你可以指定INSTANCE_TYPE = '本地'

而且,对于像我这样的沮丧医生谁只是想知道什么是TF容器在干嘛:如果您在本地模式容器可以从容器中拔出代码/usr/local/lib/python2.7/dist-packages/tf_container。别客气。

但它确实留下无法清除的根拥有的文件,训练后四周。这是不太理想,如人们想象。此外,除非你指定存储在/ tmp目录一切'本地':{ 'container_root': '/不是/ tmp目录'}〜/ .sagemaker / config.yaml

我的一个关于AWS最喜欢的事情是其详细的权限系统。此外,这是最讨厌的事情之一,它在SageMaker不容易。

他们的Python SDK是古怪不完整的地方。就像,你不能删除通过它的模型,你必须抓住你boto3会话,然后通过它直接调用API。

错误

不要更新tensorflow-服务-API 1.7版本。它休息sagemaker的Python-SDK

你知道那件事requirements.txt?不。抱歉。它已经在文档中像一个月了。似乎没有做什么_(ツ)_ /¯。

限制

最后没有办法来“扩展”的Tensorflow容器,并仍与Tensorflow SDK他们提供的,因为它会在默认Tensorflow图像呼叫时使用(AFAICT)。你当然也可以写自己的SageMaker容器但是这是一个大量的工作......

显然,有您传送到SageMaker开始训练任务(256个字符)的超参数一个微小的大小限制。似乎有点疯狂的我,但我们在这里。对得到这个固定的AWS工作。

有训练作业没有VPC支持。这意味着对我们来说,我们不能有培训就业拉动从数据库数据,因为我们需要设置一个VPC配对这样做。相反,我现在有一份工作,拉和处理数据的其他地方并将其上传到相应的S3桶。根据AWS支持的解决方法是在超参数存储在一个通道就像你如何存储模型初始化的东西。这是尴尬的,但工程。

经过培训/评估挂钩基本上是不可能的,因为你需要给你发送了连载什么。你可以让他们投入EstimatorSpecmodel_fn回报,但因为这就是所谓的喜欢......每次你还原检查点,如果你需要挂钩以保持状态,它得到超级尴尬的真正快。

什么工作

这真的很容易站起来,从给定的只是创建模型所需的信息的SDK的端点。

GPU训练是易于peasy - 只需告诉它使用一个GPU实例。你必须得到一个服务的限制增加但使用不止一个。

分布式训练也很容易:只要告诉它使用多个实例!

其他注意事项

这似乎给tar'd源迪尔斯存储在每个运行的基础在S3斗我从来没有告诉它使用(并不断告诉我它运行时,它的创建桶)。其实看代码,这是一个漂亮的小错误:在某些情况下,它只是要求默认斗,而不是使用所提供的一个。

tf.Estimator与框架train_and_evaluate(不一个SageMaker问题,但他们使用的TF容器为1.6)的是在我看来难于使用,并且有一些大洞(如提前终止是一种不可能的)。

的README.txtsagemaker的Python-SDK回购是不是像很多更好的文档,为SageMaker实际AWS文档。我会去,第一。

最后一两件事 - 反应的我已经找到了支持渠道的订单已:

  1. 我们的实际客户支持热线。
  2. 归档againt其SDK的GitHub库的问题。
  3. 该SageMaker开发者论坛。甚至不要与这一个麻烦。

希望这可以帮助那里的人开始寻找做他们的ML培训云端