AWS SageMaker脚本模式:input_fn、predict_fn、output_fn的调用与工作原理
AWS SageMaker脚本模式:input_fn/predict_fn/output_fn调用逻辑解析
在SageMaker脚本模式部署的模型端点运行时,这三个函数由SageMaker推理容器的内置框架自动触发调用,全程无需手动干预,完整调用时序和触发逻辑如下:
整体调用流程
客户端发送预测请求到SageMaker端点后,容器会按固定顺序依次触发input_fn → predict_fn → output_fn,完成从原始请求到最终响应的转换。
1. input_fn的触发时机与逻辑
当容器接收到客户端的原始请求数据(HTTP请求体)后,第一个触发input_fn:
- 容器自动传入两个参数:原始请求数据、请求头中的
Content-Type值(比如application/json、text/csv) - 核心作用是将原始请求数据解析、预处理为模型可直接接收的格式(如numpy数组、PyTorch Tensor、MXNet NDArray等),返回处理后的输入对象
- 若未自定义
input_fn,容器会使用默认实现,自动处理常见的Content-Type格式
2. predict_fn的触发时机与逻辑
input_fn执行完成并返回有效输入对象后,立刻触发predict_fn:
- 容器自动传入两个参数:
input_fn返回的处理后数据、容器启动时通过model_fn预加载好的模型实例 - 核心作用是调用模型对输入数据执行推理计算,返回原始推理结果(如分类概率、回归数值等)
- 注意:模型实例在容器启动阶段一次性加载,所有请求的
predict_fn都会复用同一个模型实例,不会重复加载模型
3. output_fn的触发时机与逻辑
predict_fn返回推理结果后,最后触发output_fn:
- 容器自动传入两个参数:
predict_fn返回的推理结果、请求头中的Accept值(客户端期望的响应格式) - 核心作用是将原始推理结果转换为客户端可解析的格式(如JSON、CSV、二进制数据等),返回格式化后的响应内容
- 若未自定义
output_fn,容器会默认把结果转为JSON格式返回
完整调用时序示例
- 客户端发送POST请求到端点,请求体为JSON格式的输入数据,请求头设置
Content-Type: application/json和Accept: application/json - 容器接收请求,调用
input_fn,传入JSON字符串和application/json,解析为模型所需的Tensor - 容器调用
predict_fn,传入Tensor和预加载的模型,得到推理出的分类概率 - 容器调用
output_fn,传入分类概率和application/json,转换为JSON格式的响应 - 容器把JSON响应返回给客户端
内容的提问来源于stack exchange,提问作者SAI VINIL
相关产品推荐
相关产品推荐

