子目录中的AWS SageMaker SKLearn入口点?

时间:2019-10-02 03:39:06

标签: python scikit-learn amazon-sagemaker

我可以指定SageMaker估计器的入口点脚本在子目录中吗?到目前为止,它对我来说失败了。这是我想做的:

sklearn = SKLearn(
    entry_point="RandomForest/my_script.py",
    source_dir="../",
    hyperparameters={...

我想这样做,所以我不必破坏目录结构。我有一些模块,可在多个sagemaker项目中使用,每个项目都位于其自己的目录中:

my_git_repo/

  RandomForest/
    my_script.py
    my_sagemaker_notebook.ipynb

  TensorFlow/
    my_script.py
    my_other_sagemaker_notebook.ipynb

module_imported_in_both_scripts.py

如果我尝试运行此命令,则SageMaker失败,因为它似乎会解析入口点脚本的名称以从中获得模块名称,并且它做得不好:

/usr/bin/python3 -m RandomForest/my_script --bootstrap True --case nf_2 --max_features 0.5 --min_impurity_decrease 5.323785009485933e-06 --model_name model --n_estimators 455 --oob_score True

...

/usr/bin/python3: No module named RandomForest/my_script

除了将my_script.py放在source_dir之外,还有其他人知道这件事吗?

Related to this question

2 个答案:

答案 0 :(得分:1)

不幸的是,这是功能上的空白。 https://github.com/aws/sagemaker-python-sdk/pull/941中有一些相关的工作也可以解决此问题,但是目前,您确实需要将my_script.py放在source_dir中。

答案 1 :(得分:0)

如果您source_dir = my_git_repo/RandomForest怎么办? 否则,您还可以使用构建功能(例如CodeBuild-但它也可以是一些自定义代码,例如在Lambda或Airflow中),以将脚本作为压缩后的工件发送到s3,因为这是较低级SDK的方式例如boto3仍然希望您的脚本;这种集成类型显示在SageMaker Sklearn random forest demo

的boto3部分中