使用modelarts部署bert命名实体识别模型

模型部署介绍

当我们通过深度学习完成模型训练后,有时希望能将模型落地于生产,能开发API接口被终端调用,这就涉及了模型的部署工作。Modelarts支持对tensorflow,mxnet,pytorch等模型的部署和在线预测,这里老山介绍下tensorflow的模型部署。

模型部署的工作实际上是将模型预测函数搬到了线上,通常一个典型的模型预测流程如下图所示:

模型部署时,我们需要做的事情如下:

  1. 用户的输入输出使用config.json文件来定义;

  2. 预处理模块和后处理模块customize_service.py通过复写TfServingBaseService模块的相关函数来实现;

  3. tensorflow模型需要改写成savedModel模型;

  4. tensorflow模型本身作为一个黑盒子,不需关心也无法关心,也就是说你无法在服务启动后对计算图增加节点了。

由于模型部署是在模型预测的基础上重新定义的,所以如果模型已经写好了预测的函数,我们就很方便的通过改写程序来进行模型部署工作。

下面便介绍下在modelarts部署bert模型的流程。

savedModel模型生成

本文部署的模型是在华为云 ModelArts-Lab AI实战营第七期的基础上的,请大家重走一遍案例,但务必记得,与案例不同的是,开发环境请选择Tensorflow 1.8,中间有段安装tensorflow 1.11的代码也请跳过。这是因为在本文成文时,modelarts暂时只支持tensorflow 1.8的模型。本章节的所有代码都在modelarts的notebook上完成。

执行完案例后,在./ner/output路径下有训练模型的结果,但这模型还不能直接用于Tensorflow Serving,我们必须先把他转成savedModel模型。

我们先找到./ner/src/terminal_predict.py文件,直接找到预测用的主函数(为了阅读方便,略去了不关注的代码)。

def predict_online():
   global graph
   with graph.as_default():
  # ...bala bala nosense
           # ------用户输入
           sentence = str(input())
   # nosence again
               # ------------前处理
               sentence = tokenizer.tokenize(sentence)
               input_ids, input_mask, segment_ids, label_ids = convert(sentence)
               feed_dict = {input_ids_p: input_ids,
                            input_mask_p: input_mask}
               # run session get current feed_dict result
               # -------------使用模型(黑盒子)
               pred_ids_result = sess.run([pred_ids], feed_dict)
               # -------------后处理
               pred_label_result = convert_id_to_label(pred_ids_result, id2label)
               result = strage_combined_link_org_loc(sentence, pred_label_result[0]) # 输出被这个函数封装了
   # something useless

在模型使用这块,程序使用了sess这个tf.Session的实例作为全局变量调用,在程序不多的执行代码中,可以看到主要是做了重构模型计算图。

graph = tf.get_default_graph()
with graph.as_default():
   print("going to restore checkpoint")
   #sess.run(tf.global_variables_initializer())
   # -----定义了模型的两个输出张量
   input_ids_p = tf.placeholder(tf.int32, [batch_size, max_seq_length], name="input_ids")
   input_mask_p = tf.placeholder(tf.int32, [batch_size, max_seq_length], name="input_mask")

   bert_config = modeling.BertConfig.from_json_file(os.path.join(bert_dir, 'bert_config.json'))
   # ----定义了模型的输
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值