将数据流式传输到 AWS Batch Transform 作业的更有效方法

问题描述 投票:0回答:1

我有一个 sagemaker 流程,用于在 sagemaker 中对数据进行训练和运行推理:

  1. 处理工作:从s3读取输入csv文件并清理数据,输出csv文件到s3
  2. 处理工作:从 s3 读入清理后的 csv 数据并拆分进行训练,输出 csv 文件到 s3
  3. 训练作业:从 s3 读取 X_train、y_train、X_test、y_test csv 文件并使用 catboost 或 xgboost 运行训练,将训练后的参数输出到 s3
  4. 批量转换作业(推理):使用 s3 中先前训练的参数作为模型,将推理数据从 s3 流式传输到 docker 容器内的 HTTP 服务器,将评分数据输出到 s3

我想将 csv 文件类型替换为 parquet,但我遇到的问题是批量转换作业不会将 s3 中的推理数据装载到容器上,而是强制您使用 HTTP 服务器来流式传输数据s3 到容器进行处理。我相信 sagemaker 将最大有效负载大小设置为 10Mb。我可以通过设置 SplitType = Line 来处理 csv 文件。我的理解是我不能将 SplitType = Line 与 parquet 文件一起使用。

是否有人有一种方法可以将大量数据流式传输到不使用 csv 作为文件类型的批量转换作业?我想使用 parquet 文件,但我能想到的唯一解决方案是使用另一个处理作业将 parquet 文件拆分为 10Mb 或更少,以便批量转换作业可以通过流式传输单个 parquet 文件来工作。

我之前的流程使用 sagemaker SplitType = Line 的 csv 文件类型,因此我不必自己管理 csv 文件的大小。附件是我用于批量转换作业的配置字典,但我主要寻找有关如何解决此问题的选项。由于 csv 选项可以工作但并不理想,并且如果不将 parquet 文件拆分为 10Mb 或更小的文件大小,则 parquet 选项将无法工作,因此存在哪些替代方案。我只是假设必须有一种直接的方法将数据从 s3 流式传输到 sagemaker 批量转换作业,而无需手动控制 parquet 的文件大小,也无需使用引入其他问题的 csv 文件。

inference_job_config = {
    'TransformJobName': inference_job_name,
    'ModelName': self.model_name,
    'TransformInput': {
        'DataSource': {
            'S3DataSource': {
                'S3Uri': f's3://{self.s3_bucket}/{self.s3_preprocessed_inference}/',
                'S3DataType': 'S3Prefix'
            }
        },
        'ContentType': 'text/csv',
        'CompressionType': 'None',
        'SplitType': 'Line'
    },
    'TransformOutput': {
        'S3OutputPath': f's3://{self.s3_bucket}/{self.s3_inference_results}/',
        'AssembleWith': 'None'
    },
    'TransformResources': {
        'InstanceType': self.instance_type,
        'InstanceCount': 1
    },
    'DataProcessing': {
        'JoinSource': 'None'
    }
}

我在这里看到一篇文章,展示了如何将 parquet 文件接受到运行批量转换作业的容器上的 HTTP 服务器,但据我所知,这仍然无法解决文件大小问题。如果文件大小预先预处理为 10Mb 或小于此值,我可以做到,但我希望有一些更直接的选项,例如 csv 选项,但文件类型比 csv 更好。

amazon-web-services amazon-s3 amazon-sagemaker xgboost catboost
1个回答
0
投票

这不是我正在寻找的确切答案,而是问题的解决方案。我刚刚用另一个处理作业替换了批量转换作业。 sagemaker 处理作业将数据从 s3 装载到您提供的用于运行 python 脚本的容器。因此处理作业可以安装输入数据和模型参数。这样就无需将数据流式传输到容器中运行的 HTTP 服务器来执行批量转换作业。不确定是否有某种原因您不想这样做,因为它似乎比使用批量转换作业简单得多,批量转换作业在流式传输到 HTTP 服务器时将每个数据包的有效负载大小严格限制为 10MB,这使得处理更大的文件变得困难尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.