sentence-transformer在TorchServe的应用&如何自定义handler(custom handler)

系列文章目录


前言

本文是关于sentence-transformer在TorchServe的应用&如何自定义handler(custom handler)

一、TorchServe必安包&环境

- pip install torchserve torch-model-archiver torch-workflow-archiver
- pip install captum(if you wanna explain your prediction, it’s mandatory)
- JDK version is 11

二、torch-model-archiver将模型转成.mar文件

1.使用torch-model-archiver

首先展示个torch-model-archiver样例,运行了这个代码,就将我的模型.bin文件转成了.mar文件

torch-model-archiver --model-name CrossForControl --version 1.0 --serialized-file Transformer_model/pytorch_model.bin --handler ./Transformer_handler_generalized.py --extra-files "./extra_files" -f --export-path model_store --requirements-file ./requirements.txt

解释下各个参数的含义

先从简单的讲解

  1. —model_name 就是指定.mar文件的文件名

  2. —version 就是设定模型的版本,后面推理接口的URL里可以指定version

  3. —serialized-file 就是我们模型的路径,只需要指定.bin文件即可或者.pth

  4. —export-path 就是.mar导出的路径

  5. –requirements-file 就是我们要用到一些torchserve不包括的额外的包,比如我的模型是sentence-transformer中的cross-encoder,sentence-transforme包在torchserve默认的安装包目录里是没有的,我需要在requirements.txt里指定sentence-transformer在这里插入图片描述

  6. —extra-files 这个参数就有说道了,如果大家理解hugging_face的模型,会知道除了pytorch_model.bin模型外,还有vocab.txt,config.json等等额外的文件,这些文件用来生成模型tokenizer或指定模型architecture,都是我们加载模型时的必要的文件。所以我们要把这些文件都通过这个—extra-files 传给torchserve。有的时候要额外传输的文件很多,可以将额外的文件放在同一个文件夹里,在—extra-files后加-f来循环我们的文件夹。在这里插入图片描述
    setup_config.json在我们自定义的handler中负责初始化模型。后面介绍custom handler再说。
    在这里插入图片描述

index_to_name.json 是推理时,有的模型比如QuestionAnswer,返回了答案库里和问题最接近的前三个答案的索引,返回索引是不够的,通常需要将索引对应的答案字符串返回才是客户想要的。就通过这个文件就可以做到。在这里插入图片描述

  1. –handler 就是输入我们自定义handler的路径

2.如何自定义使用我们自己的handler

我这个自定义的handler主要是参考的reference中的第二个链接。
Provide a custom script to:
    * Initialize the model instance when you run torch-model-archiver 
    * Pre-process input data before it is sent to the model for inference or Captum explanations when you 
    * Customize how the model is invoked for inference or explanations
    * Post-process output from the model before sending back a response
	Following is applicable to all types of custom handlers
    * data - The input data from the incoming request
    * context - Is the TorchServe context. You can use following information for customization model_name, model_dir, manifest, batch_size, gpu etc.
    * 

首先custom handler简单的可以一共分为四步(如果需要对模型进行解释,那更复杂一些):

  1. 初始化阶段-在这一步加载我们的模型,其中需要传入参数context,那什么是context,context怎么设定的

    • context - Is the TorchServe context. You can use following information for customization model_name, model_dir, manifest, batch_size, gpu etc
      在这里插入图片描述
    • 我在initial函数里加入的代码,就是简单的加载模型在这里插入图片描述
  2. 加载模型后,是读取数据,在preprocess函数实现,其中数据通过request传进来,这一步通常还对传入的数据tokenize,但是我并没有tokenize。在这里插入图片描述

  3. 数据进来后,那么就可以推理了,通过inference函数实现。我得到模型的预测结果,并选取分值前三的答案,其中的self.mapping就是前文index_to_name.json的字典,再将index转成对应的字符串,最终将前三结果转成字符串的格式,放在inferences列表里返回(其实这些步骤可以在postprocess函数里实现更标准),另外要注意返回的话,如果是字典会报错,所以我改成了字符串,并放在列表里。在这里插入图片描述

  4. 最后就可以跑torch-archiver的命令了,也就是文章一开始那个例子,生成.mar文件

torch-model-archiver --model-name CrossForControl --version 1.0 --serialized-file Transformer_model/pytorch_model.bin --handler ./Transformer_handler_generalized.py --extra-files "./extra_files" -f --export-path model_store --requirements-file ./requirements.txt

3.启动tochserve

  • 启动tochserve的命令
    torchserve --start --model-store model_store --models my_tc=CrossForControl.mar --ncs
    其中–model-store 是the location where your .mar file

  • 关闭torchserve的命令
    torchserve —stop

  • 访问预测API的命令
    curl -X POST http://127.0.0.1:8080/predictions/my_tc -T ./data/sample_text.txt
    sample_text是我传入的question和answer bank,我的应用背景类似问答,大家如果场景不同,可以去官网的example里看看,下面有链接。
    我的sample_text

  • Check if torchserve run successfully
    http://localhost:8080/ping

  • Management api
    http://localhost:8081/models

4.Reference

1.https://github.com/pytorch/serve/tree/master/model-archiver
2.https://github.com/pytorch/serve/blob/master/examples/Huggingface_Transformers/Transformer_handler_generalized.py
3.https://github.com/pytorch/serve/blob/master/docs/custom_service.md
4.https://github.com/pytorch/serve/blob/master/docs/inference_api.md
5.https://github.com/pytorch/serve/blob/master/docs/configuration.md


总结

花了2天研究的torchserve,现在也是刚刚入门,写个文章做个记录,其中踩了个坑,这个坑差不多是bert模型的文件夹里还有个pool池化层的子文件夹,将这个子文件夹作为extra_files上传的时候,池化层的子文件貌似被放到了bert模型的主文件夹路径下,导致torchserve加载这个模型一直失败,现在也没有解决,后续解决了,更新下文章。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值