赞
踩
算子是一个函数空间到函数空间上的映射O:X->X;广义的讲,对任何函数进行某一项操作都可以认为是一个算子。在Caffe中,算子对应层中的计算逻辑,例如:卷积层中的卷积算法,是一个算子;全连接层中的权值求和过程,是一个算子。
算子举例:在网络模型中被用作激活函数的算子:tanh、ReLU、Sigmoid等
Tensor是算子中的数据,包括输入数据与输出数据,TensorDesc是对输入输出数据与输出数据的描述,TensorDesc数据结构包含如下属性:
属性 | 定义 |
---|---|
名称(name) | 用于定义Tensor进行索引,不同Tensor的name需要保持唯一 |
形状(shape) | Tensor的形状,比如(10,)或者(1024,1024)或者(2,3,4)等 |
数据类型(dtype) | 功能描述:指定Tensor对象的数据类型 |
数据排布格式(format) | 多个维度的排布顺序 |
张量的形状,以(D0,D1,…Dn-1)的形式表示,D0到Dn是任意的正整数
张量 | 形状 |
---|---|
1 | (0,) |
[1,2,3] | (3,) |
[[1,2],[3,4]] | (2,2) |
[[[1,2],[3,4]],[[5,6],[7,8]]] | (2,2,2) |
假设有一个shape=(4,20,20,3)。该shape表示有4张图片,宽高都是20,即20*20=400个像素,每个像素点由RGB三原色组成
AI Core
昇腾AI芯片的计算核心,负责执行矩阵、向量、标量计算密集的算子任务,采用达芬奇架构。Ascend 310集成了2个AI Core
ARM CPU核心
集成了8个ARM A55。其中一部分部署为AI CPU,负责执行不适合跑在AI Core上的算子(承担非矩阵类复杂计算);一部分部署为专用于控制芯片整体运行的控制CPU。两类任务占用的CPU核数可由软件根据系统实际运行情况动态分配。此外,还部署了一个专用CPU作为任务调度器(Task Scheduler,TS),以实现计算任务在AI Core上的高效分配和调度;该CPU专门服务于AI Core和AI CPU,不承担任何其他工作
CANN算子
NPU算子:通过TBE编译器编译后,可以运行在Device NPU中的AI Core上算子
CPU算子:通过GCC编译器编译后,可以运行在Host CPU和Device NPU中的AICPU上的算子
AI CPU算子,是指运行在昇腾AI处理器AI CPU计算单元上的表达一个完整计算逻辑的运算,需要开发者自定义AI CPU算子的情况主要有以下两种:
流程说明:
关键概念:
AI CPU算子开发流程-算子分析
使用AI CPU方式开发算子前,先确定算子功能、输入、输出、算子开发方式、算子类型以及算子实现函数名称等
1.明确算子的功能,若涉及到数学表达式,需要分析数学表达式
例如:
z = x < y ? true : false
2.明确输入和输出
REG_OP(Less)
.INPUT(X1,TensorType({DT_FLOAT,DT_FLOAT16,DT_DOUBLE,DT_UINT8,DT_INT8,DT_UINT16,DT_INT16,DT_INT32,DT_INT64}))
.INPUT(X2,TensorType({DT_FLOAT,DT_FLOAT16,DT_DOUBLE,DT_UINT8,DT_INT8,DT_UINT16,DT_INT16,DT_INT32,DT_INT64}))
.OUTPUT(y,TensorType({DT_BOOL}))
.OP_END_FACTORY_REG(Less)
3.明确算子实现文件名称以及算子的类型(OpType)
算子类型 | 算子名称、形状 | data type | 数据排布格式 |
---|---|---|---|
算子输入 | name:x1;shape:all | float16、float32、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 | NCHW、NHWC、ND |
算子输入 | name:x2;shape:all | float16、float32、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 | NCHW、NHWC、ND |
算子输出 | name:y;shape:all | bool | NCHW、NHWC、ND |
算子实现文件名称 | less |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。