在Amazon SageMaker部署随机森林模型遇UnexpectedStatusException错误求助
解决Amazon SageMaker训练RandomForest分类器的ExecuteUserScriptError问题
以下是针对问题的排查和解决步骤:
1. 修正训练数据与模型路径的适配
本地运行时使用./作为数据和模型目录,但SageMaker训练环境有固定的目录结构:
- 训练数据会被挂载到
/opt/ml/input/data/train,测试数据在/opt/ml/input/data/test - 模型必须保存到
/opt/ml/model目录,才能被SageMaker正确打包成模型工件
需要修改脚本中的路径读取逻辑:
- 解析
--train参数时,读取该路径下的训练文件(SageMaker会自动把S3路径映射到本地的这个目录) - 解析
--model-dir参数时,将训练好的模型保存到该路径下
2. 传递超参数到SageMaker Estimator
你本地运行时指定了--n-estimators和--max_depth,但创建SKLearn Estimator时没有传入这些超参数,导致SageMaker训练时脚本缺少必要参数,引发错误。修改Estimator初始化代码:
from sagemaker.sklearn.estimator import SKLearn sklearn_estimator = SKLearn( entry_point='script.py', role = get_execution_role(), instance_count=1, instance_type='ml.m4.xlarge', framework_version='0.20.0', base_job_name='rf-scikit', hyperparameters={ 'n-estimators': 100, 'max_depth': 2 } )
同时确保脚本中用argparse正确解析这些参数,注意参数名的一致性(比如脚本中定义parser.add_argument('--n-estimators', type=int))。
3. 查看完整训练日志定位具体错误
将等待训练任务的代码改为:
sklearn_estimator.latest_training_job.wait(logs='All')
这样可以看到脚本执行时的详细错误输出,比如文件找不到、模块缺失、代码逻辑错误等,这是定位问题最关键的步骤。你也可以直接在SageMaker控制台找到对应训练任务,查看CloudWatch中的完整日志。
4. 对齐本地与SageMaker的依赖版本
检查本地scikit-learn版本是否与SageMaker指定的framework_version='0.20.0'一致。如果本地使用了更高版本的scikit-learn,脚本中用到的新API可能在SageMaker的旧环境中无法运行。
5. 验证IAM角色权限
确保你的IAM执行角色拥有访问训练数据所在S3路径的权限,以及将模型写入S3的权限。检查角色的权限策略,确认包含S3的GetObject和PutObject操作权限。
内容的提问来源于stack exchange,提问作者Jojo
相关产品推荐
相关产品推荐

