AIMVP · 2022年03月16日

服务端部署AI模型,试试YoMo+WasmEdge

我是来自山区、朴实、不偷电瓶的AI算法工程师阿chai,给大家分享人工智能、自动驾驶、机器人、3D感知相关的知识

今天阿chai给大家介绍一个深度学习部署案例。该项向我们展示了通过YoMo实时传递数据,保证低时延有序传输,并且对采集的数据完成Foods Detection,适用于需要在后端做模型部署的场景。江湖规矩,先放Git再来视频。

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

image.png

“扫盲扫盲”

image.png

扎心了,除了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。嵌入式的算力毕竟有限,只能依托服务端和边缘设备协同做数据分析,但是低延时的数据传输是新的“大山”。
image.png

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

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

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

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

image.png

看一下模型

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

image.png

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

image.png

我们在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/yo...

模型下载地址:https://storage.googleapis.co...

(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传入和算法执行的时间在左侧。
image.png

作者:阿chai
来源:YoMo

相关阅读

image.png
关注元峰微信号“AIZOOTech”

更多算法模型相关请关注AIZOO专栏
推荐阅读
关注数
227
内容数
48
AIZOO.com 致力于搭建AI开发者、AI公司与需求方的桥梁,打造中国最大的算法和产品商城。传播AI领域资讯和技术,展示AI算法和产品。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息