做 AI 算法调优一些年了,这些年中接触了不少模型,也做过不少在 ASIC 芯片进行模型加速的案例。
在接触的模型中,有一些模型有着非常奇怪的分支结构,有的还有奇怪的 tensor shape,还有的有这奇怪的自定义算法。但在模型优化时,为了将一个 AI 模型性能调到最优,也是无所不用其极,能用到的办法几乎都会尝试一遍。
但是,有方法不代表有效。
很多时候,在一个 AI 平台上有效的优化手段,换到了另一个平台上就失效了。就好像我们可以在 Intel CPU 上使用 avx2 指令集来做优化,但是换到 GPU 上就不行,因为它不支持这个指令集。
其实现在,整个 AI 模型的开发和优化,越来越往软硬协同方向发展。什么意思呢?
大概就是,在设计硬件架构和芯片指令集的时候,就需要软件人员参与进来,而不是硬件人员埋头设计。要软硬件开发人员一起来设计,这就要求硬件人员懂算法和软件,软件人员懂硬件结构。 这样设计出来的芯片,在软件同事进行算法开发时,才能发挥出最大的硬件潜能,才能榨干芯片的每一处性能。
这也是为什么很多大厂,比如特斯拉都在自研芯片。一方面是为了摆脱对芯片厂家的依赖,另一方面则是,可以依照自己家独特的算法,比如一些自定义算法或模型,自定义的设计更适用于自家业务的芯片结构,这样做出来的产品性能才好。
工作这些年,有幸参与过一些 AI 芯片的硬件设计讨论,也有幸参与过一些软件方案的设计,下面就谈一下我对这方面的感想吧,写的随意,权当随笔了。
AI 软件栈
说到 AI 的软件,你会想到哪里?是