Bert Service

    什么是Bert Service

    Bert Service是基于框架的快速部署模型远程计算服务方案,可将获取embedding的过程通过调用API接口的方式实现,减少了对机器资源的依赖。使用PaddleHub可在服务器上一键部署Bert Service服务,在另外的普通机器上通过客户端接口即可轻松的获取文本对应的embedding数据。

    整体流程图如下:

    Bert Service的特点

    使用Bert Service能够帮助开发者在限制性较强的环境中有效获取embedding,常用于以下情景:

    • 算力有限的集群环境中,可利用一台或几台高性能机器部署Bert Service服务端,为全部机器提供在线embedding功能。

    • 实际的生产服务器不适宜承担大批量embedding工作,通过API接口可减少资源占用。

    • 专注下游深度学习任务,可利用PaddleHub的Bert Service大幅减少embedding代码。

    Bert Service具有几个突出的优点:

    • 代码精短,易于使用。简单的pip安装方式,服务端仅需一行命令即可启动,客户端仅需一行代码即可获取embedding结果。

    • 更高性能,更高效率。通过Paddle AnalysisPredictor API对模型的计算图进行优化,提升了计算速度并减小了显存占用。

    • 随”机”应变,灵活扩展。可根据机器资源选择不同数量的服务端,并根据实际需求快速、灵活地进行增减,同时支持各张显卡执行不同的模型计算任务。

    • 删繁就简,专注任务。Bert Service基于PaddlePaddle和PaddleHub开发,将模型的下载和安装等管理工作交由PaddleHub,开发者可以专注于主要任务,还可以无缝对接PaddleHub继续进行文本分类、序列标注等下游任务。

    使用Bert Service搭建服务主要分为下面三个步骤:

    Step1:准备环境

    环境要求

    下表是使用Bert Service的环境要求,带有*号标志项为非必需依赖,可根据实际使用需求选择安装。

    安装步骤

    a) 安装PaddlePaddle,利用pip下载CPU版本命令如下。GPU版本、Docker方式安装等其他更具体的安装过程见开始使用PaddlePaddle

    b) 安装PaddleHub

    1. $ pip install paddlehub
    1. $ pip install paddle-gpu-serving

    d) client端,需另外安装ujson

    1. $ pip install ujson

    目前Bert Service支持的语义模型如下表,可根据需要选择模型进行部署embedding服务,未来还将支持更多模型。

    简介

    server端接收client端发送的数据,执行模型计算过程并将计算结果返回给client端。

    server端启动时会按照指定的模型名称从PaddleHub获取对应的模型文件进行加载,无需提前下载模型或指定模型路径,对模型的管理工作由PaddleHub负责。在加载模型后在指定的端口启动BRPC服务,保持端口监听,当接收到数据后便执行模型计算,并将计算结果通过BRPC返回并发送至client端。

    启动

    使用PaddleHub的命令行工具可一键启动,命令如下:

    1. $ hub serving start bert_service -m ernie_tiny -p 8866 --use_gpu --gpu 0

    启动成功则显示

    1. Server[baidu::paddle_serving::predictor::bert_service::BertServiceImpl] is serving on port=8866.

    整个启动过程如下图:

      启动BS

    其中各参数说明如下表:

    关闭

    通过在启动服务端的命令行页面使用Ctrl+C终止Bert Service运行,关闭成功则显示:

    Step3:启动客户端(client)

    简介

    client端接收文本数据,并获取server端返回的模型计算的embedding结果。

    client端利用PaddleHub的语义理解任务将原始文本按照不同模型的数据预处理方案将文本ID化,并生成对应的sentence type、position、input masks数据,将这些信息封装成json数据,通过http协议按照指定的IP端口信息发送至server端,等待并获取模型生成结果。

    服务端类BSClient初始化方法原型为:

    1. BSClient.__init__(self,
    2. server,
    3. max_seq_len=20,
    4. show_ids=False,
    5. do_lower_case=True,
    6. retry=3)
    7. # 获取embedding方法原型为
    8. BSClient.get_result(self, input_text)

    其中各参数说明如下表:

    在这里,我们将展示一个实际场景中可能使用的demo,我们利用PaddleHub在一台GPU机器上部署ernie_tiny模型服务,并在另一台CPU机器上尝试访问,获取一首七言绝句的embedding。

    Step1:安装环境依赖

    首先需要安装环境依赖,根据第2节内容分别在两台机器上安装相应依赖。

    Step2:启动Bert Service服务端

    1. $ hub serving start bert_service -m ernie_tiny --use_gpu --gpu 0 --port 8866

    启动成功后打印

    1. Server[baidu::paddle_serving::predictor::bert_service::BertServiceImpl] is serving on port=8866.

    这样就启动了的在线服务,监听8866端口,并在0号GPU上进行任务。

    Step3:使用Bert Service客户端进行远程调用

    部署好服务端后,就可以用普通机器作为客户端测试在线embedding功能。

    首先导入客户端依赖。

    1. from paddlehub.serving.bert_serving import bs_client

    接着启动并初始化bert service客户端BSClient(这里的server为虚拟地址,需根据自己实际ip设置)

    1. bc = bs_client.BSClient(module_name="ernie_tiny", server="127.0.0.1:8866")

    然后输入文本信息。

    最后利用客户端接口get_result发送文本到服务端,以获取embedding结果。

    1. result = bc.get_result(input_text=input_text)

    这样,就得到了embedding结果(此处只展示部分结果)。

    1. [[0.9993321895599361, 0.9994612336158751, 0.9999646544456481, 0.732795298099517, -0.34387934207916204, ... ]]

    客户端代码demo文件见。
    运行命令如下:

    1. $ python bert_service_client.py

    运行过程如下图:

      

    Step4:关闭Bert Service服务端

    如要停止Bert Service服务端程序,可在其启动命令行页面使用Ctrl+C方式关闭,关闭成功会打印如下日志:

    1. Paddle Inference Server exit successfully!

    这样,我们就利用一台GPU机器就完成了Bert Service的部署,并利用另一台普通机器进行了测试,可见通过Bert Service能够方便地进行在线embedding服务的快速部署。

    预训练模型一键服务部署

    除了Bert Service外,PaddleHub Serving还具有预训练模型一键服务部署功能,能够将预训练模型快捷部署上线,对外提供可靠的在线预测服务,具体信息请参见Module Serving

    Q : 如何在一台服务器部署多个模型?
    A : 可通过多次启动Bert Service,分配不同端口实现。如果使用GPU,需要指定不同的显卡。如同时部署erniebert_chinese_L-12_H-768_A-12,分别执行命令如下:

    1. $ hub serving start bert_service -m ernie -p 8866

    Q : 启动时显示”Check out in web browser.”,这个页面有什么作用。
    A : 这是BRPC的内置服务,主要用于查看请求数、资源占用等信息,可对server端性能有大致了解,具体信息可查看BRPC内置服务