【嵌入式AI】——autokernel真的能比手动优化更强吗?

出处:open ai lab
code:https://github.com/OAID/AutoKernel

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

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

2. autokernel初衷
是借助halide来实现各种AI op,然后实现了的op注册到Tengine中,利用Tengine来推理。首先需要明确Tengine中其实已经实现了各种OP,比如:conv,dwconv,pool…,各种平台,比如:x86,aarch32,aarch64,vulkan。如果再拓展一下,像ncnn,mnn还支持opencl,opengl,cuda等。

这就造成,需要写很多的代码,同时各种 op 还有不同的优化策略,这样就更加头大了。

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

总结就是,他将实现和优化分离,只要功能齐全时,用halide实现就行,需要追求速度的时候,就需要想办法优化了。这样有什么好处呢?因为深度学习推理都是一些固定op,这些op的实现是一样的,但是如果你用不同的硬件,需要针对不同的硬件做一些优化,比如x86和arm。这有点像设置模式中的抽象,将op的实现抽象出来,并和优化分离

3. autokernel真的万能吗?
这里说的万能,是自动优化出来的推理速度。

其实是没有的。

这里我们采用autokernel项目,测试自写的maxpool,avepool(官方有实现conv也可以试一下),具体代码:AutoKernel,这里我们用halide简单实现,未做优化

3.1 halide结果

[INFO]: using halide maxpooling....
Repeat [1] time 10422.00 us per RUN. used 10422 us
print output data
8 8 8 5 7 7 8 7 8 8 8 7 8 4 8 7 8 7 6 9 9 5 8 8 7 8 9 7 7 8 3 6 3 8 9 3 7 8 9 9 9 8 7 8 8 9 9 9 9 7 
running avepool... 
REPEAT COUNT= 1
Repeat [1] time 4412.00 us per RUN. used 4412 us
print output data
3.25 6.75 7.75 3.25 6 3.25 5 4.25 3.5 5 4 4.25 4.25 3 5.5 4.5 7.25 3 5.25 3.75 4 3 4.25 7.25 3.5 5.75

3.2 tengine结果

REPEAT COUNT= 1
Repeat [1] time 2970.00 us per RUN. used 2970 us
print output data
8 8 8 5 7 7 8 7 8 8 8 7 8 4 8 7 8 7 6 9 9 5 8 8 7 8 9 7 7 8 3 6 3 8 9 3 7 8 9 9 9 8 7 8 8 9 9 9 9 7 
running avepool... 
REPEAT COUNT= 1
Repeat [1] time 857.00 us per RUN. used 857 us
print output data
3.25 6.75 7.75 3.25 6 3.25 5 4.25 3.5 5 4 4.25 4.25 3 5.5 4.5 7.25 3 5.25 3.75 4 3 4.25 7.25 3.5 5.75

这里可以看到tengine的耗时是普通halide实现的 1/(4~5),那这样说来halide不是没用,还没有原版tengine快。当然是否定的,可以优化加速(还没实现)

4. autokernel环境配置
官方给了一个docker镜像,但是我就要自己搭。

整体流程为:

  • 编译halide
  • 编译tengine
  • 编译autokernel

4.1 编译halide

地址:https://github.com/halide/Halide

  1. 安装依赖llvm
git clone --depth 1 --branch llvmorg-10.0.0 https://github.com/llvm/llvm-project.git

% mkdir llvm-build
% cd llvm-build
% cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../llvm-install \
        -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" \
        -DLLVM_TARGETS_TO_BUILD="X86;ARM;NVPTX;AArch64;Mips;Hexagon" \
        -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \
        -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \
        ../llvm-project/llvm
% cmake --build . --target install -- -j4
  1. 编译halide
% mkdir Halide-build
% cd Halide-build
% cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_DIR=/path/to/llvm-install/lib/cmake/llvm /path/to/Halide
% cmake --build .

4.2 编译tengine
我前面弄好了,直接参考官方吧:https://github.com/OAID/Tengine

4.3 编译autokernel

  1. halide算子生成
cd AutoKernel/autokernel_plugin
chmod +x -R .
./scripts/generate.sh  #自动生成算子汇编文件
  1. 编译autokernel
mkdir build
cd build
cmake ..
make -j4
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 虽然人工智能(AI)的发展和应用已经越来越广泛,但是它不能完全取代嵌入式工程师。 嵌入式工程师主要负责开发和设计嵌入式系统,这些系统通常用于控制和监测物理设备。嵌入式工程师需要具备深入的硬件和软件知识,并能够将它们结合起来,以实现各种复杂的功能。此外,嵌入式系统的设计和开发需要针对具体的应用场景进行优化,这需要嵌入式工程师具备相关的领域知识。 虽然AI可以辅助嵌入式工程师进行设计和开发,但是AI无法完全替代嵌入式工程师。因为AI缺乏人类的创造性和灵活性,而且AI不能像人类一样理解和适应具体的应用场景。因此,嵌入式工程师在设计和开发嵌入式系统时仍然具有不可替代的作用。 ### 回答2: AI的发展确实给嵌入式工程师带来了一些挑战,但不能完全取代他们。 首先,AI虽然在某些重复性高、容易规范化的任务上表现出色,但在嵌入式系统开发中,还需要工程师进行各种系统设计、架构搭建和优化等复杂工作,这是AI目前无法替代的。 此外,嵌入式工程师也需要具备跨学科的知识和技能,例如电子电路设计、嵌入式软件开发以及硬件与软件的协同调试等。这些领域对工程师具备实践经验和创造力的要求更高,AI目前难以达到这样的水平。 另外,嵌入式系统开发还涉及到与现实世界的交互,例如传感器数据的处理、机器人的控制等,这需要工程师具备与物理实体和环境交互的能力,这是AI所不具备的。 但是需要注意的是,随着AI技术的不断发展和进步,可能会在某些特定领域和任务上取代嵌入式工程师的工作,例如自动化测试、异常检测等。因此,嵌入式工程师需要不断学习和提升自己的能力,与AI技术共同进步,适应技术发展的变化。同时,嵌入式工程师也可以通过与AI技术结合,提升工作效率和质量,实现更多创新和价值创造。 总之,虽然AI有一定的替代潜力,但目前的发展水平还无法完全取代嵌入式工程师的工作,工程师的专业知识、实践经验和创造力仍然是不可替代的。 ### 回答3: AI是人工智能的缩写,是一种由计算机程序和算法构成的技术,它可以模仿人类的智能行为。嵌入式工程师是一种具有硬件和软件知识的专业人员,负责研发和设计嵌入式系统。那么,AI能否取代嵌入式工程师呢? 从目前来看,AI在某些领域已经取得了令人瞩目的进展,如自动驾驶、语音识别和机器翻译等。然而,嵌入式工程师的工作领域更加广泛,除了软件开发外,他们还需要了解电子电路原理、信号处理、嵌入式系统的设计和验证等知识。这些技能不仅需要深厚的专业知识,还需要丰富的实践经验。 尽管AI在某些任务上表现出色,但目前的AI技术仍然存在一些局限性。例如,AI的决策是基于已知数据和预设规则进行的,无法像人类一样具有创造性和灵活性。在嵌入式系统的开发过程中,工程师需要根据实际情况做出调整和优化,这是AI目前难以实现的。 此外,嵌入式工程师在系统调试和故障排除方面的经验也是不可替代的。AI虽然可以通过机器学习和数据分析的技术进行问题诊断,但没有实践经验,无法像嵌入式工程师那样快速定位和解决问题。 综上所述,AI目前还不能完全取代嵌入式工程师。虽然AI在某些特定领域有一定的替代能力,但嵌入式工程师的综合知识和实践经验是无法被AI所替代的。而且,嵌入式系统的开发需要人类的创造性和灵活性,这是AI目前无法达到的。随着AI技术的不断发展,嵌入式工程师可能会从事更高级的任务,但无法彻底取代他们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值