看我如何将 AI 算法,部署到服务器上,硬核分享!

Jack Cui

共 5858字,需浏览 12分钟

 ·

2021-11-11 20:45

大家好,我是 Jack。


好朋友阿 chai 最近写了一个深度学习部署案例,推荐给大家~


该项向我们展示了通过YoMo实时传递数据,保证低时延有序传输,并且对采集的数据完成Foods Detection,适用于需要在后端做模型部署的场景。江湖规矩,先放Git再来视频。

GitHub: https://github.com/yomorun/yomo-wasmedge-tensorflow.git

“扫盲扫盲”

CC:“Demo依托YoMo、WasmEdge、WebAssembly、TFLite等。”


阿chai:“TFLite听过。”


CC:“数据处理应用程序可以在远端数据中心完成。”


阿chai:“这都是啥。。。。。。”


扎心了,除了TFLite之外别的啥也不知道,相信很多机器学习方面的小伙伴也有同样的感受,那阿chai先上百度谷歌一下。

1. YoMo

YoMo 是为边缘计算打造的低时延流式 Serverless 开发框架,基于 QUIC Transport 协议通讯,以 Functional Reactive Programming 为编程范式,简化构建可靠、安全的低时延计算应用的复杂度,挖掘5G潜力,释放实时计算价值。

GitHub: https://github.com/yomorun/yomo.git

阿chai的理解:低延时、高效、适用于边缘计算。

2. WebAssembly

WebAssembly (Wasm)就是运行在 Web 平台上的 Assembly。可以看做是 Web 平台的 x86 硬件通用指令集,上层对接Python、Rust、C++等。使这些语言都能编译成统一的格式,用于 Web 平台运行。可以取代部分 JavaScript 代码执行更高效的 CPU 计算程序,同样可运行在非Web环境下。

Docs: https://www.wasm.com.cn/docs/js/

阿chai的理解:安全、高效。

3.WasmEdge

WasmEdge (之前名为 SSVM) 是为边缘计算优化的轻量级、高性能、可扩展的 WebAssembly (Wasm) 虚拟机,可用于云原生、边缘和去中心化的应用。WasmEdge 是目前市场上 最快的 Wasm 虚拟机。WasmEdge 是由 CNCF (Cloud Native Computing Foundation 云原生计算基金会)托管的官方沙箱项目。其应用场景包括 serverless apps, 嵌入式函数、微服务、智能合约和 IoT 设备。

GitHub: https://github.com/WasmEdge/WasmEdge.git

阿chai的理解:高效轻量(比Docker好)、扩展性强、沙盒概念。

“化学反应”

阿chai之前给大家介绍过很多边缘设备做算法推理的案例,可参考Tengine+VIM3。嵌入式的算力毕竟有限,只能依托服务端和边缘设备协同做数据分析,但是低延时的数据传输是新的“大山”。

YoMo本就是低时延流式 Serverless 开发框架,实时数据可在远端数据中心处理,WasmEdge 适用serverless apps场景,在 Wasm沙盒中中运行数据处理功能,以实现隔离、安全和热部署。



总结一下这套“组合拳”就是:

  • 低延迟:YoMo 高效网络服务,流数据处理应用可在远端数据中心完成。
  • 安全:WasmEdge 在 WebAssembly 沙箱中运行数据处理功能,以实现隔离、安全和热部署。
  • 高效:与流行的容器(如 Docker)相比,WasmEdge 的启动速度可以提高 100 倍,并且占用空间更小。

nice呀,看来很多模型可以放心的在服务端跑了。

看一下模型

模型使用的是TFHub中的food_v1,经典的MobileNet V1模型,可对2000多种食物进行分类。其部分网络结构如下所示:

官方在移动端的测试数据如下:

我们在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跑起来

项目需准备Linux设备,配置之前我们需要搭建Go、Rust、TensorFlow的环境。

a. 基础准备

测试视频路径: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)安装相关Tools
$ sudo apt-get update
$ sudo apt-get install -y ffmpeg libjpeg-dev libpng-dev
(3)WasmEdge安装

此处为Linux命令,项目仅用于Linux设备。

$ 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 依赖项
$ 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. 运行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 ,并设置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,复制该文件到flow:

$ cp pkg/rust_mobilenet_food_lib_bg.wasm yomo-wasmedge-tensorflow/flow
(2)启动服务

启动YoMo Orchestrator Server:

$ yomo serve -c ./zipper/workflow.yaml

运行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

演示结果如下图所示,image传入和算法执行的时间在左侧。


参考链接:

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

·················END·················

推荐阅读

•   我的十八般武器,这波稳了•   LSP,强得离谱•   保姆级神器,再也不用担心搞崩了

浏览 217
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报