我可以指定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
之外,还有其他人知道这件事吗?
答案 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