SlideShare a Scribd company logo
1 of 31
Download to read offline
使用clipper打造低延遲的
預測系統
speaker : 陳威宇 weiyu chen
NCHC TW
https://ppt.cc/fFpcHx
投影片位置
微服務架構
優點:
* 每個服務簡單
* 每個服務可獨立
開發
* 架構可鬆散耦合
* 可透過不同程式
語言實作
缺點:
* 維運成本高
* DevOps !!
* 程式碼重複
* 分散式系統的複雜
* 測試代價高
定義 : https://zh.wikipedia.org/wiki/%E5%BE%AE%E6%9C%8D%E5%8B%99
優缺點:https://kknews.cc/zh-tw/tech/oglv55m.html
架構圖:https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices
微服務 (Microservices) 是一種軟體架構風格,它是以專注於單一責任與功能
的小型功能區段 (Small Building Blocks) 為基礎,利用模組化的方式組合出複
雜的大型應用程式,各功能區段使用與語言無關
(Language-Independent/Language agnostic) 的 API 集相互通訊。
心中有個夢:擁抱微服務的優點,降低微服
務的門檻
優點:
* 每個服務簡單
* 每個服務可獨立開發
* 架構可鬆散耦合
* 可透過不同程式語言
實作
缺點:
* 維運成本高
* DevOps !!
* 程式碼重複
* 分散式系統的複雜
* 測試代價高
Clipper : A Low-Latency Online Prediction Serving
System
Agenda
● 介紹 clipper
○ 是什麼
○ 使用者
○ 特色
● Demo
○ 環境介紹
○ 案例
● 如何快速使用
○ 老司機的經驗談
○ 常見問題 5分鐘-> out
陳威宇 WeiYu Chen
國家高速網路與計算中心
副研究員
勞工 / 學生 / 爸爸 /
自由軟體 / 系統維護
https://github.com/waue0920
waue0920 @ gmail.com
Clipper : A Low-Latency Online Prediction Serving System
Clipper : 兼顧低延遲與高效能且高彈性的微服務架構
• 簡化模型部署
• // 若善用Caching、Batching機制能更增加效率
• // 通過智慧選擇和合併模型來改善預測的準確率
• Clipper支援以下幾種模型:
• 純Python函數 / PyShark / PyTorch / Tensorflow / MXnet
Offline Scoring
Online Scoring Prediction-Serving for interactive applications
Timescale: ~10s of milliseconds
+
作者: RISE Lab
https://rise.cs.berkeley.edu/
誰會喜歡 Clipper
❖可以用REST API 與machine learning
model 界接
❖簡化model的佈署
❖透過 clipper提供的batching, caching機
制提升效能與減少 latency
❖藉由整合與重組演算法能提升正確率
Product team
Data Scientists
Infra-Team
User
Clipper Decouples Applications and Models
Clipper Software Architecture
Clipper Architecture
Clipper w/ Spark Integration Mode
benchmark 1 :clipper 與原生 tensorFlow 比
較
Benchmark 2 : 使用Batching 技術
Demo
Server (MicroService)
TWCC VM
from: 愛情釀的酒 -
林志炫版
前輩
== Never LiveDemo
==============
Client
現場筆電
● doc
http://clipper.ai/
● project
https://github.com/ucbrise/clipper
● examples
https://github.com/ucbrise/clipper/tree/develop/examples
● my github
https://github.com/waue0920/clipper_study
● sample data
https://scidm.nchc.org.tw/dataset/datacon2019clipper
● docker hub
https://cloud.docker.com/repository/docker/waue0920/face_detect
_cv2
資料來源:資料市集
https://scidm.nchc.org.tw/dataset/da
tacon2019clipper
* 測試圖集
* 訓練圖集
運算平台:TWCC
❖ 48 cores + 320GB memory 100GB HDD
1.5 % 10G
0
400 KB/s
10 %
13G
老司機分享篇
● 快速上手
● 避免走冤枉路
● ...沒別的了 我只是小司機
https://dailyview.tw/popular/detail/3478
1. 啟動 clipper cluster 並聯上 clipper
manager
clipper_conn.start_clipper()
同時會啟動五個 docker
● front_end exporter : no port
● query_frontend : 1337 / 7000
● management_frontend : 1338
● radis : 6379
● prometheus : 9090
2 載入model於container, 註冊app, 連結
• python_deployer.deploy_python_closure(
clipper_conn, name, version=2,
input_type="bytes",
func=image_size, registry="waue0920",
pkgs_to_install=['pillow']
)
• clipper_conn.register_application(
name="image-example", input_type="bytes",
default_output="-1.0", slo_micros=100000
)
• clipper_conn.link_model_to_app(
app_name="image-example",
model_name="image-example“
)
2 載入model於container, 註冊app, 連結
in one function
❖ python_deployer.create_endpoint(
clipper_conn=clipper_conn,
name="image-example",
input_type="bytes",
func=image_size,
pkgs_to_install=['pillow']
)
• python_deployer.deploy_python_closure(
clipper_conn, name, version=2,
input_type="bytes",
func=image_size, registry="waue0920",
pkgs_to_install=['pillow']
)
• clipper_conn.register_application(
name="image-example",
input_type="bytes",
default_output="-1.0", slo_micros=100000
)
• clipper_conn.link_model_to_app(
app_name="image-example",
model_name="image-example“
)
3. 分手的藝術
撤銷註冊 與 結束服務大不同
撤銷app & model 結束 clipper cluster
● clipper_conn.unlink_model_from_app(
model_name=model_name,
app_name=app_name )
● clipper_conn.stop_models(
model_name )
● clipper_conn.delete_application(
app_name )
● clipper_conn.stop_all()
4. get more information to debug
5. clipper 中的單元測試
● clipper 較難run time debug 因為error message 會被系統
吃掉。問題可能出在:
○ container : base image 裡沒有包含到 predict 用的 library
○ predict function : 有error message 但用restful API 展現不出來
● 建議解法:
1. predict 的內容 應該先獨立測試,觀察結果如預期
2. 修改成predict function 結構,再進行測試
3. 註冊成微服務後 run time 測試非預期,用docker ps &
docker log 觀察是否 container instance 起不起來
a. 若是因為 container 問題,如container 內沒裝所需要用的
library
https://www.flickr.com/photos/xv
erges/5202428477
MR Unit Test
1. Setup
2. Exercise
3. Verify
4. Tear down
6. 建立 model 能運行的container
import clipper_admin.deployers.keras
clipper_admin.deployers.keras.deploy_keras
_model(
clipper_conn,
…
func=predict,
batch_size=1,
base_image="face_detect_cv2",
pkgs_to_install=['pillow']
)
● 先確定是container 出錯:
○ docker log 可以看到錯誤訊息
○ 或用 docker exec -it <id>
/bin/bash 進到instance 裡 用
python跑 predict function 那段
● 在 container instance 裡裝好
環境套件
○ 如 用到 opencv ,無法使用pip
安裝,只能用 apt install
● docker commit
○ docker commit <id> <name>
● 程式段,指定base_image
常見問題 15分鐘-> out
● 若遇到 PyYAML 版本太舊又無法移除的錯誤導致無法安裝
● clipper Manager run 不起來
● clipper Manager 啟動錯誤,已經存在
○ Error starting Clipper: Cluster default-cluster cannot be started because it
already exists.
● container 無法載入 hub.docker 的 registry
若遇到pip 版本太舊又無法移除的錯誤導致無法安裝 clipper
安裝過程中遇到某個python套件錯誤
(A) 移除並重新安裝:
(ex: PyYAML)
(B) 指定版本
(ex: cloudpickle )
# mv /opt/anaconda3/lib/python3.6/site-packages/yaml ./
# mv /opt/anaconda3/lib/python3.6/site-packages/PyYAML-3.12-py3.6.egg-info
./
# pip install PyYAML
# pip install -U cloudpickle==0.5.3
clipper Manager run 不起來
● 檢查環境是否有裝 docker , k8s
● 確認目前使用者的權限是否能執行 docker & k8s
○ simplest way : by root
# yum install docker kubelet kubeadm kubectl kubernetes-cni
# systemctl enable docker
# systemctl start docker
# systemctl enable kubelet
# systemctl start kubelet
clipper Manager 啟動錯誤,已經存在
● 使用 start_clipper() 會有重複存在的問題
○ clipper_conn.start_clipper()
● 建議使用以下取代
from clipper_admin import ClipperException
try:
clipper_conn.start_clipper()
except ClipperException as e:
clipper_conn.connect()
except Exception as e:
print(e)
container 無法載入 hub.docker 的 registry
1. ssh到該台機器,執行 docker login
2. deploy 的程式碼段,加入 registry & version 資訊
python_deployer.deploy_python_closure(clipper_conn,
name="waue-sum-model",
version=2,
input_type="doubles",
func=feature_sum,
registry="waue0920"
)
Clipper@datacon.2019.tw

More Related Content

What's hot

如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12twMVC
 
Workflow Overview
Workflow OverviewWorkflow Overview
Workflow OverviewKevin Cao
 
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格Will Huang
 
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革Will Huang
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹Alan Tsai
 
Android开发基础
Android开发基础Android开发基础
Android开发基础ykdsg
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Kyle Shen
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16twMVC
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能Justin Lin
 
Spring boot 简介
Spring boot 简介Spring boot 简介
Spring boot 简介宇帆 盛
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15twMVC
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17twMVC
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
Web development with zend framework
Web development with zend frameworkWeb development with zend framework
Web development with zend frameworkthinkinlamp
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)xzdbd
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18twMVC
 
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用Jerry Lin
 

What's hot (20)

如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
 
Workflow Overview
Workflow OverviewWorkflow Overview
Workflow Overview
 
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
 
ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革ASP.NET 5 的創新與變革
ASP.NET 5 的創新與變革
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
 
Android开发基础
Android开发基础Android开发基础
Android开发基础
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
 
TypeScript-twmvc#16
TypeScript-twmvc#16TypeScript-twmvc#16
TypeScript-twmvc#16
 
除錯、測試與效能
除錯、測試與效能除錯、測試與效能
除錯、測試與效能
 
Spring boot 简介
Spring boot 简介Spring boot 简介
Spring boot 简介
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15動手打造 application framework-twMVC#15
動手打造 application framework-twMVC#15
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Web development with zend framework
Web development with zend frameworkWeb development with zend framework
Web development with zend framework
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用
 

Similar to Clipper@datacon.2019.tw

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Wade Huang
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2netdbncku
 
谈谈模块化
谈谈模块化谈谈模块化
谈谈模块化衡锋 阳
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1netdbncku
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
大话Php之性能
大话Php之性能大话Php之性能
大话Php之性能liqiang xu
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
Mvc架构在discuz!插件开发的应用 wps create_msoffice_check
Mvc架构在discuz!插件开发的应用 wps create_msoffice_checkMvc架构在discuz!插件开发的应用 wps create_msoffice_check
Mvc架构在discuz!插件开发的应用 wps create_msoffice_checkCevin Cheung
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4twMVC
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8 浒 刘
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章浒 刘
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰Paul Chao
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 
Wxpython In Action
Wxpython In ActionWxpython In Action
Wxpython In Action智锋 范
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 

Similar to Clipper@datacon.2019.tw (20)

Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2
 
谈谈模块化
谈谈模块化谈谈模块化
谈谈模块化
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
大话Php之性能
大话Php之性能大话Php之性能
大话Php之性能
 
Kissy design
Kissy designKissy design
Kissy design
 
Mvc架构在discuz!插件开发的应用 wps create_msoffice_check
Mvc架构在discuz!插件开发的应用 wps create_msoffice_checkMvc架构在discuz!插件开发的应用 wps create_msoffice_check
Mvc架构在discuz!插件开发的应用 wps create_msoffice_check
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 
Wxpython In Action
Wxpython In ActionWxpython In Action
Wxpython In Action
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 

More from Wei-Yu Chen

大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術Wei-Yu Chen
 
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduceWei-Yu Chen
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Wei-Yu Chen
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Wei-Yu Chen
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Wei-Yu Chen
 
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for  Intrusion DetectionCloudslam09:Building a Cloud Computing Analysis System for  Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion DetectionWei-Yu Chen
 

More from Wei-Yu Chen (10)

大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術
 
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
加速開發! 在Windows開發hadoop程式,直接運行 map/reduce
 
Hadoop sqoop
Hadoop sqoop Hadoop sqoop
Hadoop sqoop
 
Hadoop pig
Hadoop pigHadoop pig
Hadoop pig
 
Hadoop hive
Hadoop hiveHadoop hive
Hadoop hive
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for  Intrusion DetectionCloudslam09:Building a Cloud Computing Analysis System for  Intrusion Detection
Cloudslam09:Building a Cloud Computing Analysis System for Intrusion Detection
 

Clipper@datacon.2019.tw

  • 1. 使用clipper打造低延遲的 預測系統 speaker : 陳威宇 weiyu chen NCHC TW https://ppt.cc/fFpcHx 投影片位置
  • 2. 微服務架構 優點: * 每個服務簡單 * 每個服務可獨立 開發 * 架構可鬆散耦合 * 可透過不同程式 語言實作 缺點: * 維運成本高 * DevOps !! * 程式碼重複 * 分散式系統的複雜 * 測試代價高 定義 : https://zh.wikipedia.org/wiki/%E5%BE%AE%E6%9C%8D%E5%8B%99 優缺點:https://kknews.cc/zh-tw/tech/oglv55m.html 架構圖:https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/microservices 微服務 (Microservices) 是一種軟體架構風格,它是以專注於單一責任與功能 的小型功能區段 (Small Building Blocks) 為基礎,利用模組化的方式組合出複 雜的大型應用程式,各功能區段使用與語言無關 (Language-Independent/Language agnostic) 的 API 集相互通訊。
  • 3. 心中有個夢:擁抱微服務的優點,降低微服 務的門檻 優點: * 每個服務簡單 * 每個服務可獨立開發 * 架構可鬆散耦合 * 可透過不同程式語言 實作 缺點: * 維運成本高 * DevOps !! * 程式碼重複 * 分散式系統的複雜 * 測試代價高 Clipper : A Low-Latency Online Prediction Serving System
  • 4. Agenda ● 介紹 clipper ○ 是什麼 ○ 使用者 ○ 特色 ● Demo ○ 環境介紹 ○ 案例 ● 如何快速使用 ○ 老司機的經驗談 ○ 常見問題 5分鐘-> out 陳威宇 WeiYu Chen 國家高速網路與計算中心 副研究員 勞工 / 學生 / 爸爸 / 自由軟體 / 系統維護 https://github.com/waue0920 waue0920 @ gmail.com
  • 5. Clipper : A Low-Latency Online Prediction Serving System Clipper : 兼顧低延遲與高效能且高彈性的微服務架構 • 簡化模型部署 • // 若善用Caching、Batching機制能更增加效率 • // 通過智慧選擇和合併模型來改善預測的準確率 • Clipper支援以下幾種模型: • 純Python函數 / PyShark / PyTorch / Tensorflow / MXnet
  • 6. Offline Scoring Online Scoring Prediction-Serving for interactive applications Timescale: ~10s of milliseconds +
  • 8. 誰會喜歡 Clipper ❖可以用REST API 與machine learning model 界接 ❖簡化model的佈署 ❖透過 clipper提供的batching, caching機 制提升效能與減少 latency ❖藉由整合與重組演算法能提升正確率 Product team Data Scientists Infra-Team User
  • 12. Clipper w/ Spark Integration Mode
  • 13. benchmark 1 :clipper 與原生 tensorFlow 比 較
  • 14. Benchmark 2 : 使用Batching 技術
  • 15. Demo Server (MicroService) TWCC VM from: 愛情釀的酒 - 林志炫版 前輩 == Never LiveDemo ============== Client 現場筆電 ● doc http://clipper.ai/ ● project https://github.com/ucbrise/clipper ● examples https://github.com/ucbrise/clipper/tree/develop/examples ● my github https://github.com/waue0920/clipper_study ● sample data https://scidm.nchc.org.tw/dataset/datacon2019clipper ● docker hub https://cloud.docker.com/repository/docker/waue0920/face_detect _cv2
  • 17. 運算平台:TWCC ❖ 48 cores + 320GB memory 100GB HDD 1.5 % 10G 0 400 KB/s 10 % 13G
  • 18. 老司機分享篇 ● 快速上手 ● 避免走冤枉路 ● ...沒別的了 我只是小司機 https://dailyview.tw/popular/detail/3478
  • 19. 1. 啟動 clipper cluster 並聯上 clipper manager clipper_conn.start_clipper() 同時會啟動五個 docker ● front_end exporter : no port ● query_frontend : 1337 / 7000 ● management_frontend : 1338 ● radis : 6379 ● prometheus : 9090
  • 20. 2 載入model於container, 註冊app, 連結 • python_deployer.deploy_python_closure( clipper_conn, name, version=2, input_type="bytes", func=image_size, registry="waue0920", pkgs_to_install=['pillow'] ) • clipper_conn.register_application( name="image-example", input_type="bytes", default_output="-1.0", slo_micros=100000 ) • clipper_conn.link_model_to_app( app_name="image-example", model_name="image-example“ )
  • 21. 2 載入model於container, 註冊app, 連結 in one function ❖ python_deployer.create_endpoint( clipper_conn=clipper_conn, name="image-example", input_type="bytes", func=image_size, pkgs_to_install=['pillow'] ) • python_deployer.deploy_python_closure( clipper_conn, name, version=2, input_type="bytes", func=image_size, registry="waue0920", pkgs_to_install=['pillow'] ) • clipper_conn.register_application( name="image-example", input_type="bytes", default_output="-1.0", slo_micros=100000 ) • clipper_conn.link_model_to_app( app_name="image-example", model_name="image-example“ )
  • 22. 3. 分手的藝術 撤銷註冊 與 結束服務大不同 撤銷app & model 結束 clipper cluster ● clipper_conn.unlink_model_from_app( model_name=model_name, app_name=app_name ) ● clipper_conn.stop_models( model_name ) ● clipper_conn.delete_application( app_name ) ● clipper_conn.stop_all()
  • 23. 4. get more information to debug
  • 24. 5. clipper 中的單元測試 ● clipper 較難run time debug 因為error message 會被系統 吃掉。問題可能出在: ○ container : base image 裡沒有包含到 predict 用的 library ○ predict function : 有error message 但用restful API 展現不出來 ● 建議解法: 1. predict 的內容 應該先獨立測試,觀察結果如預期 2. 修改成predict function 結構,再進行測試 3. 註冊成微服務後 run time 測試非預期,用docker ps & docker log 觀察是否 container instance 起不起來 a. 若是因為 container 問題,如container 內沒裝所需要用的 library https://www.flickr.com/photos/xv erges/5202428477 MR Unit Test 1. Setup 2. Exercise 3. Verify 4. Tear down
  • 25. 6. 建立 model 能運行的container import clipper_admin.deployers.keras clipper_admin.deployers.keras.deploy_keras _model( clipper_conn, … func=predict, batch_size=1, base_image="face_detect_cv2", pkgs_to_install=['pillow'] ) ● 先確定是container 出錯: ○ docker log 可以看到錯誤訊息 ○ 或用 docker exec -it <id> /bin/bash 進到instance 裡 用 python跑 predict function 那段 ● 在 container instance 裡裝好 環境套件 ○ 如 用到 opencv ,無法使用pip 安裝,只能用 apt install ● docker commit ○ docker commit <id> <name> ● 程式段,指定base_image
  • 26. 常見問題 15分鐘-> out ● 若遇到 PyYAML 版本太舊又無法移除的錯誤導致無法安裝 ● clipper Manager run 不起來 ● clipper Manager 啟動錯誤,已經存在 ○ Error starting Clipper: Cluster default-cluster cannot be started because it already exists. ● container 無法載入 hub.docker 的 registry
  • 27. 若遇到pip 版本太舊又無法移除的錯誤導致無法安裝 clipper 安裝過程中遇到某個python套件錯誤 (A) 移除並重新安裝: (ex: PyYAML) (B) 指定版本 (ex: cloudpickle ) # mv /opt/anaconda3/lib/python3.6/site-packages/yaml ./ # mv /opt/anaconda3/lib/python3.6/site-packages/PyYAML-3.12-py3.6.egg-info ./ # pip install PyYAML # pip install -U cloudpickle==0.5.3
  • 28. clipper Manager run 不起來 ● 檢查環境是否有裝 docker , k8s ● 確認目前使用者的權限是否能執行 docker & k8s ○ simplest way : by root # yum install docker kubelet kubeadm kubectl kubernetes-cni # systemctl enable docker # systemctl start docker # systemctl enable kubelet # systemctl start kubelet
  • 29. clipper Manager 啟動錯誤,已經存在 ● 使用 start_clipper() 會有重複存在的問題 ○ clipper_conn.start_clipper() ● 建議使用以下取代 from clipper_admin import ClipperException try: clipper_conn.start_clipper() except ClipperException as e: clipper_conn.connect() except Exception as e: print(e)
  • 30. container 無法載入 hub.docker 的 registry 1. ssh到該台機器,執行 docker login 2. deploy 的程式碼段,加入 registry & version 資訊 python_deployer.deploy_python_closure(clipper_conn, name="waue-sum-model", version=2, input_type="doubles", func=feature_sum, registry="waue0920" )