为旌科技:工欲善其事,必先利其器,工具链加速工程落地
工具链为芯片编程提供开发环境以及编译、库函数、调试等一整套工具。可以帮助开发者或工程师在执行如建模、仿真、编译、调试等任务时更加高效,并确保最终产品的正确性和质量。
对于一款可编程芯片而言,工具链的好坏直接影响芯片的工程开发效率,进而影响产品市场。一方面,芯片用户直接基于工具链开发程序,其界面友好性,功能完备性等直接影响着用户对芯片的使用。另一方面,芯片性能的发挥,也在很大程度上依赖于工具链的性能。
在工具链中,编译器是其中重要的组成部分。程序员平时使用的如C语言,JAVA,Python等高级语言是不能直接被芯片识别的,编译器的主要作用就是将高级编程语言转换为硬件能够理解的二进制机器码。
随着人工智能的迅速发展,AI算法逐渐进入主流市场,同一个硬件平台会运行数十个甚至上百个不同的AI模型,同样的,这些模型不能被芯片直接识别,为了将不同的AI模型转化为芯片可识别的统一代码,AI编译器应运而生。AI编译器与传统编译器的本质是一样的,并且在实际应用中两者会配合使用:AI编译器在IR层(IR:Intermediate Representation ,中间表示层)上面,对model进行优化后,通常会有lowering的过程,将优化后的High-Level IR,转换成传统编译器的Low-Level IR,然后通过传统编译器,最终生成机器码。
工欲善其事必先利其器,工具链作为工程师语言与硬件的桥梁,对于工程快速落地有着举足轻重的影响。为旌御行系列智能驾驶芯片于去年12月正式发布,其特点是“好用、易用、耐用”,为客户提供高性能异构系统的“好用”、满足功能安全和车规可靠性要求的“耐用”的芯片平台,而配套的为旌星图工具链则承担了“易用”的重担,主打简单易用,助力基于为旌御行芯片平台的工程开发快速落地。
01为旌星图工具链运行流程
为旌星图TM工具链针对为旌全自研天权NPU硬件平台开发,旨在帮助用户将神经网络模型高效、快速地部署到为旌天权TMNPU上进行加速处理。为旌星图TM工具链充分利用为旌天权TMNPU所特有的高集成度自定义指令集,从而确保深度学习网络模型能够得到高性能执行。
为旌天权TMNPU是一款专为深度学习算法优化加速而设计的硬件单元,其广泛兼容并支持当前主流公开的神经网络以及各类常见算子,涵盖了深度学习卷积神经网络和Transformer网络。
为旌星图TM工具链的基本组件及其运行流程如下图所示:
星图工具链包含了四个关键组件:星图量化工具、星图编译器、精度评估工具以及性能评估工具,各个组件通过调度协作,完成从原始网络模型到板端可部署离线模型文件的转换,其中:
星图量化工具对模型进行量化处理;
星图编译器将量化的模型转化为高效的目标代码;
精度评估工具确保量化过程中模型预测能力的损失,可控制在接受范围内;
性能评估工具对生成的离线模型文件进行详尽测试,以保证其在目标硬件上的实际运行效率。
通过上述流程,最终得到可在芯片板端设备上稳定、高效部署的离线模型文件。
02为旌星图工具链的量化
量化是一种用于深度学习模型压缩和加速的技术,它通过将原本使用32位浮点数表示的模型权重和激活数据转换为较低精度的定点数据格式(如INT8、INT16或FP16),在不显著影响模型预测准确率的前提下,减少模型大小,并增强其运行效率。这一过程有助于实现多个重要目标:增加压缩模型存储容量,减小网络传输负载,加快计算速度,从而在部署于资源有限的设备上时,能够确保高效的推理性能。
星图量化工具是对ONNX模型进行量化的解决方案,它集成了多种量化策略与功能模块,总体结构和工作流程如下图所示:
为旌星图工具链支持训练后量化(PTQ:Post Training Quantization)和量化感知训练(QTA:Quantization Aware Training):
训练后量化(PTQ):此功能允许用户在模型训练完成后进行量化处理,无需重新训练模型,根据为旌天权NPU硬件特性,通过丰富的量化算法对模型参数进行量化,最终得到满足精度要求的量化参数。
量化感知训练(QAT):相较于PTQ,QAT在模型训练阶段就引入了量化操作,使得模型能够在模拟量化环境下训练,不断调整量化参数使得损失函数最小化,达到全局最优解。
但不管是选择PTQ, 还是QAT,都不可避免带来精度损失,星图工具链根据为旌天权NPU的硬件特性,可通过丰富的量化算法对模型参数进行量化,并给出量化的详细评估报告。
在数据输入阶段,量化工具接收未经量化的ONNX(以ONNX格式存储的训练后模型,计算精度为float32)格式浮点模型作为起点,同时利用校准数据集进行精度校验。之后选择量化模式,输出量化参数表以及ONNX浮点部署模型,并借助内置的量化精度对分工具和模型准确度度量工具,对量化后的模型性能进行全面细致的评估,生成详细的评估报告。
在评估过程中,若发现某些层的量化效果未达到预期精度要求,则可针对这些特定层实施混合精度量化策略。通过评估网络层的敏感度来指导量化,使得对模型性能影响较大的层保持较高的精度,而对性能影响较小的层则可以使用较低的精度,从而在减少模型大小和提高推理速度的同时,尽可能地保持模型的性能。
同时,针对不符合精度要求的模型层可选择不同量化算法或位宽,通过调整相关层的量化配置参数,通过不断迭代优化直至模型整体量化精度满足设定标准。此方案可高效解决精度损失问题,且用户无感知。
03为旌星图工具链编译器
为旌星图TM编译器以发挥NPU硬件的最佳性能为目标,其主要功能是对训练完成的ONNX浮点模型进行一系列深度优化和定制化的硬件适配,最终生成芯片板端可运行的模型文件:Megrez模型。Megrez模型是星图工具链生成的模型文件,文件格式为.mgz,包含NPU指令,模型参数等信息。该模型可以直接部署在为旌天权NPU上运行。
在编译过程中,为充分发挥芯片NPU算力,为旌星图TM采用以下方案来提高MAC利用率:
分层级图优化:首先在High-Level IR层,进行与硬件无关的图优化(如规范化操作,公共子表达消除等)以完成编译器优化,之后下降到Low-Level IR层,依据NPU的硬件特性执行针对性图优化策略,包括算子融合、算子拆分、算子替换等操作;
分层组:根据Cost Model,使用动态规划搜索的方法,对模型的各层进行分层组,降低内存的访问带宽;
精细化切片:对各层组进行精细化切片,提高运算效率;
时间步并行:进行时间步并行优化,提升模型运行效率;
同时,面对算子的多样性,星图编译器拥有强大的兼容性和可扩展能力,当遇到不支持的算子时,为旌星图TM支持用户自定义算子解决方案,用户可以在硬件支持的范围内以插件的形式,添加自定义的CPU/NPU算子。
此外,为旌星图TM还支持精细化编译性能调优,用户可自行定制Cost Model,通过插件形式接入编译器后,星图编译器可针对用户模型进行更精细化的分组、分片、时间步并行等操作,完成定制化性能调优。
04为旌星图加速工程落地、
除了芯片本身的性能参数外,工具链围绕芯片构建的整个软件环境,对于芯片的实际效用、市场份额、用户接纳度以及最终的商业成功起着至关重要的作用。
为旌星图TM工具链的构建与应用,将极大提升模型部署的效率与质量,有效缩短客户的开发周期,降低开发成本。通过整合端到端的解决方案,企业可以更加专注于业务逻辑与模型创新,而无需过多关注底层基础设施和运维难题,从而加速AI技术驱动的业务转型和升级。
为旌星图TM工具链架构层