在 sagemaker 中,文档讨论了需要具有 4 个特定函数的推理脚本。当我们得到预测时,python SDK 会向端点发送请求。
然后运行推理脚本。但是我找不到在 SDK 中运行推理脚本的位置。
当我浏览 sdk 代码时,Predictor.predict()
方法调用 sagemaker 会话以将请求发布到终端节点并获得响应。这是 SDK 的最后一步。Sagemaker在收到该请求时显然正在做一些事情。
它运行的代码是什么?
端点本质上是在 Docker 容器中运行的 Flask Web 服务器
如果它是一个 scikit-learn 映像,当您调用终端节点时,它会从 S3 加载您的脚本,然后...
它调用input_fn(request_body: bytearray, content_type) -> np.ndarray
将request_body
解析为 numpy 数组
然后,它会调用您的model_fn(model_dir: str) -> object
函数以从model_dir
加载模型并返回模型
然后它调用predict_fn(input_object: np.ndarray, model: object) -> np.array
,这会调用您的model.predict()
函数并返回预测
然后,它调用output_fn(prediction: np.array, accept: str)
从predict_fn
中获取结果并将其编码为accept
类型
您不需要自己实现所有这些函数,因为有默认值
您确实需要实现model_fn
只有在具有非数字数据时才需要实现input_fn
仅当您的模型使用.predict()
以外的其他内容时,才需要实现predict_fn
您可以在此处查看默认函数实现的工作原理