我们真的还需要更多的AI芯片吗?
来源:内容来自「知乎」,作者:Max Lv,谢谢。
任何事物一旦进入泡沫期,就不免让人担心什么时候会崩盘,而当下的 AI 芯片已经进入公认的泡沫期。
从 ASPLOS'14 上寒武纪的 DianNao,到当下 Google 的 TPUv3,AI 芯片只花了五年时间就取得了巨大的成功。搭上 AI 算力爆发的快车道,叫嚷着摩尔定律终结,Domain Specific Architecture(领域定制架构) 似乎成了唯一的出路。
可是当无数的巨头和初创公司设计出一块又一块大同小异的 AI 芯片,我们需要回答这样一个问题:真的需要这么多 AI 芯片吗?
软件复杂度
AI 芯片的快速发展,其中一个回避不了的问题就是软件复杂度的指数级提升。很多公司花了两年甚至更短的时间做出一款芯片,却发现需要更长的时间支持繁多的框架、紧跟算法的进步,适配从手机到数据中心的各类平台。当错过了部署和量产的窗口期,即便做出了芯片也会很快落伍。
与设计通用架构不同,设计 AI 芯片这样的专用架构需要同时考虑到软件的设计和优化。芯片公司往往乐观估计了软件适配和优化的成本,指望通过中间件和编译器来解决所有问题。事实上,从 Intel 到 Google 再到 Nvidia,大量的软件工程师正被投入到适配各种平台,手动优化网络性能当中。而对于初创公司,芯片早已 tapeout 却一再延期交付的问题比比皆是。
从本质来看,当我们开始不断挖掘芯片架构的潜力时,软件层的抽象也会变的越来越困难,因为其不得不在上层抽象中引入底层的架构的模型或参数。现在的通常做法是做底层芯片架构与上层软件之间的中间件,然而开发这些中间件的代价也往往被低估。前段时间某芯片初创公司的同学咨询我,开发一套类似 TensorRT 这样的 Inference 中间件需要多少人力和多长时间?这并不是一个容易回答的问题,于是我反问他们有多少资源可以做这个项目。
令人意外的是,他的老板只给了三四个人头,因为他们假设自己已经有了一套底层的编译器和一套上层的模型转换工具,于是这样一个用于架构抽象的中间件并不需要太大力气。我猜这样的投入应该可以做出一个功能完好的产品,但我不相信最终的产品在实际应用中可以达到理想的性能指标,毕竟做芯片并不只是用来跑 ResNet-50 这样的 Benchmark。
碎片化
只需要编写一套代码即可运行在不同平台,是软件工程师们的长久诉求。不同架构的 AI 芯片带来的碎片化会极大的打击他们在实际软件产品中应用 AI 的积极性。与以往的经验不同,深度学习糟糕的解释性会带来许多意想不到的缺陷。比如这样一个常见的困扰,一个私有的模型可以在本地 CPU 上得到满意的结果,然而却在部署到某款设备后性能大幅下降。如何调试这些问题,谁来负责调试,通过怎样的工具来调试,甚至调试的工程师能否拿到私有的模型?这些问题都难以回答。
碎片化还表现在,专有架构为了挖掘绝对性能往往会放弃向前兼容性。如上文提到的中间件,它的一端是碎片化的 AI 软件框架,另一端则是一代又一代的芯片架构。如何同时维护多个部分不兼容的指令集架构,并保证每一次软件更新都能完整的覆盖所有的设备?除了投入更多的人力,别无他法。一个常见的论调是像当下的消费级芯片一样只保持一个短期的(2-3年的)软件支持,然而当下 AI 芯片的常见应用领域,如智能摄像头、工业智能、以及自动驾驶,一款芯片的生命周期可能长达十年。很难想象一家公司需要多大的量级才能提供持久的技术支持,如果预估一家初创公司活不过两三年,如何才能放心的部署其产品到一款面向消费者的量产车上?
AI 芯片只是过渡期产物
从一个软件工程师的角度,我个人坚信定制化的 AI 处理器只会是一个过渡期产物。一个统一的、可编程的、高并发的架构才应该是我们追求的方向。回想过去的二十年,我们见证了专用架构的小型机市场的萎缩,图形处理器到通用向量处理器的发展,甚至连我们的手机和电脑的平台都将趋于统一。有理由相信,现在再把资源投入到定制化的 AI 芯片绝不是一个好的投资。