seldon core
KFServing 对 Seldon Core 的 DAG 推理图进行了简化。KFServing 只支持 Transformer,Predicator。在实现上,KFServing 因为进行了简化,所以不再需要 Seldon Core 中的 Engine 这一角色。请求在 Transformer 和 Predicator 间的转发由 SDK 负责。
Seldon Core 对用户代码的侵入性非常低。用户只需要提供对应的 HTTP/gRPC Endpoint 来提供服务就可以,而不需要引用 Seldon Core 的 SDK。因为组合各个请求的职责不是由用户代码负责,而是由 Engine 执行。而在 KFServing 中,用户如果想实现自己的预处理的逻辑,需要引用 KFServing 的 SDK,这就是因为缺失了 Engine,导致转发的逻辑要利用 SDK 来实现。
下面是一个例子。可以看到这一例子中引用了 kfserving
这一个包,同时定义了两个命令行参数。这都是为了要实现转发而做的妥协。当 Transformer 预处理好后,会直接转发给命令行参数中传来的 predictor_host
。这里的 predictor_host
是 InferenceService 中定义的 Predicator 的服务地址。
import kfserving import argparse from .image_transformer import ImageTransformer DEFAULT_MODEL_NAME = "model" parser = argparse.ArgumentParser(parents=[kfserving.kfserver.parser]) parser.add_argument('--model_name', default=DEFAULT_MODEL_NAME, help='The name that the model is served under.') parser.add_argument('--predictor_host', help='The URL for the model predict function', required=True) args, _ = parser.parse_known_args() class ImageTransformer(kfserving.KFModel): def __init__(self, name: str, predictor_host: str): super().__init__(name) self.predictor_host = predictor_host self._key = None def preprocess(self, inputs: Dict) -> Dict: if inputs['EventType'] == 's3:ObjectCreated:Put': bucket = inputs['Records'][0]['s3']['bucket']['name'] key = inputs['Records'][0]['s3']['object']['key'] self._key = key client.download_file(bucket, key, '/tmp/' + key) request = image_transform('/tmp/' + key) return {"instances": [request]} raise Exception("unknown event") def postprocess(self, inputs: Dict) -> Dict: logging.info(inputs) index = inputs["predictions"][0]["classes"] logging.info("digit:" + str(index)) client.upload_file('/tmp/' + self._key, 'digit-'+str(index), self._key) return inputs if __name__ == "__main__": transformer = ImageTransformer(args.model_name, predictor_host=args.predictor_host) kfserver = kfserving.KFServer() kfserver.start(models=[transformer])
参考:
https://zhuanlan.zhihu.com/p/145143582
posted on 2021-12-10 14:32 MissSimple 阅读(244) 评论(0) 编辑 收藏 举报