|
这部分是属于基础知识,如果了解可以直接跳过到第二部分。•FLOPS (Floating Point Operations Per Second):测量计算设备每秒执行浮点运算的能力。例如,60 GFLOPS 表示每秒可以执行60 × 10^9次浮点运算。•TOPs (Tera Operations Per Second):测量计算设备每秒执行操作的能力,通常用于NPU和其他加速器。例如,16 TOPs 表示每秒可以执行16 × 10^12次操作。•DMIPS (Dhrystone MIPS):测量CPU整数运算性能的指标,主要用于反映CPU在执行Dhrystone基准测试中的性能。DMIPS与FLOPS之间没有直接的转换关系,因为它们测量的是不同类型的运算性能。通常,假设1 DMIPS ≈ 1 FLOPS 或1 DMIPS ≈ 0.5 FLOPS是简化计算的常见方法,但实际情况依赖于具体CPU架构。•内存带宽:决定了数据在内存和处理单元之间传输的速度。例如,LPDDR5, 64-bit @ 6400 MT/s ≈ 51.2 GB/s 表示每秒可以传输51.2 GB的数据。•数据传输时间:数据传输时间 = 数据量 / 内存带宽。例如,传输1.4 GB数据需要的时间 = 1.4 GB / 51.2 GB/s ≈ 0.027秒。•并行处理:CPU和NPU通常具有并行处理能力,可以同时处理多个任务。例如,4核CPU可以并行处理4个任务。•缓存:现代CPU和NPU通常有缓存用于存储频繁访问的数据,以减少内存访问延迟。 •模型架构:不同的模型架构(如Transformer、RNN等)对计算量和内存访问模式有不同的要求。例如,Transformer模型通常需要大量的矩阵乘法操作。
接下来我们通过数学计算的方式来推演端侧大模型分别在CPU和NPU的推理性能,为了方便计算,我们做基于以下背景进行验证:1.模型参数: 2.8B(2.8 × 10^9)参数 4. NPU性能: 16 TOPs(16 × 10^12 操作/秒) 6. 内存带宽: LPDDR5 64-bit @ 6400 MT/s ≈ 51.2 GB/s •模型参数量:2.8B(2.8 × 10^9)个参数•每个参数的运算量:假设每个参数需要2次基本操作(1次乘法和1次加法)公式 总运算量= 2.8*10^9(参数)* 2 (操作/参数) = 5.6* 10^9 (操作) |
公式 总计算量 = 5.6* 10^9 (操作)* 250 (tokens) = 1.4* 10^{12) (操作) | •CPU性能:每核15K DMIPS,4核,总计60K DMIPS •假设1 DMIPS ≈ 1 FLOPS(为了简化计算)公式 每秒计算能力= 60K* 10^6 (FLOPS) = 60* 10^9 (FLOPS) |
公式 计算时间 =总计算量/每秒计算能力= (1.4* 10^12) / (60* 10^9) = 23.33 (秒) | •内存带宽:LPDDR5, 64-bit @ 6400 MT/s ≈ 51.2 GB/s公式 总数据传输量 = 1.4 GB(模型存储需求) + 8 KB(输入数据存储需求) ≈ 1.4 (GB) |
Plain Text 数据传输时间 = 1.4 (GB)/51.2 (GB/s) ≈ 0.027 (秒) |
公式 总推理时间 ≈ 23.33 (秒) + 0.027 (秒) ≈ 23.357 (秒) | •NPU性能:16 TOPs = 16 × 10^12 操作/秒公式 计算时间 = 总计算量/每秒计算能力= 1.4* 10^12/16* 10^12(秒) = 0.0875 (秒) | •CPU的推理时间: 约23.357秒(综合计算时间和内存带宽影响)•NPU的推理时间: 约0.0875秒(内存带宽影响较小)从这个结果来看,涉及大量计算的场景,NPU 的性能和成本明显优于 CPU。上面的计算过程做了较多的计算模型简化,从计算严谨性的角度,这里把影响结果的前提假设梳理出来供大家参考。○DMIPS(Dhrystone MIPS)是测量整数运算性能的指标,通常不能直接转换为FLOPS(浮点运算性能)。○我们假设1 DMIPS ≈ 1 FLOPS 或1 DMIPS ≈ 0.5 FLOPS,这可能导致误差。实际情况依赖于具体CPU架构。○假设每个参数需要2次基本操作(1次乘法和1次加法),这可能低估了实际运算量。实际的深度学习计算涉及更多复杂操作。 ○现代CPU和NPU通常有缓存、流水线等硬件优化,可能显著影响实际推理时间。○内存带宽影响数据传输速度,假设数据传输和计算是独立的,实际中两者可能同时进行。○实际模型架构(如Transformer、RNN等)会影响计算量和内存访问模式。从结果可以看到,对于计算量要求高的推理场景,NPU 更适合于 CPU。但在实际工程化过程中,并不会完全放弃 CPU 而只用 NPU。行业内更多的是将 NPU 集成到 SoC 上,让 NPU、CPU、GPU 共同完成复杂任务。在实际工程化过程中,甚至会选择将一部分推理任务放在 CPU 上进行。
|