AI芯片: 神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速
?
神经网络编译器组成:编译器、图表示、图优化、计算优化、代码生成。
?
问题: 如何将高级别的神经网络模型有效转换为在多种硬件上运行的优化代码?
ONNX的角色:
神经网络编译器的角色:
协同工作流程:
总结:
?
【图表示】:
ONNX 两个主要的 Protobuf 协议对象:TensorProto、AttributeProto。
TensorProto:
AttributeProto:
这些协议对象是ONNX标准的一部分,使得ONNX能够以一种跨平台、跨语言的方式精确地表示神经网络模型的结构和权重。
它们使得模型可以从一个框架转换并在另一个框架中使用,这对于深度学习模型的共享和部署至关重要。
【图优化】:
死代码消除: 移除那些不会影响最终输出的操作,比如未使用的变量或操作。
公共子表达式消除: 检测并合并计算图中重复的表达式,以节省计算资源。
内存优化: 优化数据的存储和访问方式,减少内存使用量,例如通过就地操作(in-place operations)来减少不必要的数据复制。
层次融合: 类似节点融合,但在更高的层次上,比如将多层网络结构融合以减少中间数据的存储和传递。
操作调度: 优化操作的执行顺序,以提高硬件的使用效率,减少等待时间。
数据布局转换: 改变数据在内存中的排列方式(如NCHW到NHWC),以适配硬件特性,提高内存访问效率。
算子融合: 把能够一起执行的多个算子合并为一个算子,以减少内存访问和改善缓存使用。
精度优化: 根据需要将数据类型从高精度(如float64)降低到低精度(如float16或INT8),以加快计算速度并减少内存使用,特别是在支持低精度计算的硬件上。
所有这些优化都是为了减少计算量、提高执行速度、减少内存占用,并最大化硬件利用率。
【计算优化】:
首先,三个独立的数据向量(A0, A1, A2, A3),(B0, B1, B2, B3),和(C0, C1, C2, C3)被加载到SIMD寄存器中。这通常使用如_mm_loadu_ps
这样的指令完成,它可以从非对齐的内存地址加载多个浮点数到一个SIMD寄存器。
接下来,使用SIMD加法指令(如_mm_add_ps
)对这些向量进行逐元素加法操作。这样,每个数据向量中相应的元素将被加在一起。
然后,使用SIMD水平加法指令(如_mm_hadd_ps
),对加法的结果进行进一步的组合。水平加法将一个SIMD寄存器中的相邻元素加在一起。
最后,使用如_mm_store_ss
这样的指令,将计算的结果存回内存中。
循环展开(Loop Unrolling):
内存访问优化:
算术强度提升(Increase Arithmetic Intensity):
算子融合(Operator Fusion):
内核融合(Kernel Fusion):
延迟执行(Lazy Evaluation):
精确度与混合精度训练(Precision and Mixed-Precision Training):
特定硬件优化:
编译时优化(Compile-time Optimizations):
动态张量重用(Dynamic Tensor Rematerialization):
消除重复计算:对于一个均值池化,那么橘色部分就是重复计算的,可以通过优化消除重复计算
?
所以,就有了 — 神经网络编译器。
是专门用于优化和部署神经网络模型的编译器。
可以将训练好的神经网络模型转换成针对特定硬件(如CPU、GPU、移动设备等)优化的执行代码。
TVM:https://tvm.apache.org/docs/install/index.html
是一个开源的神经网络编译器框架,它可以将各种深度学习模型(如TensorFlow、PyTorch、MXNet等的模型)编译成优化的代码,以在多种硬件上运行,包括CPU、GPU、FPGA等。
TVM特别强调自动化的性能优化,使用了一种叫做AutoTVM的系统自动调整模型参数以适应不同的硬件配置。
NCNN:https://github.com/Tencent/ncnn/wiki/how-to-build#build-for-linux
由腾讯优化的一个轻量级深度学习框架,专门用于移动设备和边缘计算设备。
它不依赖于第三方库,非常适合于移动应用。
NCNN特别关注于在低功耗设备上的高性能运行,它通过优化网络的内存使用和计算速度,使得模型在移动设备上能够快速且有效地执行。
MNN:https://www.yuque.com/mnn/cn
由阿里巴巴开源的深度学习框架,旨在帮助开发者在端侧设备上部署AI模型。
MNN的主要特点是支持多平台和多后端,能够在各种设备上运行,如iOS和Android手机、服务器和IoT设备。
它通过优化计算图,减少内存占用,并提供多种量化方案以适应不同的应用需求。
?
从结构调整到参数精度的多个层面。
目标是在保持模型性能的同时,减少模型的计算负担和存储需求,特别适用于资源受限的环境,如移动设备和边缘计算平台。
每种技术都有其独特的优点和适用场景,在实际应用中往往需要结合多种技术来达到最佳效果。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?