一、云原生背景介绍
Pivotal作为云原生(Cloud Native)应用架构中先驱者和探路者,于2015年提出了云原生应用。同一年Google主导成立了云原生计算基金会(CNCF),起初CNCF对云原生的定义包含三个方面:应用容器化、面向微服务架构、应用支持容器的编排调度。
随着科技的发展,CNCF基金会对云原生进行了重新定义:云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。云原生所具备的特点如图1.1.1所示:
图1.1.1 云原生特性
云原生应用是一个相互关联但又不独立的组件(service、task、worker)的集合,这些组件与配置结合在一起并在适当的运行时实例化后,共同完成统一的功能目的。下图1.1.2是 OAM(Open Application Model) 定义的云原生应用模型示意图,为了便于理解,图中相同颜色的部分为同一类别的对象定义。其中基本定义如下:
● Workload(工作负载):应用程序的工作负载类型,由平台提供。
● Component(组件):定义了一个 Workload 的实例,并以基础设施中立的术语声明其运维特性。
● Trait(特征):用于将运维特性分配给组件实例。
● ApplicationScope(应用作用域):用于将组件分组成具有共同特性的松散耦合的应用。
● ApplicationConfiguration(应用配置):描述 Component 的部署、Trait 和 ApplicationScope。
图1.1.2云原生应用模型示意图
二、 Adlik云原生
2.1 Adlik
2.1.1 Adlik介绍
Adlik是深度学习模型的端到端优化框架。主要由三部分构成,包括:模型优化,模型编译和推理引擎三部分,架构图如下图1.2.1所示。其中Adlik模型优化器,专注于特定硬件并在其上运行以达到加速的目的。稀疏修剪由于依赖于特殊算法和硬件来实现加速,所以使用场景受到限制。Adlik剪枝集中在通道修剪和过滤器修剪上,可以真正减少参数和触发器的数量。在量化方面,Adlik专注于8 - bit量化,该量化在特定硬件上更容易加速,并且不影响模型的准确率。
图2.1.1 Adlik架构图
模型编译器旨在把不同的模型格式(H5, Checkpoint, ONNX, FrozenGraph, Saved Model)编译为OpenVINO, TensorFlow, TensorRT, TensorFlow Lite格式,满足用户对不同模型的编译需求,在编译的过程中用户可以选择是否对模型进行量化,目前支持模型量化的有TensorRT模型和Tensorflow Lite模型。
推理引擎提供了OpenVINO, TensorFlow-cpu, TensorFlow-gpu,TensorRT, TensorFlow Lite五种格式的推理运行时,满足用户多方推理需求,用户可以根据自己的环境选择合适的编译方式和推理方式。在进行推理时用户可以选择单模型推理,多模型推理,多运行时推理等方式,Adlik提供的模型优化,模型编译和引擎推理均可以部署在云侧和边缘侧。
2.1.2 Adlik操作指南
如果你想在云端或本地使用Adlik,建议最好使用docker镜像在容器搭建,这样不但宿主机和Adlik都环境整洁,也不影响功能的使用,比较便捷。Adlik的安装指南如下图所示:
启动ubuntu18.04容器:
docker run -it ubuntu:bionic bash
安装git:
apt install git -y
克隆Adlik代码并进入Adlik代码文件:
git clone https://github.com/ZTE/Adlik.git
cd Adlik
配置bazel源:
apt-get install --no-install-recommends -y wget && \
wget 'https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg' -O /etc/apt/trusted.gpg.d/bazel.asc
echo 'deb https://storage.googleapis.com/bazel-apt stable jdk1.8' >> /etc/apt