1. 引言
人工智能毫无疑问是当今科技领域最热门的技术之一。人工智能技术已经逐渐从实验室的研究走向了产业化,进入到了人们的日常生活中。继互联网和移动互联网引发第三次工业革命之后,以大数据驱动的人工智能技术正在推动第四次工业革命,这场技术革命的核心是网络化、信息化与智能化的深度融合。从CV领用开始兴起,到自然语言处理、生成对抗模型,再到现在蓬勃发展的大语言模型,随着人工智能大模型的快速发展,算力需求呈现出爆发式增长,传统的CPU芯片已经无法满足算力增长的需求,异构加速卡成为当前大模型领域最常用的计算硬件。
2. 人工智能基础硬件
当前大模型主要是使用的加速卡从架构上可以分为GPGPU和NPU两大阵营,其中GPGPU以国际大厂NVIDIA为代表,而NPU以国内厂商寒武纪MLU、华为Ascend系列等加速卡为代表。
GPGPU源自于图形计算领域,其发展较早,具有如下特点:
- GPGPU具备强大的并行计算能力,特别适合于处理AI计算中大量的矩阵运算任务。例如,在Transformer模型的训练和推理过程中,GPGPU能够显著加速计算过程,满足模型对高性能计算的需求
- 由于发展较早GPGPU在深度学习领域拥有成熟的软件生态和编译工具链。这些工具和库为研究人员和工程师提供了丰富的API和框架,极大地方便了模型的开发和优化。
- GPGPU具有广泛的泛用性,其不仅适用于AI领域,还可以用于其他计算密集型任务,如大规模数据集的科学和工程计算等,这使得GPGPU具有更广泛的应用前景和市场需求。
NPU最初是专为深度学习和人工智能任务设计的专用处理器。与GPGPU不同,NPU在设计之初便专注于加速神经网络的推理和训练过程,其架构特点如下:
- 专门为加速神经网络计算而设计的芯片,能够高效地处理AI计算中的大量神经网络推理和训练任务。NPU通过集成大量的乘加单元和加大片内缓存,减少了数据IO瓶颈
- 由于专注于特定任务,NPU的功耗通常比GPGPU更低,而在特定深度学习任务上的性能表现可能更优
- NPU通常配备更多的片上内存(On-Chip Memory),以减少数据传输的延迟,提高数据处理效率。
3. GPGPU vs NPU硬件架构解析
为了更好的了解的国内外主流的大模型AI芯片,本文以NVIDIA A100 GPGPU和华为Ascend 910B NPU为例,详细对比分析GPGPU和NPU底层硬件架构和设计的区别,对比分析硬件参数信息及软件生态等,并探讨其在AI大模型等应用领域中的优势和劣势。
NVIDIA GPU是GPGPU架构的代表,其最初专注于图形处理计算单元,随后通过Tesla芯片转向通用计算芯片(GPGPU),最终也逐步提升了其AI计算能力。
NVIDIA A100 GPU是NVIDIA Ampere架构的旗舰产品,A100 TensorCore 版GPU拥有108个SM,在GPU的每个SM都配备了大量的CUDA核心和Tensor核心,这些核心专门用于执行图形通用计算和AI张量计算任务。如下图所示:
深入到SM的架构中,A100 GPU每个SM中有4个Tensor Core,每个Tensor Core在每个时钟周期内可执行4x8x8个FP16/FP32 FMA计算,因此一个SM可以提供1024个密集的FP16/FP32 FMA操作,A100共有108个SM。如下图所示:
在显存方面,A100 GPU配置了HBM2显存堆栈,GPU卡间配置第三代NVLink协议和第二代NVSwitch技术,这为GPU之间的高速数据交换提供了强大的支持。
在NPU方面,Ascend 910B是华为推出的一款高性能AI处理器,专为人工智能的推理和训练任务设计。Ascend 910B采用了达芬奇架构,具有高度优化的NPU(神经网络处理单元)设计。
每个Ascend 910处理器架构中集成了多个AI Core(达芬奇AI核心)和复杂的缓存系统,还包括4个HBM 2.0内存、大量AI CPU、DVPP模块以及HCCS链路等关键组件。如下图所示:
达芬奇AI Core是Ascend 910处理器的核心计算部分,每个AI Core包括2个AI Vector向量计算单元和1个AI Cube矩阵计算单元。每个AI Vector在每个时钟周期内可以进行128次FP16计算。每个Cube Core在每个时钟周期内可执行16x16x16个FP16/FP32 FMA计算,其核心架构如下图所示:
NVIDIA A800与Ascend 910B不同精度算力对比具体如下表:
NVIDIA A100(SXM) | Ascend 910B | |
Manufacturing | 7nm | 7+nm |
Architecture | Ampere | Da Vinci |
FP 64 TFLOPS | 9.7 | NA |
FP64 Tensor Core TFLOPS | 19.5 | NA |
FP32 TFLOPS | 19.5 | 94 |
FP16 TensorCore TFLOPS | 312 | 320 |
INT8 TensorCore TFLOPS | 624 | 640 |
FP16 TensorCore TFLOPS With Sparsity | 624 | NA |
INT8 TensorCore TFLOPS With Sparsity | 1248 | NA |
从上面的架构对比可以看出,NPU芯片往往设计比GPU更大的矩阵计算单元,总的计算单元数量却大幅减少。这表明NPU在设计上更注重提升每个计算单元的计算能力和效率,适用于处理大规模的矩阵计算任务,以更大的向量或张量宽度来提升性能。与之相反,GPGPU则综合考虑通过大量的并行计算单元来处理各种通用类型的计算任务,包括图形渲染、科学计算等,部件包含向量或张量计算单元,还包含大量标量计算单元。
除此之外,目前GPGPU一般可以支持包括FP64在内的全精度计算,这也是目前NPU所不具备的,因此GPGPU相比NPU更加通用,适用性更强。虽然Ascend 910B部分精度的理论峰值接近和超过A100,在大部分实际应用场景A100适用性和性能仍然远超910B。
4. GPGPU vs NPU软件生态对比
由于发展较早,GPGPU具有远超NPU的较为完善的应用软件生态。对于NVIDIA,目前已经围绕CUDA建立了非常完善的异构软件生态。由于GPGPU初始定位为通用GPU计算,因此其核函数编写语法等更加接近传统CPU上常用的C/C++语言,可以看作C/C++语言的扩展。从AI和应用生态上来讲,CUDA具有非常丰富的应用和AI框架、各种异构库、第三方厂商等的支持,已经形成了非常完善的异构软件生态,如下图所示:
而Ascend 910B NPU采用CANN(Compute Architecture for Neural Networks)软件栈。CANN是针对AI场景推出的异构计算架构,对上支持多种AI框架,对下服务AI处理器与编程,发挥承上启下的关键作用,是Ascend AI处理器的计算平台。CANN目前是相对比较封闭的开发环境,支持较为有限的AI框架,算子等,并使用Ascend CL、Ascend C等相对底层的语言进行网络和算子开发。程序开发编写方式,编译器工具链、库函数接口等,也都与传统CPU代码差别较大。如下图所示:
5. 小结
GPGPU和NPU作为目前AI和大模型领域最重要的加速芯片架构,其具有不同的底层设计逻辑和侧重点。NPU神经网络处理单元,是专为深度学习和人工智能任务设计的专用处理器,其设计之初便专注于加速神经网络的推理和训练过程,专用计算单元中提供了位宽更宽的向量或张量计算单元。而GPGPU从通用图形计算发展而来,凭借其强大的通用计算能力和成熟的开发生态,在大规模AI训练中占据了重要地位。
与NPU相比,GPGPU架构起步更早且发展更加成熟。在计算单元方面,GPGPU计算更加均衡,其部件可以提供强大的向量/张量计算能力,而且没有忽略传统的标量计算单元,其往往可以覆盖全精度计算场景,具有更好的适用性。
从软件层面上看,GPGPU也具有更加完善的异构软件和应用生态,编程开发方式更加贴合传统CPU计算范式,具有更加丰富的应用与AI模型生态,厂商支持等。NPU目前各家厂商一般采用各自研发的闭源软件栈,整体软件生态也较为薄弱,兼容性较差,模型开发适配等需要更多的工作。