您如何在Sagemaker培训工作中安装模块?

时间:2018-11-29 02:12:12

标签: tensorflow amazon-sagemaker

我认为我问的不是正确的问题,但是我有jupyter笔记本,它使用我编写的python培训脚本启动了Tensorflow培训工作。

该培训脚本需要某些模块。似乎我的贤哲培训工作失败了,因为某些模块不存在。

如何确保我的培训工作脚本具有所需的所有模块?

修改

其中一个模块的示例是keras

奇怪的是,我可以在jupyter笔记本中import keras,但是当导入语句在我的训练脚本中时,我会收到No module named keras错误

5 个答案:

答案 0 :(得分:2)

如果要安装多个软件包,一种方法是升级到Sagemaker Python SDK v2。这样,您可以在与笔记本相同的目录中创建requirements.txt,然后运行培训。 Sagemaker将自动完成安装。

如果您希望使用v1 SDK,可以将以下代码段添加到entry_point脚本中。

import subprocess
import sys

def install(package):
    subprocess.check_call([sys.executable, "-q", "-m", "pip", "install", package])
    
install('keras')

答案 1 :(得分:0)

模块脚本在docker容器中运行,该容器显然未安装依赖项。另一方面,Jupyter笔记本电脑已预先安装了keras。 执行此操作的简单方法是拥有一个具有所有需求的requirements.txt文件,然后在创建模型时将其传递。

env = {
    'SAGEMAKER_REQUIREMENTS': 'requirements.txt', # path relative to `source_dir` below.
}
sagemaker_model = TensorFlowModel(model_data = 's3://mybucket/modelTarFile,
                                  role = role,
                                  entry_point = 'entry.py',
                                  code_location = 's3://mybucket/runtime-code/',
                                  source_dir = 'src',
                                  env = env,
                                  name = 'model_name',
                                  sagemaker_session = sagemaker_session,
                                 )

答案 2 :(得分:0)

除非是本地模式,否则笔记本实例上的环境与SageMaker上的培训工作环境是互斥的。

如果您使用的是自定义docker镜像,则很可能您的docker镜像未安装Keras。

如果您使用的是SageMaker预定义的TensorFlow容器,则很可能是通过以下代码调用的:

https://github.com/aws/sagemaker-python-sdk/blob/master/src/sagemaker/tensorflow/estimator.py#L170

TensorFlow(entry_point='training_code.py',
           blah,
           blah
          )

然后,您将需要在该容器中安装依赖项。目前有两种用于在SageMaker上进行TensorFlow训练的模式,即“框架”和“脚本”模式。


如果通过“框架”模式进行训练(仅适用于1.12及更低版本),那么您将只能使用此处定义的keras_model_fn: https://github.com/aws/sagemaker-python-sdk/tree/v1.12.0/src/sagemaker/tensorflow#preparing-the-tensorflow-training-script

要安装依赖项,可以通过传入requirements.txt来完成。


在TensorFlow 1.11及更高版本中引入的“脚本模式”中: https://github.com/aws/sagemaker-python-sdk/tree/master/src/sagemaker/tensorflow#training-with-tensorflow

“脚本”模式不支持Requirements.txt,建议您在用户脚本中安装依赖项,该脚本将是包含所有Keras代码的Python文件。

请让我知道是否有任何需要澄清的内容。

例如:

答案 3 :(得分:0)

  1. 您可以将您的requirements.txt文件上传到s3存储桶,该存储桶可以是 sagemaker可以访问并将文件下载到您的工作环境中 使用boto3的容器目录。从安装库 requirements.txt 入口文件

        import os
        import boto3
    
        s3 = boto3.client('s3')
        s3.download_file('BUCKET_NAME', 'OBJECT_NAME', '/opt/ml/code/requirements.txt')
        os.command('pip install -r /opt/ml/code/requirements.txt')
    
  2. 另一种方法是使用以下方法构建自己的容器 使用aws提供的算法选项。

参考链接:
https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb

答案 4 :(得分:0)

EstimatorBase类(和TensorFlow类)接受参数dependencies,您可以按如下方式使用该参数来传递requirements.txt

estimator = TensorFlow(
    dependencies=['requirements.txt'],  # copies this file
)

例如

estimator = TensorFlow(
    entry_point='src/train.py',
    dependencies=['requirements.txt'],  # copies this file
)

estimator = TensorFlow(
    source_dir='src',  # this copies the entire src folder
    entry_point='train.py',  # when using source_dir has to be directly under that dir
    dependencies=['requirements.txt'],  # copies this file
)

这会将require.txt文件以及培训代码复制到您的sourcedir.tar.gz中。

  • 这仅适用于较新的图像版本。我了解到,在旧版本中,您可能需要将requirements.txt文件与培训代码放在同一文件夹中。

如果这不起作用,则可以使用pip download在本地下载requirements.txt中定义的依赖项,然后使用dependencies参数指定将依赖项下载到的文件夹