近日,昆仑芯科技应邀出席百度技术沙龙第99期“智能芯片”专场:昆仑芯一周年——构筑国产数智基石,AI算力赋能千行百业。四位专家首次同台,揭秘十年磨一剑的中国芯的神秘技术面纱,并系统介绍昆仑芯两代产品赋能千行百业的最新成果及应用实践。
本篇以下内容整理于沙龙第三位演讲嘉宾——昆仑芯科技基础工具链开发负责人张钊题为“强大易用的昆仑芯软件栈助力生态发展”直播分享。
昆仑芯科技基础工具链开发负责人张钊
我是昆仑芯科技基础工具链开发负责人张钊,今天分享昆仑芯软件栈的相关内容,主要包含以下四个部分:
1)昆仑芯的硬件架构,包括最新一代昆仑芯XPU-R架构以及其中的计算部分和存储部分。
2)昆仑芯的软件栈,包括运行时环境、开发套件、高性能加速库、通信库和图编译加速库。
3)昆仑芯的编程模型,包括编程模型、内存层级和算子开发的方法。
4)昆仑芯和上层框架的合作,主要包括适配的方法和当前支持推理和训练的场景情况。
昆仑芯的硬件架构
第一部分,再次强调我们的新一代昆仑芯XPU-R架构,主要是为了更好地了解软件栈。
昆仑芯XPU-R架构,大体分为计算、存储、互联和接口四个部分。
计算部分主要有SDNN和Cluster。这里面的SDNN就是软件定义的神经网络引擎,是自研核心张量计算单元,加速卷积和矩阵乘法的计算。Cluster主要负责除了卷积和矩阵乘法之外的通用计算部分。
存储部分主要包括GDDR6和SharedMemory,GDDR6是高速内存,提供了GB/s的存储带宽,具有较高的能效比和性价比。SharedMemory是片上的共享内存,保证所有计算单元高并发、低延时的访问。
片间互联提供了高速的芯片间互联,有效地支持大规模、分布式的训练,减少通信的延迟。
接口支持PCIe4.0,同时也兼容PCIe3.0,可以灵活适配业界已经上市的一些AI的服务器。
这一代的架构XPU-R是采用SDNN加Cluster的融合架构,既有通用性,也兼顾了高性能。作为第二代架构持续优化,进一步提升了计算性能,同时也增强了灵活的编程能力和通用性。
接下来看一下芯片架构的计算部分。XPU-R主要包含有8个Cluster单元和6个SDNN单元。Cluster单元主要承担通用计算任务,支持SIMD指令,提供通用和灵活的编程能力。SDNN主要承担MAC类计算和EW类计算,提供TFLOPS
FP16的算力。当然,SDNN也具有灵活的可编程性,能够轻松实现卷积、矩阵乘法、向量计算等功能。架构中的存储部分,重点看片上高速存储和外存GDDR6。L3SRAM作为片上高速共享存储,容量为64MB,能够被Cluster和SDNN共享访问。它能够提供比片外GDDR6更低的延时和更高的带宽。在我们软件编程过程中,用好L3SRAM是提高性能非常重要的手段之一。GDDR6不同的产品形态有不同的容量,比如16GB版本、32GB版本,能够被Cluster和SDNN共享访问。GDDR6作为主要的存储单元,与L3SRAM的管理基本一致。
昆仑芯的软件栈
接下来进入核心的第二部分——昆仑芯的软件栈。下图是昆仑芯软件栈架构图。
在应用层,我们支持深度学习模型的训练和推理,也支持视频智能分析以及一些科学计算。
在框架层,我们深度适配PaddlePaddle(百度飞桨),同时也支持常见的开源框架,如PyTorch、TensorFlow、ONNX等。
中间部分是昆仑芯的SDK——从下到上包括昆仑芯的驱动、虚拟化模块,还有昆仑芯的运行时库,再往上是昆仑芯的一个以编译器为核心的开发者套件、图编译引擎、高性能算子库和高性能通信库的部分。
之下的硬件部分是昆仑芯AI加速卡。
部署环境方面,支持公有云、计算中心和边缘设备等。
接下来围绕SDK中的各个模块展开,分别介绍各个模块的功能和作用。
昆仑芯的运行时环境这个模块主要包括昆仑芯AI芯片的底层驱动,这是一个内核态的程序;也提供了方便易用的RuntimeAPI,这个是用户态的程序;同时昆仑芯运行时环境包含了大量的管理工具,包括监控、测试、debugger和profiler,这样能更好提升昆仑芯板卡的可操控性,也为上层提供灵活的应用接口。昆仑芯运行时环境主要的特性包括支持多stream、支持SR-IOV虚拟化,也支持event的同步。昆仑芯的运行时环境支持多个平台,如常见的x86-64平台、Arm64平台,也适配国产主流平台。
昆仑芯的模拟器实现了对昆仑芯AI芯片的完全模拟,使用上是由上层的昆仑芯运行时根据上层的配置进行AI加速卡和模拟器之间的控制切换,主要包括了对计算和存储单元的模拟、昆仑芯芯片运行时环境的完全模拟。同时,昆仑芯的模拟器可以提供丰富的工具,包括debugger、profiler和测试工具,既实现了功能级模拟,做到了比特级的精确对齐,也提供了相应的性能模拟,做到计算模块的性能cycle级对齐的水准。同时它支持多个应用场景,包括一些软件栈的功能验证、Kernel的开发和调试,以及Kernel性能的评估和优化。同时,昆仑芯模拟器可以做到和芯片无缝切换。
昆仑芯开发套件是以编译器为核心的一组开发套件,作为昆仑芯的基础工具链,它是基于LLVM开发的,实现了定制化的Clang前端并适配了昆仑芯XPU后端。它是一套完整的工具链,包括编译器、汇编器、linker、