前言
我老爹已经传授给我一个古老的智慧:如果你是手艺人,那么你就要对靠着吃饭的家伙式非常相熟。自从我毕业开始从事图像方面的工作,我更加发现这句话的重要性。我工作中接触不少算法工程师,算法设计和模型推理过程曾经逐渐变成黑盒模式。仿佛能跑起来就是“理所因当”的,漠视效率在理论业务交付中的重要性。
本系列的文章就是为了扭转这种思考误区存在. 2012 年 AlexNet 的横空出世,其中训练用的 G580 3G 的奉献被大大低估了。直到 2023 年,ChatGPT 的呈现,大家才猛然发现,A100 在其中的奉献比例超乎设想。根本所有人都陷入数据处理效率比不上模型自身重要的误区,所有人就感觉在训练和推理模型上浪费时间是“理所应当”。
然而,我回绝。我回绝将模型推理作为一个黑盒,所以我走向底层,去钻研怎么让计算算得更快,如何缩小应用指令数量来实现性能。我走向 C 和 C ++,我抉择去了解计算机体系结构的利用。
这系列文章的目标是编写本人的机器学习框架,所以我会从学习 ncnn 开始,会从 C 和汇编开始。我心愿阅读者懂一些机器学习的基础知识,感兴趣于推理框架设计和 Layer 优化。
本系列会先探讨密集计算的 Intrinsic 和 inline Assembly 优化技术,进一步探讨针对某个 Layer,ncnn 是如何在 Intel 和 Arm 上都进行优化的。所有代码都会依照 TDD 的分析方法,把 Layer 底层逐渐拆出来进行解析。
目录
- Intrinsic
- inline Assembly
- Conv im2col sgemm
- Conv Winograd
ncnn Layer 解析是个巨量的工程,咱们会先以 Conv 为例, 先探讨根底的矩阵优化,进一步探讨 im2col_sgemm, 最初咱们才会到 ncnn 目前所应用的技术 Winograd 中。
补充材料
- ncnn
- GiantPandaCV
-
algorithmica
感激以上材料的作者,及材料自私的 contributors
更新日志
- 2023-04-20 更新 AI 算法优化总览文章
本文参加了 SegmentFault 思否写作挑战赛,欢送正在浏览的你也退出。