使用LDA mod运行Sagemaker批处理转换时出错

2024-07-02 13:07:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地用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错误代码。在

任何帮助或建议将不胜感激!谢谢你


Tags: 文件nameoutputmodelapplicationtypebatchjob
2条回答

我设法解决了这个问题,我使用的最大有效载荷似乎太高了。我设置了MaxPayloadInMB=1,现在它像一个梦一样运行

虽然批处理转换平台支持灵活的有效负载限制(通过MaxPayloadInMB),但许多算法设置了更严格的内部限制。SageMaker内置的LDA算法就是这样,它根据内部配置拒绝“大”请求。在

您在日志中看到的错误正好说明了这一点:批处理转换客户机试图发送一个大小为20MB的请求,但LDA算法服务器拒绝了该请求,错误代码为413 (Request Entity Too Large)。在

使用SageMaker内置算法容器或任何非您自己的容器时,我们建议您在CreateTransformJob请求中保留参数MaxPayloadInMB未设置。这将提示平台选择算法的默认执行参数,您将看到这些参数打印在日志中,如下所示:

[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=${DEFAULT_MAX_PAYLOAD_IN_MB}, BatchStrategy=MultiRecord

有关如何解析这些“执行参数”的详细信息,请参阅here文档中的“优先顺序”。在

除了控制有效负载大小外,您的其他转换作业参数选择(SplitType=RecordIOBatchStrategy=MultiRecord)对于传递RecordIO Protobuf数据看起来是正确的。在

相关问题 更多 >