看我如何將 AI 算法,部署到服務(wù)器上,硬核分享!
大家好,我是 Jack。
好朋友阿 chai 最近寫了一個深度學(xué)習(xí)部署案例,推薦給大家~
該項(xiàng)向我們展示了通過YoMo實(shí)時傳遞數(shù)據(jù),保證低時延有序傳輸,并且對采集的數(shù)據(jù)完成Foods Detection,適用于需要在后端做模型部署的場景。江湖規(guī)矩,先放Git再來視頻。
GitHub: https://github.com/yomorun/yomo-wasmedge-tensorflow.git
“掃盲掃盲”

CC:“Demo依托YoMo、WasmEdge、WebAssembly、TFLite等?!?/p>
阿chai:“TFLite聽過?!?/p>
CC:“數(shù)據(jù)處理應(yīng)用程序可以在遠(yuǎn)端數(shù)據(jù)中心完成?!?/p>
阿chai:“這都是啥。。。。。?!?/p>
扎心了,除了TFLite之外別的啥也不知道,相信很多機(jī)器學(xué)習(xí)方面的小伙伴也有同樣的感受,那阿chai先上百度谷歌一下。
1. YoMo
YoMo 是為邊緣計(jì)算打造的低時延流式 Serverless 開發(fā)框架,基于 QUIC Transport 協(xié)議通訊,以 Functional Reactive Programming 為編程范式,簡化構(gòu)建可靠、安全的低時延計(jì)算應(yīng)用的復(fù)雜度,挖掘5G潛力,釋放實(shí)時計(jì)算價值。
GitHub: https://github.com/yomorun/yomo.git
阿chai的理解:低延時、高效、適用于邊緣計(jì)算。
2. WebAssembly
WebAssembly (Wasm)就是運(yùn)行在 Web 平臺上的 Assembly??梢钥醋鍪?Web 平臺的 x86 硬件通用指令集,上層對接Python、Rust、C++等。使這些語言都能編譯成統(tǒng)一的格式,用于 Web 平臺運(yùn)行。可以取代部分 JavaScript 代碼執(zhí)行更高效的 CPU 計(jì)算程序,同樣可運(yùn)行在非Web環(huán)境下。
Docs: https://www.wasm.com.cn/docs/js/
阿chai的理解:安全、高效。
3.WasmEdge
WasmEdge (之前名為 SSVM) 是為邊緣計(jì)算優(yōu)化的輕量級、高性能、可擴(kuò)展的 WebAssembly (Wasm) 虛擬機(jī),可用于云原生、邊緣和去中心化的應(yīng)用。WasmEdge 是目前市場上?最快的 Wasm 虛擬機(jī)。WasmEdge 是由 CNCF (Cloud Native Computing Foundation 云原生計(jì)算基金會)托管的官方沙箱項(xiàng)目。其應(yīng)用場景包括 serverless apps, 嵌入式函數(shù)、微服務(wù)、智能合約和 IoT 設(shè)備。
GitHub: https://github.com/WasmEdge/WasmEdge.git
阿chai的理解:高效輕量(比Docker好)、擴(kuò)展性強(qiáng)、沙盒概念。
“化學(xué)反應(yīng)”
阿chai之前給大家介紹過很多邊緣設(shè)備做算法推理的案例,可參考Tengine+VIM3。嵌入式的算力畢竟有限,只能依托服務(wù)端和邊緣設(shè)備協(xié)同做數(shù)據(jù)分析,但是低延時的數(shù)據(jù)傳輸是新的“大山”。

YoMo本就是低時延流式 Serverless 開發(fā)框架,實(shí)時數(shù)據(jù)可在遠(yuǎn)端數(shù)據(jù)中心處理,WasmEdge 適用serverless apps場景,在 Wasm沙盒中中運(yùn)行數(shù)據(jù)處理功能,以實(shí)現(xiàn)隔離、安全和熱部署。

總結(jié)一下這套“組合拳”就是:
低延遲:YoMo 高效網(wǎng)絡(luò)服務(wù),流數(shù)據(jù)處理應(yīng)用可在遠(yuǎn)端數(shù)據(jù)中心完成。 安全:WasmEdge 在 WebAssembly 沙箱中運(yùn)行數(shù)據(jù)處理功能,以實(shí)現(xiàn)隔離、安全和熱部署。 高效:與流行的容器(如 Docker)相比,WasmEdge 的啟動速度可以提高 100 倍,并且占用空間更小。
nice呀,看來很多模型可以放心的在服務(wù)端跑了。

看一下模型
模型使用的是TFHub中的food_v1,經(jīng)典的MobileNet V1模型,可對2000多種食物進(jìn)行分類。其部分網(wǎng)絡(luò)結(jié)構(gòu)如下所示:

官方在移動端的測試數(shù)據(jù)如下:

我們在TensorFlow中可以直接使用該模型:
#?TF1
import?tensorflow.compat.v1?as?tf
import?tensorflow_hub?as?hub
m?=?hub.Module('https://tfhub.dev/google/aiy/vision/classifier/food_V1/1')
...
#?TF2?
import?tensorflow.compat.v2?as?tf
import?tensorflow_hub?as?hub
m?=?hub.KerasLayer('https://tfhub.dev/google/aiy/vision/classifier/food_V1/1')
...
Demo跑起來
項(xiàng)目需準(zhǔn)備Linux設(shè)備,配置之前我們需要搭建Go、Rust、TensorFlow的環(huán)境。
a. 基礎(chǔ)準(zhǔn)備
測試視頻路徑:https://github.com/yomorun/yomo-wasmedge-tensorflow/releases/download/v0.1.0/hot-dog.mp4
模型下載地址:https://storage.googleapis.com/tfhub-lite-models/google/lite-model/aiy/vision/classifier/food_V1/1.tflite
(1)安裝YoMo
$?go?install?github.com/yomorun/cli/yomo@latest
YoMo的更多信息請移步官方GitHub。
(2)安裝相關(guān)Tools
$?sudo?apt-get?update
$?sudo?apt-get?install?-y?ffmpeg?libjpeg-dev?libpng-dev
(3)WasmEdge安裝
此處為Linux命令,項(xiàng)目僅用于Linux設(shè)備。
$?wget?https://github.com/WasmEdge/WasmEdge/releases/download/0.8.0/WasmEdge-0.8.0-manylinux2014_x86_64.tar.gz
$?tar?-xzf?WasmEdge-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?cp?WasmEdge-0.8.0-Linux/include/wasmedge.h?/usr/local/include
$?sudo?cp?WasmEdge-0.8.0-Linux/lib64/libwasmedge_c.so?/usr/local/lib
$?sudo?ldconfig
b. WasmEdge-tensorflow
(1)安裝 tensorflow 依賴項(xiàng)
$?wget?https://github.com/second-state/WasmEdge-tensorflow-deps/releases/download/0.8.0/WasmEdge-tensorflow-deps-TF-0.8.0-manylinux2014_x86_64.tar.gz
$?wget?https://github.com/second-state/WasmEdge-tensorflow-deps/releases/download/0.8.0/WasmEdge-tensorflow-deps-TFLite-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?tar?-C?/usr/local/lib?-xzf?WasmEdge-tensorflow-deps-TF-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?tar?-C?/usr/local/lib?-xzf?WasmEdge-tensorflow-deps-TFLite-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?ln?-sf?libtensorflow.so.2.4.0?/usr/local/lib/libtensorflow.so.2
$?sudo?ln?-sf?libtensorflow.so.2?/usr/local/lib/libtensorflow.so
$?sudo?ln?-sf?libtensorflow_framework.so.2.4.0?/usr/local/lib/libtensorflow_framework.so.2
$?sudo?ln?-sf?libtensorflow_framework.so.2?/usr/local/lib/libtensorflow_framework.so
$?sudo?ldconfig
(2)安裝 WasmEdge-tensorflow
$?wget?https://github.com/second-state/WasmEdge-tensorflow/releases/download/0.8.0/WasmEdge-tensorflow-0.8.0-manylinux2014_x86_64.tar.gz
$?wget?https://github.com/second-state/WasmEdge-tensorflow/releases/download/0.8.0/WasmEdge-tensorflowlite-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?tar?-C?/usr/local/?-xzf?WasmEdge-tensorflow-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?tar?-C?/usr/local/-xzf?WasmEdge-tensorflowlite-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?ldconfig
(3)安裝 WasmEdge-image:
$?wget?https://github.com/second-state/WasmEdge-image/releases/download/0.8.0/WasmEdge-image-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?tar?-C?/usr/local/?-xzf?WasmEdge-image-0.8.0-manylinux2014_x86_64.tar.gz
$?sudo?ldconfig
如果安裝有任何問題,請參考官方文檔。
c. 運(yùn)行Demo
(1) Streaming Serverless
$?cd?yomo-wasmedge-tensorflow/flow
$?go?get?-u?github.com/second-state/WasmEdge-go/wasmedge
模型下載至rust_mobilenet_foods/src:
$?wget?'?https://storage.googleapis.com/tfhub-lite-models/google/lite-model/aiy/vision/classifier/food_V1/1.tflite?'?-O?./rust_mobilenet_food/src/lite-model_aiy_vision_classifier_food_V1_1.tflite
安裝rustc and cargo ,并設(shè)置Rust版本為1.50.0:
$?curl?--proto?'=https'?--tlsv1.2?-sSf?https://sh.rustup.rs?|?sh
$?export?PATH=$PATH:$HOME/.cargo/bin
$?rustup?default?1.50.0
安裝rustwasmc:
$?curl?https://raw.githubusercontent.com/second-state/rustwasmc/master/installer/init.sh?-sSf?|?sh
$?cd?rust_mobilenet_food
$?rustwasmc?build
WASM文件在pkg/rust_mobilenet_food_lib_bg.wasm,復(fù)制該文件到flow:
$?cp?pkg/rust_mobilenet_food_lib_bg.wasm?yomo-wasmedge-tensorflow/flow
(2)啟動服務(wù)
啟動YoMo Orchestrator Server:
$?yomo?serve?-c?./zipper/workflow.yaml
運(yùn)行Streaming Serverless:
$?cd?flow
$?go?run?--tags?"tensorflow?image"?app.go
(3) 演示
$?wget?-P?source??'?https://github.com/yomorun/yomo-wasmedge-tensorflow/releases/download/v0.1.0/hot-dog.mp4?'?
$?go?run?./source/main.go?./source/熱狗.mp4
演示結(jié)果如下圖所示,image傳入和算法執(zhí)行的時間在左側(cè)。

參考鏈接:
https://github.com/yomorun/yomo
https://github.com/yomorun/yomo-wasmedge-tensorflow
https://gitee.com/mirrors/wasmedge/
https://zhuanlan.zhihu.com/p/377563956
https://tfhub.dev/google/lite-model/aiy/vision/classifier/food_V1/1

推薦閱讀
?? ?我的十八般武器,這波穩(wěn)了?? ?LSP,強(qiáng)得離譜????保姆級神器,再也不用擔(dān)心搞崩了
