predictionIO調(diào)研

做算法訓(xùn)練 如果了解套路后,其實(shí)就那些步驟,當(dāng)我們?nèi)绻氚涯P桶l(fā)布成為服務(wù),這就是工程學(xué)的內(nèi)容,model serving,從現(xiàn)在來看 把模型部署成服務(wù) 接受前端實(shí)時(shí)請求調(diào)用預(yù)測,其實(shí)就跟 后端查數(shù)據(jù)庫有點(diǎn)類似。模型訓(xùn)練簡單 ,部署成服務(wù)還真不太容易。模型調(diào)參 特征工程 rawdata convert to vector ,模型熱部署 模型切換 模型定時(shí)調(diào)參 模型的存儲 模型的版本控制 模型的特征存儲 多個(gè)模型同時(shí)發(fā)布服務(wù) 同時(shí)在線做預(yù)測 ,多種算法切換和集成 串行 并行,模型的監(jiān)控 跟蹤 預(yù)測請求的存儲和監(jiān)控 效果監(jiān)控,在線的訓(xùn)練 并發(fā)請求 抗壓性能等等,所以你看其實(shí)挺不簡單的。

接著我們調(diào)研了看市面上有沒有像樣的model serving的開源工具,當(dāng)然我之前對predictionio 有印象 ,其實(shí)還有其他的
然后 開始調(diào)研 preditionio ,查看他官網(wǎng)的英文文檔,我發(fā)現(xiàn)毫無標(biāo)準(zhǔn) 目標(biāo)的看 官方tutorial ,其實(shí)效率蠻低的,看完就忘記了,后來和leader 溝通,就咨詢他對于 他想要的model serving 要達(dá)到哪些指標(biāo) 哪些性能符合了才會(huì)選型,也幸虧問了,如果沒問,leader 再回頭問我 調(diào)研的如何了,我可能還會(huì)吱吱嗚嗚 說不出來,但是leader 講了他的想法 ,他認(rèn)為他哪些功能特性是比較重要的,比如說 是否支持 pmml 文件部署 ,是否支持python stack 開發(fā)調(diào)用,是否支持實(shí)時(shí)預(yù)測,是否支持 監(jiān)控跟蹤 是否支持模型的存儲和版本控制 ,是否支持多個(gè)模型同事在線部署服務(wù)。。。 我就照著領(lǐng)導(dǎo)的要求 有重點(diǎn)的去翻看tutorial中的具體體現(xiàn),尋找到答案我就記下來,最后當(dāng)然按照 leader的想法我找到了大部分答案,沒有找到答案的,我就開始使用官方給的安裝使用介紹,去安裝服務(wù) 使用template demo 展開測試。

自己用了用 ,感覺也熟了 ,就有了操作的敏感性,對他有了更深層次的印象。
為了查看在官方?jīng)]有找到的答案,我只能去看源碼,在帶著問題思考不斷翻看源碼找到了 一部分答案,更加確認(rèn) predictionio 執(zhí)行調(diào)用過程 架構(gòu)原理

而且我還是把調(diào)研的結(jié)果寫成了一個(gè)word 文檔,不過最后 leader并不太滿意 predictionio ,因?yàn)閜redictionio 一部分不太符合我們的業(yè)務(wù)場景
比如說predictionio 服務(wù)端暫時(shí)只有java scala ,團(tuán)隊(duì)都是python技術(shù)棧
prediction 依賴spark 太重,predictionio 對多個(gè)模型同時(shí)部署還不夠友好
prediction的model存儲 版本控制比較簡陋
predictionio 還不支持 pmml 文件的熱部署,等等
不過我看網(wǎng)上 ,臺灣竟然有predictionio 的培訓(xùn),三萬新臺幣培訓(xùn)費(fèi) 三天

predictionio

支持 多種數(shù)據(jù)庫 mysql postgresql hbase elasticsearch,模型最后是存儲在數(shù)據(jù)庫中
以大數(shù)據(jù)格式存儲

可以接受 curl post restful 請求調(diào)用預(yù)測
接受client 程序 編碼調(diào)用 支持 scala 和python
支持 batchpredict 批量文件的請求調(diào)用
操作由 串行命令組成
先run eventserver 監(jiān)聽服務(wù) pio eventserver --ip 127.0.0.1 --port 7070 &
然后 importdata 批量導(dǎo)入訓(xùn)練數(shù)據(jù) python3 ./data/import_sever.py
然后 將本地的模型項(xiàng)目 build 打成 jar 包, pio build

然后執(zhí)行訓(xùn)練,訓(xùn)練在spark 上進(jìn)行,pio build
訓(xùn)練成功后 會(huì)生成模型 并將模型存儲持久化,
之后 deploy 部署模型在線服務(wù) pio deploy
之后展開預(yù)測
pio batachpredict --input bp.json --output batchpredict.json
curl -H "Content-Type: application/json" -d '{ "attr0" :59,"attr1" :30,"attr2" : 18}' \http://localhost:8000/queries.json
或者程序化 集成client 發(fā)送 預(yù)測請求

predictionio 最大的特點(diǎn)就是將模型 部署成在線服務(wù)可以被實(shí)時(shí)調(diào)用預(yù)測,壓測還沒有做,不過認(rèn)為 異步編程 future調(diào)用是比較符合場景的
算法 原生支持spark 的所有算法,predictionio 最開始主要是針對 推薦系統(tǒng)做的,現(xiàn)在是 基本支持集成所有算法,spark mllib xgboost deeplearning4j libtensorflow
并且支持同時(shí)多個(gè)算法串行預(yù)測
算法訓(xùn)練的超參數(shù)是寫在 配置文件json中,遇到模型修改 ,直接修改配置文件的模型超參數(shù)即可然后重新build train deploy 即可
pio 默認(rèn)在8000 端口會(huì)有監(jiān)控】
pio 可以和 已有的監(jiān)控軟件集成監(jiān)控 moint
pio 服務(wù)端開發(fā) 暫時(shí)只支持 java scala ,客戶端預(yù)測 支持 python scala java ruby
predictionio 環(huán)境 在 linux centos7 和mac 上都進(jìn)行了末班代碼的嘗試,均成功, predictionio 暫時(shí)不支持windows

以下較為重要的是
pio 是否支持支持 多個(gè)模型在線服務(wù) 同時(shí)在線,在進(jìn)行預(yù)測的時(shí)候如何指定 使用哪個(gè)模型預(yù)測, 只要 pio deploy 可以指定端口基本就沒有問題

pio 是否支持 模型的熱切換, 同一個(gè)端口,更換模型,一 即支持?jǐn)?shù)據(jù)庫已有模型的回溯部署 2 又支持新的模型訓(xùn)練后即部署 中間可以不停止服務(wù) 這個(gè)原理抓請 每個(gè) app 與模型的對應(yīng)關(guān)系,如何去數(shù)據(jù)庫去load 模型部署原理

pio 是如何喚起選擇數(shù)據(jù)庫的哪個(gè)模型部署的原理 步驟

pio 在訓(xùn)練時(shí)候是如何選擇spark 做訓(xùn)練 是否可以支持其他原生訓(xùn)練 比如 xgb lgbm sklearn

pio 是否可以跳過訓(xùn)練過程 直接將pmml 文件轉(zhuǎn)換成模型 持久化 并部署 進(jìn)行預(yù)測

image.png

image.png
image.png
image.png

Predictionio 大致分為五大組件
DataSource
作為讀取數(shù)據(jù) 支持 本地?cái)?shù)據(jù) hdfs 數(shù)據(jù) 和elasticSearch hbase數(shù)據(jù)
DATA preparatory
主要是把DataSource中讀到的數(shù)據(jù)轉(zhuǎn)換為模型可以使用數(shù)據(jù)格式 ,特征工程可以在這里做

Algorithm 主要是算法的訓(xùn)練和預(yù)測的,可以集成多種算法實(shí)現(xiàn)
Serving 是在 deploy 后執(zhí)行在線預(yù)測服務(wù)的
Evaluation Metrics 作為 評估模型效果
最終使用 Engine 串聯(lián)起這些組件來

個(gè)人認(rèn)為如果要使用predictionio 1.可以減小研發(fā)工期 2.監(jiān)控可以觸達(dá)3.需要了解相應(yīng) 組件的調(diào)用關(guān)系 原理 4.使用中可能需要面臨二次開發(fā) 中間靈活調(diào)用各個(gè)過程組件


image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容