AmazonSagemaker:推理端点中的用户输入数据验证



我已经使用Tensorflow模型成功构建了Sagemaker端点。预处理和后处理是在";推理.py";它调用基于本教程的处理程序函数:https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/using_tf.html#how-实现预处理和预处理的

我的问题是:

  • 哪种方法适合在推理.py中验证用户输入数据
  • 如果此类验证测试失败(例如错误的数据类型或不在允许范围内的数据等(,如何向用户返回带有状态代码的适当错误消息
  • 这与端点上方的API网关如何兼容

以下是推理.py的结构,并将所需的验证检查作为注释:

import json
import requests

def handler(data, context):
"""Handle request.
Args:
data (obj): the request data
context (Context): an object containing request and configuration details
Returns:
(bytes, string): data to return to client, (optional) response content type
"""
processed_input = _process_input(data, context)
response = requests.post(context.rest_uri, data=processed_input)
return _process_output(response, context)

def _process_input(data, context):
if context.request_content_type == 'application/json':
# pass through json (assumes it's correctly formed)
d = data.read().decode('utf-8')
data_dict = json.loads(data)

# ----->   if data_dict['input_1'] > 25000:
# ----->       return some error specific message with status code 123

return some_preprocessing_function(data_dict)
raise ValueError('{{"error": "unsupported content type {}"}}'.format(
context.request_content_type or "unknown"))

def _process_output(data, context):
if data.status_code != 200:
raise ValueError(data.content.decode('utf-8'))
response_content_type = context.accept_header
prediction = data.content
return prediction, response_content_type

我将在下面内联回答您的问题:

  1. 哪种方法适合在推理.py中验证用户输入数据

鉴于您有一个handler函数,input_handleroutput_handler将被忽略。因此,在handler函数中(正如您正确地做的那样(,您可以拥有验证逻辑。

  1. 如果此类验证测试失败(例如错误的数据类型或不在允许范围内的数据等(,如何向用户返回带有状态代码的适当错误消息

我喜欢把我的SageMaker端点看作一个web服务器。因此,您可以使用响应消息返回任何有效的HTTP响应代码。请参阅我作为参考找到的这个示例推理.py文件。

_return_error(
415, 'Unsupported content type "{}"'.format(context.request_content_type or "Unknown")
)
def _return_error(code, message):
raise ValueError("Error: {}, {}".format(str(code), message))
  1. 这与端点上方的API网关如何兼容

有关使用Amazon API网关映射模板和Amazon SageMaker创建机器学习驱动的REST API的详细信息,请参阅此链接。

最新更新