🍎 torchserve调试

# Handler程序的独立调试 开发过程中,朴素的调试过程是: 1. 修改源代码 2. 重新使用torch-model-archiver进行打包 3. 重启torchserve服务 4. 重新调用查看结果 过程繁琐,耗时较长,Handler独立调试程序可以做到在python程序内进行调试,模拟torchserve的启动过程。 ## Handler.py Handler.py程序是以torchserve框架部署必不可少的关键。 在torchserve运行时,Handler.py的内容只有一个类,不允许出现在class之外出现额外的代码,比如说`argparse`, `__name__=="__main__"`, 等调试代码。 下面是Handler.py的大致框架 ```python class ExampleHandler(BaseHandler): def initialize(self, context): # 各种各样的准备工作,核心就是将模型加载进来 ... self.model = model def preprocess(self, video_lists:list): # 前处理 ... return video_arrays def inference(self, video_arrays:list, *args, **kwargs): # 推理过程 results = [] for video_array in video_arrays: result = self.model(video_array) results.append(result) return results def postprocess(self, results:list): # 后处理 ... return {"type":"...", "results":...} def handle(self, input, context): # 前处理,推理,后处理的组合 ... return results ``` ## 调试程序 在Handler.py里面的类下,可以加上下面的代码,模拟torchserve的过程。 >i 使用此方法需要以pip的方式安装torchserve 为了统一效果,`pip install torchserve==0.4.2`,如果安装过高版本的,会出现nvgpu这个包,然后出现奇奇怪怪不了解的错误。 ```python if __name__ == '__main__': from ts.torch_handler.unit_tests.test_utils.mock_context import MockContext # =====和torch-model-archiver类似===== context = MockContext(model_pt_file='best.pth', model_dir='./', model_file='model.py', gpu_id='0', model_name="model") handler = PlantHandler() handler.initialize(context) # =====设置输入数据===== with open('a.jpg', 'rb') as f: image_bytes = fin.read() # =====torchserve要求以[{"":"",...},...]的形式传入===== test_data = [{'data': image_bytes}] * 2 results = handler.handle(test_data, context) print(results) ```