SageMaker Pipeline处理步骤安装额外包遇ValueError报错
问题解决:SageMaker Pipeline ProcessingStep 报错修复
错误原因
你当前的代码错误在于将sklearn_processor.run()的返回值传给了ProcessingStep的processor参数。实际上processor.run()返回的是处理任务的预构建参数对象(对应step_args参数),而非处理器实例本身。ProcessingStep要求只能传入processor(处理器实例)或step_args(预构建运行参数)其中之一,两者不能同时提供,这就是报错的根源。
修正方案
方案一:使用step_args参数传递运行配置
sklearn_processor = FrameworkProcessor( estimator_cls=SKLearn, framework_version='0.23-1', instance_type="ml.t3.medium", instance_count=1, base_job_name="sklearn-abalone-process", sagemaker_session=sagemaker_session, role=role ) outputs = [ ProcessingOutput(output_name="train", source="/opt/ml/processing/train"), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"), ProcessingOutput(output_name="test", source="/opt/ml/processing/test") ] # 先获取处理任务的运行参数 process_args = sklearn_processor.run( outputs=outputs, code="pre-process.py", dependencies=["/home/sagemaker-user/dependencies/requirements.txt"] ) # 将参数传入step_args而非processor step_process = ProcessingStep( name="Preprocess_Data", step_args=process_args )
方案二:直接传递处理器实例+配置参数(推荐)
这种写法更贴合SageMaker Pipeline的声明式设计,代码结构更清晰:
sklearn_processor = FrameworkProcessor( estimator_cls=SKLearn, framework_version='0.23-1', instance_type="ml.t3.medium", instance_count=1, base_job_name="sklearn-abalone-process", sagemaker_session=sagemaker_session, role=role ) outputs = [ ProcessingOutput(output_name="train", source="/opt/ml/processing/train"), ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"), ProcessingOutput(output_name="test", source="/opt/ml/processing/test") ] step_process = ProcessingStep( name="Preprocess_Data", processor=sklearn_processor, code="pre-process.py", outputs=outputs, dependencies=["/home/sagemaker-user/dependencies/requirements.txt"] )
补充说明
两种方案都能解决报错问题,方案二更适合Pipeline的开发模式。另外,你指定的requirements.txt中的依赖包会在处理任务启动时自动安装,满足后续代码的包需求。
内容的提问来源于stack exchange,提问作者Avinash Srivastav
相关产品推荐
相关产品推荐

