使用LDA模型运行Sagemaker Batch Transformation的错误

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

我已经成功地使用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。我尝试过改变策略,尝试使用SingleRecord。我也尝试了不同的split_types,也尝试了None和“Line”。

我已阅读文档,但不清楚我还应该尝试什么,错误信息也很不清楚。

2019-04-02T15:49:47.617:[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=20, BatchStrategy=MULTI_RECORD
#011at java.lang.Thread.run(Thread.java:748)2019-04-02T15:49:48.035:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: Bad HTTP status returned from invoke: 413
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr:
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: Message:
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <title>413 Request Entity Too Large</title>
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <h1>Request Entity Too Large</h1>
2019-04-02T15:49:48.036:[sagemaker logs]: du-sagemaker/data/batch_transform/batch_tansform_part0.pbr: <p>The data value transmitted exceeds the capacity limit.</p>

以上是我使用上述配置获得的最后一个,在此之前我还得到了400 HTTP错误代码。

任何帮助或指针将不胜感激!谢谢

python amazon-web-services amazon-sagemaker protobuf-c
2个回答
1
投票

虽然Batch Transform平台支持灵活的有效载荷限制(通过MaxPayloadInMB),但许多算法设置了更严格的内部限制。对于SageMaker内置LDA算法来说,这是正确的,该算法根据其内部配置拒绝“大”请求。

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

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

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

有关如何解决这些“执行参数”的更多信息,请参阅here记录的“优先顺序”。

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


0
投票

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

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