EMLL 高性能端侧机器学习计算库开源项目

我要开发同款
匿名用户2021年06月17日
33阅读
开发技术C/C++
所属分类人工智能、机器学习/深度学习
授权协议Apache

作品详情

EMLL(EdgeMLLibrary)为加速终端侧设备上机器学习的推理而设计,提供基于端侧处理器的高性能机器学习计算函数库。EMLL支持fp32、fp16、int8等数据类型,已在有道词典笔、翻译王和超级词典等硬件产品的机器翻译和语音识别引擎中应用,大幅降低了推理延迟。

特点高性能

EMLL实现的矩阵乘法函数,为端侧人工智能中常见的扁平矩阵作了专门的优化,为各常见ARM处理器作了特定的优化。对于cortex-A35/A53/A55处理器,本库针对它们的流水线特点,使用了汇编级别的优化。

下面是单精度矩阵乘法的测试结果:

矩阵乘法的通式为C[MxN]=A[MxK]B[KxN];所列数据为全行主序和全列主序的最好性能。

易用性

EMLL使用的函数接口在参数设计上力求简洁直接,矩阵乘法去掉了不常用的LD*参数,矩阵和向量的传递通过指针和整数维度分别传递。本库的构建和运行不依赖第三方计算库。

扩展性

对于矩阵乘法和量化函数,EMLL库提取了它们和架构无关的代码作为通用的宏,这些宏可以在支持新的CPU架构时大大节省所需的代码量。

EMLL应用接口

EMLL提供基于C的接口,详情请见 Usage_ZH.md。

函数类型函数名称函数参数矩阵乘法data_type+"gemm"源矩阵排列顺序,各矩阵地址,M,N,K,beta,并行线程数全连接层(单精度)"fc"src/weight/bias/output的地址,M,K,N,源矩阵排列顺序,(并行线程数)量化"quantize_"+"symmetric"/"asymmetric"+input_type+output_type输入数组,输出数组,(输出零点值),缩放值,数组大小,输入范围重量化"requantize_"+"symmetric/asymmetric"+"_XtoY"输入数组,输出数组,(输出零点值),输出缩放值,数组大小,输入范围偏置"bias"+data_type被偏置的矩阵,标量偏置,平行于主方向的向量偏置,平行于次方向的向量偏置,矩阵大小各函数支持的数据类型处理器矩阵乘法偏置量化重量化ARMv7a32-bitfp32,(u)int8fp32,int32fp32->(u)int16/(u)int8int32->(u)int16/(u)int8,int16->(u)int8ARMv8a64-bitfp32,fp16,(u)int8fp32,int32fp32->(u)int16/(u)int8int32->(u)int16/(u)int8,int16->(u)int8

EMLL支持在Linux和安卓系统上运行。

EMLL支持用GCC和Clang编译。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论