前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用 TFX 将官方 BERT 模型运行为基于Docker的RESTful服务

如何使用 TFX 将官方 BERT 模型运行为基于Docker的RESTful服务

作者头像
段清华DEAN
修改2023-09-21 14:27:28
1.5K0
修改2023-09-21 14:27:28
举报
文章被收录于专栏:AI工程

如何使用 TFX 将官方 BERT 模型运行为基于Docker的RESTful服务

TFX即TensorFlow Extended是官方提供的部署方案(https://www.tensorflow.org/tfx

它可以很方便的把已经保存了的TensorFlow有其实TF2的模型,转变为可用的服务,并提供一定的性能保障。

下文以如何将官方的中文BERT模型部署为RESTFul服务为例

下载官方bert分词器

代码语言:javascript
复制
$ wget https://raw.githubusercontent.com/tensorflow/models/master/official/nlp/bert/tokenization.py

下载官方中文bert模型(TF2版本)

代码语言:javascript
复制
$ wget -O 1.tar.gz https://tfhub.dev/tensorflow/bert_zh_L-12_H-768_A-12/1?tf-hub-format=compressed

解压模型到当前目录bert/1的路径

代码语言:javascript
复制
$ mkdir bert
$ mkdir bert/1
$ cd bert/1/
$ tar xvzf ../../1.tar.gz
$ cd ../..

启动Docker镜像,开启RESTful服务。

以下命令中:

  • -p 为将Docker内部的8501端口映射到主机的8500端口
  • -v 是把当前路径下的bert目录,映射为容器中的/models/bert陌路
  • -e 为设置一个环境变量,告诉TFX当前的模型名
  • -it 为一次性交互型运行,如果是服务可以写 -d
代码语言:javascript
复制
$ docker run \
  -p 8500:8501 \
  -v ${PWD}/bert:/models/bert \
  -e MODEL_NAME=bert \
  -it tensorflow/serving

用CURL进行预测测试

代码语言:javascript
复制
$ curl -XPOST http://localhost:8500/v1/models/bert:predict \
  -H 'content-type: application/json' \
  -d '{
  "instances": [
    {
      "input_word_ids": [1, 1, 1],
      "input_mask": [1, 1, 1],
      "input_type_ids": [0, 0, 0]
      }
  ]
}'

Python的测试

代码语言:javascript
复制
import requests
import numpy as np
import tensorflow_hub as hub
import tokenization

# 下面这部分主要是为了加载分词器
bert_layer = hub.KerasLayer('./bert/1')
vocab_file = bert_layer.resolved_object.vocab_file.asset_path.numpy()
do_lower_case = bert_layer.resolved_object.do_lower_case.numpy()
tokenizer = tokenization.FullTokenizer(vocab_file, do_lower_case)

# 句子转换
sent1 = tokenizer.convert_tokens_to_ids(tokenizer.tokenize('你好啊'))
sent2 = tokenizer.convert_tokens_to_ids(tokenizer.tokenize('奥嗷嗷'))

# RESTful调用
url = 'http://localhost:8500/v1/models/bert:predict'
data = {
    "instances": [
        {
            "input_word_ids": sent1,
            "input_mask": [1] * len(sent1),
            "input_type_ids": [0] * len(sent1)
        },
        {
            "input_word_ids": sent2,
            "input_mask": [1] * len(sent2),
            "input_type_ids": [0] * len(sent2)
        },
    ]
}
r = requests.post(url=url, json=data)

# pool 句子聚合的结果,即 [CLS] 的结果
# (2, 768)
r2 = [
    x['bert_model']
    for x in r.json().get('predictions')
]

# sequence 句子序列的结果
# (2, 3, 768)
r1 = [
    x['bert_model_1']
    for x in r.json().get('predictions')
]

r1 = np.array(r1)
r2 = np.array(r2)
print(r1.shape, r2.shape)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何使用 TFX 将官方 BERT 模型运行为基于Docker的RESTful服务
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档