我认为我问的不是正确的问题,但是我有jupyter笔记本,它使用我编写的python培训脚本启动了Tensorflow培训工作。
该培训脚本需要某些模块。似乎我的贤哲培训工作失败了,因为某些模块不存在。
如何确保我的培训工作脚本具有所需的所有模块?
修改
其中一个模块的示例是keras
。
奇怪的是,我可以在jupyter笔记本中import keras
,但是当导入语句在我的训练脚本中时,我会收到No module named keras
错误
答案 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)
您可以将您的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')
另一种方法是使用以下方法构建自己的容器 使用aws提供的算法选项。
答案 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
参数指定将依赖项下载到的文件夹