EMLL

高性能端侧机器学习计算库
授权协议 Apache
开发语言 C/C++
所属分类 神经网络/人工智能、 机器学习/深度学习
软件类型 开源软件
地区 国产
投 递 者 章振
操作系统 Linux
开源组织 网易
适用人群 未知
 软件概览

EMLL(Edge ML Library)为加速终端侧设备上机器学习的推理而设计,提供基于端侧处理器的高性能机器学习计算函数库。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 被偏置的矩阵,标量偏置,平行于主方向的向量偏置,平行于次方向的向量偏置,矩阵大小

各函数支持的数据类型

处理器 矩阵乘法 偏置 量化 重量化
ARMv7a 32-bit fp32,(u)int8 fp32,int32 fp32 -> (u)int16/(u)int8 int32 -> (u)int16/(u)int8,int16 -> (u)int8
ARMv8a 64-bit fp32,fp16,(u)int8 fp32,int32 fp32 -> (u)int16/(u)int8 int32 -> (u)int16/(u)int8,int16 -> (u)int8

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

EMLL 支持用 GCC 和 Clang 编译。

 相关资料
  • 计算机编程是编写计算机程序的行为,计算机程序是使用计算机程序设计语言编写的指令序列,以通过计算机执行指定的任务。

  • Index 基本遵从《统计学习方法》一书中的符号表示。 除特别说明,默认w为行向量,x为列向量,以避免在wx 中使用转置符号;但有些公式为了更清晰区分向量与标量,依然会使用^T的上标,注意区分。 输入实例x的特征向量记为: 注意:x_i 和 x^(i) 含义不同,前者表示训练集中第 i 个实例,后者表示特征向量中的第 i 个分量;因此,通常记训练集为: 特征向量用小n表示维数,训练集用大N表示个数

  • 全程35分钟,是个女面试官,感觉气场上应该是个部门主管;无手撕算法 1.先介绍了部门情况,第一次见面试官先自我介绍的,感觉确实是个领导,有亲和力 2.自我介绍 3.拷打第一个项目,我本来想共享屏幕对着模型图讲,结果面试官说不用,我就直接讲;这个面试官理解能力很强,我讲的她基本直接就懂了,之前有的面试官要问我好几遍;然后提了一些问题 4.拷打第二个项目,主要介绍了项目整体以及一些亮点,然后问了我幻觉

  • 👥面试题目 一面 项目 cuda详细说(好久了有的忘记了说的磕磕巴巴的) 然后 讲了实习的东西 感觉和他们目前的业务比较match 基础问题 c加加和cuda的基础问题 一个膨胀卷积实现的手撕 呃问我怎么优化 没回答出来 给我讲解了我还是没明白 笑死 面试官无语 反问 两轮技术面 技术业务偏向移动端硬件优化这边 面试官比较友好 亲切 没开摄像头 希望可以进二面 跪求

  • 时长70分钟左右,主要在问项目,其他八股挺常规的 八股: transfromers和RNN, LSTM的区别 解释一下梯度爆炸和解决方法 BN和LN的区别 讲讲了解的激活函数 怎么识别 / 解决过拟合问题 XGBoost和随机森林的区别 算法题: 最长公共子串 面完第二天秒挂,可能是笔试做得太烂了

  • 本文向大家介绍机器学习中的距离计算方法?相关面试题,主要包含被问及机器学习中的距离计算方法?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 设空间中两个点为 欧式距离: cos=   切比雪夫距离:max

  • 问题答案可关注公众号 机器学习算法面试,回复“资料”即可领取啦~~ 1.机器学习理论 1.1 数学知识 1.1.1 机器学习中的距离和相似度度量方式有哪些? 1.1.2 马氏距离比欧式距离的异同点? 1.1.3 张量与矩阵的区别? 1.1.4 如何判断矩阵为正定? 1.1.5 距离的严格定义? 1.1.6 参考 1.2 学习理论 1.2.1 什么是表示学习? 1.2.2 什么是端到端学习? 1.2

  • 全程50分钟,这次是女面试官,人很好,不怎么拷打,开始时先介绍了面试流程 1.自我介绍 2.介绍第一个项目,我的是一个RAG的项目,吟唱完让我说一下项目的两个亮点,我就介绍了语义感知的文本切分和缓解幻觉的两个点,又提问了一些问题 3.介绍第二个项目,我的是一个论文项目,我直接共享桌面对着模型图讲了一遍,当然中间也穿插着提问,殊不知这次共享有几率让我寄掉 4.问一个基础问题,面试官问了我transf