错误 运行 使用 LDA 模型的 Sagemaker 批量转换
Errors running Sagemaker Batch Transformation with LDA model
我已经使用 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 错误代码。
任何帮助或指点将不胜感激!谢谢
虽然批量转换平台支持灵活的负载限制(通过 MaxPayloadInMB
),但许多算法设置了更严格的内部限制。 SageMaker 内置 LDA 算法就是如此,它根据其内部配置拒绝 "large" 请求。
您在日志中看到的错误正是这样说的:批量转换客户端试图发送一个大至 20MB 的请求,但 LDA 算法服务器拒绝了该请求,错误代码为 413 (Request Entity Too Large)
。
使用 SageMaker 内置算法容器或任何非您自己的容器时,我们建议在您的 CreateTransformJob
请求中不设置参数 MaxPayloadInMB
。这将提示平台选择算法的默认执行参数,您将在日志中看到这样打印的参数:
[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=${DEFAULT_MAX_PAYLOAD_IN_MB}, BatchStrategy=MultiRecord
有关如何解决这些 "execution parameters" 的更多信息,请参阅 "order of precedence" 文档 here。
除了控制负载大小外,您的其他转换作业参数选择(SplitType=RecordIO
和 BatchStrategy=MultiRecord
)对于传递 RecordIO-Protobuf 数据来说看起来是正确的。
我设法解决了这个问题,我使用的最大有效负载似乎太高了。我设置了 MaxPayloadInMB=1
,它现在运行起来就像一个梦
我已经使用 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 错误代码。
任何帮助或指点将不胜感激!谢谢
虽然批量转换平台支持灵活的负载限制(通过 MaxPayloadInMB
),但许多算法设置了更严格的内部限制。 SageMaker 内置 LDA 算法就是如此,它根据其内部配置拒绝 "large" 请求。
您在日志中看到的错误正是这样说的:批量转换客户端试图发送一个大至 20MB 的请求,但 LDA 算法服务器拒绝了该请求,错误代码为 413 (Request Entity Too Large)
。
使用 SageMaker 内置算法容器或任何非您自己的容器时,我们建议在您的 CreateTransformJob
请求中不设置参数 MaxPayloadInMB
。这将提示平台选择算法的默认执行参数,您将在日志中看到这样打印的参数:
[sagemaker logs]: MaxConcurrentTransforms=1, MaxPayloadInMB=${DEFAULT_MAX_PAYLOAD_IN_MB}, BatchStrategy=MultiRecord
有关如何解决这些 "execution parameters" 的更多信息,请参阅 "order of precedence" 文档 here。
除了控制负载大小外,您的其他转换作业参数选择(SplitType=RecordIO
和 BatchStrategy=MultiRecord
)对于传递 RecordIO-Protobuf 数据来说看起来是正确的。
我设法解决了这个问题,我使用的最大有效负载似乎太高了。我设置了 MaxPayloadInMB=1
,它现在运行起来就像一个梦