erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...
機器之心發(fā)布
機器之心編輯部
百度飛槳的 Paddle Serving 能夠實現(xiàn)服務器端快速部署,最近,隨著飛槳更新到 1.7 版本,Paddle Serving 也有了新變化。更新后的 Paddle Serving 有哪些改進?能給用戶帶來多大程度的生產(chǎn)力提升?本文將帶你一睹為快。古人云:行百里者半九十。相信在深度學習領域中,不少做算法的小伙伴都會對這句話產(chǎn)生共鳴。辛辛苦苦搭建好網(wǎng)絡,望眼欲穿得訓練調(diào)試好模型,等到最后要部署,面對紛繁復雜的實際部署環(huán)境時,才發(fā)現(xiàn)原來終極大魔王在這里!當然這個魔王不會喊打喊殺,但他會給你出難題,情景可能是這樣的:在此緊要關頭,是否有什么捷徑幫助小伙伴順利通關呢?這個真的可以有,那就是國內(nèi)最早開源開放、功能完備的開源深度學習平臺飛槳所提供的 Paddle Serving 功能。Paddle Serving 是飛槳的服務化部署框架,長期目標就是為人工智能落地的最后一公里提供越來越專業(yè)、可靠、易用的服務。隨著飛槳開源框架推出最新的 1.7 版本,Paddle Serving 的最新版本也閃亮登場。有了它,和魔王的對話情景就要變一變啦!Paddle Serving 真的那么好嗎?當然!Paddle Serving 秉承模型即服務(Model As A Service,MAAS)的理念,全面打通并自動化飛槳訓練框架與 Paddle Serving 的銜接流程,讓用戶在使用飛槳成功完成模型訓練的那一刻,收獲的不再只是模型,而是同時擁有了該模型的推理服務,使用戶能夠在幾分鐘內(nèi)將模型轉化為一個可以在服務器端部署的遠程服務。總的來說,Paddle Serving 具有如下四大特點:簡單易用:為了讓使用飛槳的用戶能夠以極低的成本部署模型,Paddle Serving 設計了一套與飛槳開源框架無縫打通的預測部署 API。對于不需要較為復雜的數(shù)據(jù)預處理過程的普通模型來說,每一位模型算法工程師僅使用一行命令就可以輕松部署自己的模型服務。
工業(yè)可用:為了達到工業(yè)級深度學習模型在線部署的要求,Paddle Serving 提供很多大規(guī)模場景需要的部署功能:
分布式稀疏參數(shù)索引功能。
高并發(fā)底層通信能力。
模型管理、在線 A/B 流量測試、模型熱加載。
功能擴展:當前 Paddle Serving 支持 C++、Python、Golang 的客戶端,未來也會面向不同類型的客戶新增多種語言的客戶端。在 Paddle Serving 的框架設計方面,盡管當前版本以支持飛槳模型的部署為核心功能,但是用戶也可以很容易嵌入其它的機器學習庫部署在線預測服務。
高性能引擎支持:飛槳的 Paddle Inference 原生推理庫作為當前 Paddle Serving 唯一支持的后端推理引擎,具備諸多高性能的特性,例如內(nèi)存/顯存復用、算子自動融合、TensorRT 子圖以及 Paddle Lite 子圖自動調(diào)用等功能。Paddle Serving 從客戶端請求到服務端計算的整體流程如圖 1 所示,整個底層通信都采用了高并發(fā)、低延時的 Baidu-RPC 服務,支撐深度學習模型在線部署的整個流程,使其性能進一步提高。
tar?-xzf?uci_housing.tar.gz
作為服務端計算機環(huán)境中需要提前安裝有 Paddle Serving 功能的 paddle_serving_server 模塊,如果沒有安裝,則可以根據(jù)硬件環(huán)境使用選擇其中一行命令安裝。pip?install?paddle_serving_server??//在CPU環(huán)境上安裝paddle_serving_server
pip?install?paddke_serving_server_gpu???//在GPU環(huán)境上安裝paddle_serving_server
下面見證奇跡的時候到了!請看一鍵啟動模型推理服務:python?-m?paddle_serving_server.serve?--model?uci_housing_model/?--thread?10?--port?9292?--name?uci
其中各個參數(shù)的含義如下:
model:Server 端配置與模型文件所在目錄。
thread:Server 端線程數(shù)。
port:Server 端預測服務端口號。
name:HTTP 預測服務的的名稱,如果不指定 name,則會啟動 RPC 預測服務。
線上推理服務部署成功后,本例中的 url 格式為「http://127.0.0.1:9292/uci/prediction」。需要使用推理服務的用戶可以通過 HTTP 協(xié)議將輸入數(shù)據(jù)以如下報文的格式發(fā)送給服務端。服務端在計算出結果后,會將推理出的價格返回給用戶。curl?-H?"Content-Type:application/json"?-X?POST?-d?'{"x":?[0.0137,?-0.1136,?0.2553,?-0.0692,?0.0582,?-0.0727,?-0.1583,?-0.0584,?0.6283,?0.4919,?0.1856,?0.0795,?-0.0332],?"fetch":["price"]}'?http://127.0.0.1:9292/uci/prediction
模型的保存方法請參見:https://github.com/PaddlePaddle/Serving/blob/a4d478d79e120229572bcd56a001688bd7e07b94/doc/SAVE.md上面的操作方法適用于一些不需要較為復雜的數(shù)據(jù)預處理過程的普通模型,也就是輸入數(shù)據(jù)可以直接被使用進行推理計算的模型。那么對于一些需要預處理的模型,Paddle Serving 有應對之法么?其實很簡單。一般咱們自己搞不定的事情會怎么處理呢?找朋友幫忙唄,一個好漢三個幫嘛!我們可以為服務端再配個朋友——客戶端。讓客戶端將輸入數(shù)據(jù)預處理為服務端可以讀取的形式。可能有人會問:「多了一個客戶端,那操作會不會變得復雜呢?」嚴格的說,只是多了幾個步驟,相信 10 分鐘還是可以搞定的!下面我們就以 Bert As Service 業(yè)務為例,看看如何在十分鐘之內(nèi)將它部署上線!十分鐘構建 Bert As ServiceBert As Service 是 Github 社區(qū)比較火爆的代碼庫,其目標是給定輸入一個句子,推理服務可以將句子表示成一個語義向量返回給客戶端。Bert 模型是目前 NLP 領域比較熱門的模型,在多種公開的 NLP 任務上都取得了很好的效果。如果使用 Bert 模型計算出的語義向量作為其他 NLP 模型的輸入,這將對提升模型的表現(xiàn)有很大的幫助。所以可以想象如果你成功部署一臺可以對外提供 Bert As Service 服務的服務器,那么你一定會很快成為社區(qū)中最靚的仔!。為了實現(xiàn)這個目標,你僅需要四個步驟就可以使用 Paddle Serving 花十分鐘部署上線一個這樣的服務。1.保存可服務模型Paddle Serving 支持基于飛槳訓練的各種模型,并通過指定模型的輸入和輸出變量來保存可服務模型。為了便于演示,我們從飛槳的預訓練模型應用工具 PaddleHub 中加載一個已經(jīng)訓練好的 Bert 中文模型「bert_chinese_L-12_H-768_A-12」,并利用如下代碼將該模型及相關配置文件保存為可以用于部署服務的格式。其中服務端和客戶端的配置分別放在「bert_seq20_model」和「bert_seq20_client」文件夾中。import?paddlehub?as?hub
model_name?=?"bert_chinese_L-12_H-768_A-12"
#獲取模型文件
module?=?hub.Module(model_name)
#獲取模型的輸入輸出信息以及program
inputs,?outputs,?program?=?module.context(
????trainable=True,?max_seq_len=20)
#將輸入輸出的名稱與模型中的輸入輸出變量一一映射
feed_keys?=?["input_ids",?"position_ids",?"segment_ids",
?????????????"input_mask",?]
fetch_keys?=?["pooled_output",?"sequence_output"]
feed_dict?=?dict(zip(feed_keys,?[inputs[x]?for?x?in?feed_keys]))
fetch_dict?=?dict(zip(fetch_keys,?[outputs[x]?for?x?in?fetch_keys]))
#保存serving需要的模型與配置文件,參數(shù)1是server端模型與配置文件保存的目錄,參數(shù)2是client端配置文件保存的目錄,參數(shù)3是輸入dict,參數(shù)4是輸出dict,參數(shù)5是模型的program
import?paddle_serving_client.io?as?serving_io
serving_io.save_model("bert_seq20_model",?"bert_seq20_client",
??????????????????????feed_dict,?fetch_dict,?program)
2.啟動服務端在服務端的計算機上使用如下命令啟動服務,其中 gpu_ids 表示 GPU 索引號。python?-m?paddle_serving_server_gpu.serve?--model?bert_seq20_model?--thread?10?--port?9292?--gpu_ids?0
當返回如下信息時則表示服務端啟動成功。Server[baidu::paddle_serving::predictor::general_model::?GeneralModelServiceImpl]?is?serving?on?port=9292.
3.配置客戶端數(shù)據(jù)預處理邏輯Paddle Serving 擁有針對多個經(jīng)典數(shù)據(jù)集的數(shù)據(jù)預處理模塊,對于本示例的中文 Bert 語義表示的計算,我們采用 paddle_serving_app 下的 ChineseBertReader 類對數(shù)據(jù)作預處理操作,這樣開發(fā)者可以很容易獲得一個原始中文句子所對應的語義向量,用于作為推理服務模型的輸入。安裝 paddle_serving_app 的方法如下所示。pip?install?paddle_serving_app
4.配置客戶端訪問服務器獲取推理結果import?os
import?sys
from?paddle_serving_client?import?Client
from?paddle_serving_app?import?ChineseBertReader
#定義數(shù)據(jù)預處理reader
reader?=?ChineseBertReader()
#指定要獲取的預測結果
fetch?=?["pooled_output"]
#指定server端地址
endpoint_list?=?["127.0.0.1:9292"]
#定義client類
client?=?Client()
#加載client配置文件
client.load_client_config("bert_seq20_client/serving_client_conf.prototxt")
#連接server端
client.connect(endpoint_list)
#從標準輸入讀取數(shù)據(jù),發(fā)送給server端,并打印結果
for?line?in?sys.stdin:
????feed_dict?=?reader.process(line)
????result?=?client.predict(feed=feed_dict,?fetch=fetch)
????print(result)
將需要推理中文句子制作成 txt 文件,例如 data.txt。然后運行腳本訪問服務器,即可獲取推理結果。cat?data.txt?|?python?bert_client.py
Bert As Service 示例相關的腳本請參見:https://github.com/PaddlePaddle/Serving/tree/develop/python/examples/bert部署后吞吐性能大幅領先功能怎么樣,數(shù)據(jù)說了算!吞吐性能是對相同線上服務部署質(zhì)量的重要評價指標。在 4 塊 NVIDIA Tesla V100 上對基于 Paddle Serving 部署的 Bert As Service 進行性能測試,并與基于業(yè)界同類最優(yōu)產(chǎn)品實現(xiàn)的 Bert As Service 做比對。在采用了相同的 batch size 和并發(fā)數(shù)的條件下,其比對數(shù)據(jù)結果如圖 2 所示,使用 Paddle Serving 部署的服務的吞吐性能大幅領先,batch size 為 128 的請況下,吞吐率超出 58.3%!圖 2 Paddle Serving 性能壓力測試吞吐量示意圖此外,如下表所示,飛槳的工程師們還提供了多個其它任務領域的模型推理服務示例以及性能分析的工具。歡迎各位小伙伴根據(jù)自己的需求下載使用。性能可視化工具 TimelinePaddle Serving 支持性能可視化工具 Timeline,該工具可以查看客戶端啟動后各個進程的各階段 timeline。以 Bert As Service 服務為例,Timeline 可視化后的結果如圖 3 所示,其中 bert_pre 代表客戶端的數(shù)據(jù)預處理階段,client_infer 代表客戶端完成預測請求的發(fā)送和接收結果的階段,每個進程的第二行展示的是服務端各個算子的 timeline。通過 Timeline 用戶可以很容易發(fā)現(xiàn)預估服務在各個環(huán)節(jié)的耗時,有的放矢的優(yōu)化預估流程。針對 Bert 這樣的熱門模型,在接下來的版本中,Paddle Serving 還會在 paddle_serving_app 中持續(xù)開放新的高性能預處理 reader 接口。圖 3 Timeline 性能可視化工具界面效果圖Timeline 的使用方法請參見:https://github.com/PaddlePaddle/Serving/tree/develop/python/examples/util寫在最后Paddle Serving 是面向社區(qū)用戶的核心訴求進行打造,在易用性方面相比此前的版本有了大幅度提升,用戶甚至不需要掌握多深厚的飛槳相關知識即可使用 Paddle Serving 部署模型推理服務,極大的提升了部署效率。Paddle Serving 會在接下來的版本中繼續(xù)降低用戶的使用門檻,提供更多語言類型的客戶端,以及 Kubernetes 部署的相關組件,開放更多能夠開箱即用的模型,敬請關注!如果您加入官方 QQ 群,您將遇上大批志同道合的深度學習同學。官方 QQ 群:703252161。如果您想詳細了解更多飛槳的相關內(nèi)容,請參閱以下文檔。
官網(wǎng)地址:https://www.paddlepaddle.org.cn
飛槳 Paddle Serving 項目地址:https://github.com/PaddlePaddle/Serving/tree/v0.2.0
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee: https://gitee.com/paddlepaddle/Paddle
總結
以上是生活随笔為你收集整理的erwin模型怎么保存_一行命令启动,十分钟内完成部署,Paddle Serving开放模型即服务功能...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql not in语句_MySQL
- 下一篇: mapreduce编程规范_大数据之Ma