不怕,我们口high从没输过。
GPGPU 的前身可以追溯到向量机,即以向量为最小数据单元做通用计算,相比之下 CPU 是在标量上做计算;GPU 适合对大量数据做相同的简单操作(所谓面向吞吐),CPU 适合对少量数据做复杂操作(所谓面向延迟)
出于图像/视频处理的需要,CPU 也引入了向量指令集叫 SIMD,而 GPGPU 相比 SIMD 除了向量规模更大之外,还有一大特点是"以标量编码以向量执行",这叫做 SIMT,由 GPU 着色器泛化而来由 CUDA 首次引入;因为标量编码是最常见的编程模型,所以很多现成的 C/C++ 代码可以直接在 CUDA 中使用同时得到了数据级并行的能力,这是 CUDA/OpenCL 能大行其道的原因,门槛和工作量远远比 SIMD 低
既然 CPU/GPGPU 已经通用到可以直接运行 C/C++ 这些图灵完备的语言,也就不难理解任何基于 C 语言实现的算法包括深度学习都能够运行于 CPU/GPU 之上,此为深度学习算法的软实现(可编程);相比之下,NPU 可以视作 GPGPU 的一种深度学习算法定制优化设备(Tensor 本来就是高维向量,由向量机来实现也很自然),即根据深度学习计算的特点,定制一些硬件部件,比如直接提供乘累加/矩阵乘/向量内积/向量外积甚至卷积单元(算得快),比如提供16位浮点8比特定点甚至1比特精度的数据类型(不像超算上的一些算法要求64位浮点精度),比如提供上百 MB 的 SRAM 直接将模型置于其中避免绝大部分存储器访问(又快功耗又低);换句话说,NPU 可以无所不用其极的去挖掘深度学习计算的特点并将其固化,而通用计算设备如 CPU/GPGPU 会倾向于只提供有限的扩展指令尽量软实现各种操作,目前 Intel/Nvidia 的共识是只要提供矩阵乘单元,然后将主要的计算密集算子规约为矩阵乘,就足以得到与 NPU 匹敌的深度学习性能了
nv 用的还是 gpu... 只是里面有块 asic 叫 tensorcore,每次新卡必升级,性能至少翻倍,计算性能和成本领先各家自研芯片,且软件生态完善... 实际上各家自研芯片一般只用于推理,训练多半还是交给 nv 的 gpu,因为训练要求的精度高;即便是推理,面对 tensorcore 的快速迭代,很多自研团队撑死就打个时间差,nv 新品一发布就可能被反杀... 正是由于来自 nv 的压力,哪怕是推理,各大厂所谓自研芯片,都未必能在内部大范围推开,只解决有无问题,更可能是昙花一现只在于过期 ppt 中耍威风
补充一下,即便是大厂,有自研npu,cpu 推理仍然不可或缺。
实际上推理任务并不孤立,需要和上下文中的其他任务交互,而交互的通信代价可能巨大,一般而言推理问题越小交互代价相对越大,所以小问题倾向于放在通用计算设备上做,只有足够大的问题才卸载到其他异构设备如 gpu/npu
根据设备的计算能力/通信代价,可以把问题划分为 小/中/大 三个级别,分别交给 cpu、cpu协处理器(苹果和intel的amx,arm在指令集层面预留的sme)、gpu(nv的tensorcore性能是顶尖的,amd暂时掉队)/npu,具体任务归为哪个级别没有简单标准,但总体而言npu由于可编程性/向后兼容性差往往可用性最低
nv gpu 从 turing(rtx 20系列) 和 volta (v100)开始就有 tensorcore 了,硬件做矩阵乘,后面三代卡每次性能又翻倍、同时引入其他数据类型支持;所以从性能上讲一般自研芯片没优势,成本上有,但前提是你的软硬件都得跟得上 nv 2年翻一倍的迭代,业务团队或者说计算中台需要同时集成自研卡和nv gpu以便一键切换,因为自研往往不但场景受限其所谓"优势"可能到nv新卡发布就截止了