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