curl算子_自动算子优化工具——AutoKernel

人工智能技术干货请关注AIZOO、Jack Cui

机器人与自动驾驶课程请关注深蓝学院

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

哈喽小伙伴们,阿chai今天给大家介绍一个超级好用的自动算子优化工具AutoKernel,可更快实现深度学习算法在各硬件芯片上的高性能部署,下面我们进入正题。

curl算子_自动算子优化工具——AutoKernel_第1张图片

curl算子_自动算子优化工具——AutoKernel_第2张图片

随着人工智能的普及,为了让各硬件(CPU, GPU, NPU,...)能够支持深度学习应用,各硬件芯片需要软件库去支持高性能的深度学习张量运算。目前,这些高性能计算库主要由资深HPC工程师进行开发,为了加快开发进程,缩短深度学习应用落地周期,自动化算子优化是一个趋势。

05357d12a30a90bff63990d829c41861.png

AutoKernel简介

curl算子_自动算子优化工具——AutoKernel_第3张图片

AutoKernel是由OPEN AI LAB提出的高性能算子自动优化工具,可以自动优化调度策略、生成底层优化代码,大幅减少各硬件芯片算子开发成本,提升算子优化效率,让工程师更快实现深度学习算法在各硬件芯片上的高性能部署。

github:https://github.com/OAID/AutoKernel

curl算子_自动算子优化工具——AutoKernel_第4张图片

AutoKernel的三个模块:  

算子生成器:该模块使用了开源项目Halide;Halide是业界广泛使用的自动代码生成项目,它首次提出将计算和调度分离。该模块的输入是和硬件无关的算子计算描述,输出是相应后端的优化汇编代码/目标文件。 

自动搜索模块:该模块可以通过最优化算法/搜索算法/机器学习/强化学习搜索出相应后端的最优算子的调度策略参数(该模块仍在开发中);  

算子部署插件:Tengine是OPEN AILAB开源的深度学习推理框架,实现了AI算法在不同硬件的快速高效部署。该模块实现了将自动生成的优化算子代码以plugin的形式一键集成到Tengine中,实现自动优化算子的一键部署。

05357d12a30a90bff63990d829c41861.png

开发环境搭建

curl算子_自动算子优化工具——AutoKernel_第5张图片

官方已经把docker而制作好了,是不是很贴心?这里可能会有小伙伴们问docker是什么,这个就是一个容器工具,类似我们玩的沙盒,在所有的东西都装在里面,在环境部署与迁移的时候非常方便。下面阿chai先教大家如何配置docker。

阿chai用的是Ubuntu 18.0.4,不同的系统与版本有区别,出现问题可私信我。

# 更新源sudo apt-get update# 安装依赖sudo apt-get install apt-transport-https ca-certificates curl software-properties-common# 添加阿里的密钥,具体你懂的,那个网速啊。。。curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# 验证命令sudo apt-key fingerprint 0EBFCD88# 设置阿里的docker源sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"# 更新源sudo apt-get update# 安装最新版本的dokersudo apt-get -y install docker-ce

如果想要安装特定版本的docker,那就使用如下命令。

# 更新docker下载源后查看版本sudo apt-cache madison docker-ce# 安装指定版本sudo apt-get install -y docker-ce=

可以选择添加阿里云的docker资源,会提高速度,操作过程在阿里云中搜索即可。

05357d12a30a90bff63990d829c41861.png

AutoKernel使用教程

curl算子_自动算子优化工具——AutoKernel_第6张图片

1.AutoKernel环境搭建

官方给我们提供了docker容器,我们直接在docker中配置环境即可。

# 下载镜像,需等待一会docker pull openailab/autokernel# 启动该docker环境docker run -it openailab/autokernel /bin/bash# 下载AutoKernel项目,慢的话使用码云git clone https://github.com/OAID/AutoKernel.git

2.自定义OP算子

运用AutoKernel开发一个Tengine可以用算子,具体可分为两个步骤:

生成:编写算法描述和调度策略,生成相应后端的优化算子代码  

部署:将生成的优化算子代码通过plugin的形式集成进Tengine

阿chai以Relu算子为例,演示如何快速开发Tengine可用的自动优化算子。

curl算子_自动算子优化工具——AutoKernel_第7张图片

项目中提供了一个自定义生成的模板,使用如下命令使用:

# 进入目标路径cd AutoKernel/autokernel_plugin# 设定权限chmod +x -R . # 启动生成脚本./scripts/register_op.sh

Terminal中会有提示输入内容,请输入如下字符串:

op_name: reluop_type: OP_RELU

得到的文件目录如下所示:

src/relu/relu.cppsrc/relu/relu.hsrc/relu/relu_gen.ccsrc/relu/build/sh

该文件用于生成算子汇编代码。使用Halide语言描述算子的计算过程和调度策略schedule。该示例中,schedule默认为空。

class halide_relu:public Halide::Generator{public:    // args    Input input{"input", 4};    Input param{"param"};    Output output{"output", 4};    void generate()    {        /* THE ALGORITHM */        Var w("w"), h("h"), c("c"), n("n");        Func halide_relu("halide_relu");        halide_relu(w, h, c, n) = input(w, h, c, n);        output(w, h, c, n) = select(param >= 0, max(param, halide_relu(w, h, c, n)), halide_relu(w, h, c, n));    }    void schedule()    {        /* THE SCHEDULE */    }};

Rule的测试方法与其他demo的测试一起在下面介绍。

3. 测试DEMO

编译器前需要生成对应的测试文件:

# 进入项目路径cd AutoKernel/autokernel_plugin# 设置权限chmod +x -R .#自动生成算子汇编文件,这里官方少了个s,要注意,阿chai昨天在这折腾了好久才发现./scripts/generate.sh

编译项目,四步走:

mkdir buildcd buildcmake ..make -j4

测试效果:

# 进入项目文件cd AutoKernel/autokernel_plugin# 运行生成测试文件./build/tests/tm_classification -n squeezenet
AutoKernel plugin initedfunction:autokernel_plugin_init executed...Repeat 1 times, avg time per run is 55.932 msmax time is 55.932 ms, min time is 55.932 ms--------------------------------------0.2732 - "n02123045 tabby, tabby cat"0.2676 - "n02123159 tiger cat"0.1810 - "n02119789 kit fox, Vulpes macrotis"0.0818 - "n02124075 Egyptian cat"0.0724 - "n02085620 Chihuahua"--------------------------------------ALL TEST DONE

89a79c2320844b0bc77197f9b6b7732e.png 

算法很重要,但是只是项目中的一部分。没有服务器没法训练,没有承载设备无法部署,大量工程师的开发连算法的库都没有,我们要人情现实,不要盲人摸象。

你可能感兴趣的:(curl算子)