我是来自山区、朴实、不偷电瓶的AI算法工程师阿chai,给大家分享人工智能、自动驾驶、机器人、3D感知相关的知识
今天阿chai给大家介绍一个深度学习部署案例。该项向我们展示了通过YoMo实时传递数据,保证低时延有序传输,并且对采集的数据完成Foods Detection,适用于需要在后端做模型部署的场景。江湖规矩,先放Git再来视频。
GitHub:https://github.com/yomorun/yomo-wasmedge-tensorflow.git
“扫盲扫盲”
扎心了,除了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/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传入和算法执行的时间在左侧。
作者:阿chai
来源:YoMo
相关阅读
关注元峰微信号“AIZOOTech”
更多算法模型相关请关注AIZOO专栏