我正在try 建立一个Sagemaker管道,有2个步骤:预处理,然后训练一个射频模型. 第一步产生3个输出:scaled_data.csv、train.csv和est.csv.第二步是训练和测试CSV来训练射频模型.在运行步骤2时出现错误,指出"TypeError:类型属性的对象不是JSON Serializable".

以下是我设置管道步骤的代码:

# upload data from local path to default bucket with prefix raw_data
WORK_DIRECTORY = "data"

input_data = sagemaker_session.upload_data(
    path="{}/{}".format(WORK_DIRECTORY, "dataset.csv"),
    bucket=bucket,
    key_prefix="{}/{}".format(prefix, "input_data"),
)
  1. 设置第一步(扩展步骤)
scaling_processor = SKLearnProcessor(
    framework_version=FRAMEWORK_VERSION,
    instance_type="ml.m5.4xlarge",
    instance_count=processing_instance_count,
    base_job_name="data-process",
    role=role,
    sagemaker_session=pipeline_session,
)

scaling_processor_args = scaling_processor.run(
    inputs=[
        ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
    ],
    outputs=[
        ProcessingOutput(output_name="scaled_data", source="/opt/ml/processing/output/scaled_data/"),
        ProcessingOutput(output_name="train", source="/opt/ml/processing/output/train/"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/output/test/")    ],
    
    code="scripts/preprocess.py",
)

step_process = ProcessingStep(name="DataProcess", step_args=scaling_processor_args)
  1. 设置第二步(RF训练-BYO模式),这里是出现错误的地方:
estimator_cls = sagemaker.sklearn.SKLearn
FRAMEWORK_VERSION = "0.23-1"

rf_processor = FrameworkProcessor(
    estimator_cls,
    FRAMEWORK_VERSION,
    role = role,
    instance_count=1,
    instance_type='ml.m5.2xlarge',
    base_job_name='rf-modelling'
)

rf_processor_args = rf_processor.run(
    inputs=[
        ProcessingInput(source=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri,
                        destination="/opt/ml/processing/input"),
        ProcessingInput(source=step_process.properties.ProcessingOutputConfig.Outputs["test"].S3Output.S3Uri,
                        destination="/opt/ml/processing/input"),    ],
    outputs=[
        ProcessingOutput(output_name="rf_model",source = "/opt/ml/processing/output/")
   ],
    
    code="scripts/train.py",
)

step_train = ProcessingStep(name="RFTrain", step_args=rf_processor_args)

在运行步骤2时出现错误,指出"TypeError:类型属性的对象不是JSON Serializable".问题出在我为RF_PROCESSOR_ARGS中的第二步设置处理输入的那一行. 你知道是什么原因导致这个错误吗?

推荐答案

您调用的run()似乎是不正确的 Select ,因为run()用于直接运行处理作业(job),而不是定义您显然想要的管道步骤.直接使用ProcessingStep,并向其提供所有必要的参数:

# Setup the first step (scaling step)

...

# --> Use ProcessingStep directly and provide all the args
step_process = ProcessingStep(
    name="DataProcess",
    processor=scaling_processor,
    inputs=[
        ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
    ],
    outputs=[
        ProcessingOutput(output_name="scaled_data", source="/opt/ml/processing/output/scaled_data/"),
        ProcessingOutput(output_name="train", source="/opt/ml/processing/output/train/"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/output/test/"),
    ],
    code="scripts/preprocess.py",
)

# Setup the 2nd step (RF Training-BYO mode)

...

# --> Use ProcessingStep directly and provide all the args
step_train = ProcessingStep(
    name="RFTrain",
    processor=rf_processor,
    inputs=[
        ProcessingInput(source=step_process.properties.ProcessingOutputConfig.Outputs["train"].S3Output.S3Uri,
                        destination="/opt/ml/processing/input/train"),
        ProcessingInput(source=step_process.properties.ProcessingOutputConfig.Outputs["test"].S3Output.S3Uri,
                        destination="/opt/ml/processing/input/test"),
    ],
    outputs=[
        ProcessingOutput(output_name="rf_model", source="/opt/ml/processing/output/"),
    ],
    code="scripts/train.py",
)

Python相关问答推荐

数字梯度的意外值

使用polars .滤镜进行切片速度比pandas .loc慢

我从带有langchain的mongoDB中的vector serch获得一个空数组

如何在箱形图中添加绘制线的传奇?

删除所有列值,但判断是否存在任何二元组

运行终端命令时出现问题:pip start anonymous"

加速Python循环

在Python argparse包中添加formatter_class MetavarTypeHelpFormatter时, - help不再工作""""

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

当递归函数的返回值未绑定到变量时,非局部变量不更新:

提取相关行的最快方法—pandas

如何更新pandas DataFrame上列标题的de值?

Python Pandas获取层次路径直到顶层管理

合并帧,但不按合并键排序

Flash只从html表单中获取一个值

从旋转的DF查询非NaN值

如何合并具有相同元素的 torch 矩阵的行?

合并相似列表

以极轴表示的行数表达式?

将相应的值从第2列合并到第1列(Pandas )