Sagemaker 推理管道模型中的共享输入

Shared input in Sagemaker inference pipeline models

我正在部署一个由两个 PyTorch 模型(model_1model_2)组成的 SageMaker 推理管道,我想知道是否可以将相同的输入传递给组成管道。

我的想法大致如下

  1. 调用端点发送二进制编码的有效载荷(即payload_ser),例如:

    client.invoke_endpoint(EndpointName=ENDPOINT,
                           ContentType='application/x-npy',
                           Body=payload_ser)
    
  2. 第一个模型使用 inut_fn 函数解析有效负载,在其上运行预测器,并 return 输出预测器的输出。作为一个简化的例子:

    def input_fn(request_body, request_content_type):
        if request_content_type == "application/x-npy":
            input = some_function_to_parse_input(request_body)
        return input
    
    def predict_fn(input_object, predictor):
        outputs = predictor(input_object)
        return outputs
    
    def output_fn(predictions, response_content_type):
        return json.dumps(predictions)
    
  3. 第二个模型将原始有效载荷(payload_ser)和前一个模型的输出(预测)作为有效载荷。可能 input_fn 函数将用于解析 model_1 的输出(如“标准情况”),但我需要一些方法来使原始有效负载也可用于 model_2.这样,model_2 将同时使用原始负载和 model_1 的输出进行最终预测,并 return 将其发送给调用端点的任何人。

知道这是否可以实现吗?

听起来您需要一个推理 DAG。 Amazon SageMaker 推理管道目前仅支持处理程序链,其中处理程序 N 的输出是处理程序 N+1 的输入。

您可以将模型 1 的 predict_fn() 更改为 return(input_object、输出)和 output_fn()。 output_fn() 将接收这两个对象作为预测,并将处理序列化为 json。 model2 的 input_fn() 需要知道如何解析这对输入。

考虑将其实现为一种通用的管道处理机制,将输入添加到模型的输出中。这样您就可以将它重复用于所有模型和管道。

您可以允许将模型部署为独立模型,并作为管道的一部分,并应用相关的 input/output 处理行为,该行为将由环境变量 (Environment dict),你可以在 creating 推理管道模型时指定它。