我已经成功地用sagemaker训练了一个LDA模型,我已经能够建立一个推理API,但是它对一次可以查询的记录数量有限制。在
我需要得到一个大文件的预测,并一直试图使用批量转换,但运行的路障。在
我的输入日期在application/x-recordio-protobuf内容类型中,代码如下:
# Initialize the transformer object
transformer =sagemaker.transformer.Transformer(
base_transform_job_name='Batch-Transform',
model_name=model_name,
instance_count=1,
instance_type='ml.c4.xlarge',
output_path=output_location,
max_payload=20,
strategy='MultiRecord'
)
# Start a transform job
transformer.transform(input_location, content_type='application/x-recordio-protobuf',split_type="RecordIO")
# Then wait until the transform job has completed
transformer.wait()
# Fetch validation result
s3_client.download_file(bucket, 'topic_model_batch_transform/output/batch_tansform_part0.pbr.out', 'batch_tansform-result')
with open('batch_tansform-result') as f:
results = f.readlines()
print("Sample transform result: {}".format(results[0]))
我把输入文件分成10个文件,每个文件的大小约为19MB。我首先尝试在单个块上运行,因此总共19MB。我尝试过改变策略,尝试单曲唱片。我也试过不同的分体式,也试过None和Line。在
我已经阅读了文档,但不清楚我还应该尝试什么,而且错误消息也非常不清楚。在
^{pr2}$以上是我使用上述配置得到的最后一个配置,在此之前,我还得到了一个400http错误代码。在
任何帮助或建议将不胜感激!谢谢你
我设法解决了这个问题,我使用的最大有效载荷似乎太高了。我设置了
MaxPayloadInMB=1
,现在它像一个梦一样运行虽然批处理转换平台支持灵活的有效负载限制(通过
MaxPayloadInMB
),但许多算法设置了更严格的内部限制。SageMaker内置的LDA算法就是这样,它根据内部配置拒绝“大”请求。在您在日志中看到的错误正好说明了这一点:批处理转换客户机试图发送一个大小为20MB的请求,但LDA算法服务器拒绝了该请求,错误代码为
413 (Request Entity Too Large)
。在使用SageMaker内置算法容器或任何非您自己的容器时,我们建议您在
CreateTransformJob
请求中保留参数MaxPayloadInMB
未设置。这将提示平台选择算法的默认执行参数,您将看到这些参数打印在日志中,如下所示:有关如何解析这些“执行参数”的详细信息,请参阅here文档中的“优先顺序”。在
除了控制有效负载大小外,您的其他转换作业参数选择(
SplitType=RecordIO
和BatchStrategy=MultiRecord
)对于传递RecordIO Protobuf数据看起来是正确的。在相关问题 更多 >
编程相关推荐