AI算法优化实践---以ncnn实现为例

前言

​ 我老爹曾经传授给我一个古老的智慧:如果你是手艺人,那么你就要对靠着吃饭的家伙式十分熟悉。自从我毕业开始从事图像方面的工作,我愈加发现这句话的重要性。我工作中接触不少算法工程师,算法设计和模型推理过程已经逐步变成黑盒模式。似乎能跑起来就是“理所因当”的,忽视效率在实际业务交付中的重要性。

​ 本系列的文章就是为了改变这种思考误区存在. 2012年AlexNet的横空出世,其中训练用的G580 3G的贡献被大大低估了。直到2023年,ChatGPT的出现,大家才猛然发现,A100在其中的贡献比例超乎想象。基本所有人都陷入数据处理效率比不上模型本身重要的误区,所有人就觉得在训练和推理模型上浪费时间是“理所应当”。

​ 但是,我拒绝。我拒绝将模型推理作为一个黑盒,所以我走向底层,去研究怎么让计算算得更快,如何减少使用指令数量来完成功能。我走向C和C++,我选择去理解计算机体系结构的应用。

​ 这系列文章的目的是编写自己的机器学习框架,所以我会从学习ncnn开始,会从C和汇编开始。我希望阅读者懂一些机器学习的基础知识,感兴趣于推理框架设计和Layer优化。

​ 本系列会先讨论密集计算的Intrinsic 和inline Assembly优化技术,进一步讨论针对某个Layer,ncnn是如何在Intel 和Arm上都进行优化的。所有代码都会按照TDD的分析方法,把Layer底层逐步拆出来进行解析。

目录

  1. Intrinsic
  2. inline Assembly
  3. Conv im2col sgemm
  4. Conv Winograd

​ ncnn Layer解析是个巨量的工程,我们会先以Conv为例,先探讨基础的矩阵优化,进一步讨论im2col_sgemm,最后我们才会到ncnn目前所使用的技术Winograd中。

补充资料

更新日志

  • 2023-04-20 更新AI算法优化总览文章

本文参与了SegmentFault 思否写作挑战赛,欢迎正在阅读的你也加入。

你可能感兴趣的:(AI算法优化实践---以ncnn实现为例)