24. 附录02:TpuLang的基本元素
本章将介绍TpuLang程序的基本元素:Tensor、Scalar、Control Functions和Operator。
24.1. 张量(Tensor)
TpuLang中Tensor的name, data, data type, tensor type均最多只能声明或者设置1次。
一般情况下推荐创建Tensor不指定Name,以免因为Name相同导致问题。 只有在必须指定Name时,才需要在创建Tensor时指定Name。
对于作为Operator输出的Tensor,可以不指定shape,因为Operator会自行推导。 即使指定了shape,若Tensor是Operator的输出,则同样由Operator自行推导并修改。
TpuLang中Tensor的定义如下:
class Tensor: def __init__(self, shape: list = [], name: str = None, ttype="neuron", data=None, dtype: str = "float32", scale: Union[float, List[float]] = None, zero_point: Union[int, List[int]] = None) #pass
如上所示,TpuLang中Tensor有5个参数。
shape:Tensor的形状,List[int],对于Operator输出的Tensor,可以不指定shape,默认值为[]。
Name:Tensor的名称,string或None,该值推荐使用默认值None以免因为Name相同导致问题;
ttype:Tensor的类型,可以是”neuron”或”coeff”,初始值为”neuron”;
data:Tensor的数据,ndarray或None,默认值为None,此时Tensor将根据指定的形状初始化为全零。当ttype为coeff时,不可以为None,data为ndarray,此时data的shape,dtype必须与输入shape,dtype一致。
dtype:Tensor的数据类型,默认值为”float32”,否则取值范围为”float32”, “float16”, “int32”, “uint32”, “int16”, “uint16”, “int8”, “uint8”;
scale:Tensor的量化参数,float或List[float],默认值为None;
zero_point:Tensor的偏移参数,int或List[int],默认值为None;
声明Tensor的示例:
#activation input = tpul.Tensor(name='x', shape=[2,3], dtype='int8') #weight weight = tpul.Tensor(dtype='float32', shape=[3,4], data=np.random.uniform(0,1,shape).astype('float32'), ttype="coeff")
24.2. 张量前处理(Tensor.preprocess)
TpuLang中Tensor如果是输入,且需要对输入进行前处理,可以调用该函数
TpuLang中Tensor.preprocess的定义如下:
class Tensor: def preprocess(self, mean : List[float] = [0, 0, 0], scale : List[float] = [1.0, 1.0, 1.0], pixel_format : str = 'bgr', channel_format : str = 'nchw', resize_dims : List[int] = None, keep_aspect_ratio : bool = False, keep_ratio_mode : str = 'letterbox', pad_value : int = 0, pad_type : str = 'center', white_level : float = 4095, black_level : float = 112): #pass
如上所示,TpuLang中Tensor的preprocess有如下几个参数。
mean:Tensor的每个channel的平均值,默认值为[0, 0, 0];
scale:Tensor的每个channel的scale值,默认值为[1, 1, 1];
pixel_format:Tensor的pixel的方式,默认值为’bgr’,取值范围为:’rgb’,’bgr’,’gray’,’rgba’,’gbrg’,’grbg’,’bggr’,’rggb’;
channel_format:Tensor的格式,channel维在前还是在最后。默认值为’nchw’,取值范围为”nchw”,”nhwc”。
resize_dims:Tensor的resize后的[h,w],默认值为None,表示取Tensor的h和w;
keep_aspect_ratio:resize参数,是否保持相同的scale。bool量,默认值为False;
keep_ratio_mode:resize参数,如果使能keep_aspect_ratio的两种模式,默认值’letterbox’,取值范围为’letterbox’,’short_side_scale’;
pad_value:resize参数,当resize时pad的值。int类型,默认值为0;
pad_type:resize参数,当resize时pad的方式。str类型,默认值为’center’,取值范围为’normal’,’center’;
white_level:raw参数。str类型,默认值为4095;
black_level:raw参数。str类型,默认值为112;
声明Tensor.preprocess的示例:
#activation input = tpul.Tensor(name='x', shape=[2,3], dtype='int8') input.preprocess(mean=[123.675,116.28,103.53], scale=[0.017,0.017,0.017]) # pass
24.3. 标量(Scalar)
定义一个标量Scalar。Scalar是一个常量,在声明时指定,且不能修改。
class Scalar: def __init__(self, value, dtype=None): #pass
Scalar构造函数有两个参数,
value:Variable型,即int/float型,无默认值,必须指定;
dtype:Scalar的数据类型,为默认值None等同于”float32”,否则取值范围为”float32”, “float16”, “int32”, “uint32”, “int16”, “uint16”, “int8”, “uint8”;
使用实例:
pad_val = tpul.Scalar(1.0) pad = tpul.pad(input, value=pad_val)
24.4. Control Functions
控制函数(control functions)主要包括控制TpuLang使用时的初始化、启动编译生成目标文件等。
控制函数常用于TpuLang程序的Tensor和Operator之前和之后。 比如在写Tensor和Operator之前,可能需要做初始化。 在完成Tensor和Operator编写之后,可能需要启动编译和反初始化。
24.4.1. 初始化函数
初始化Function,在一个程序中构建网络之前使用。
初始化函数接口如下所示,选择处理器型号。
def init(device): #pass
device:string类型。取值范围”BM1684X”|”BM1688”|”CV183X”。
24.4.2. compile
24.4.2.1. 接口定义
def compile(name: str, inputs: List[Tensor], outputs: List[Tensor], cmp=True, refs=None, mode='f32', # unused dynamic=False, asymmetric=False, no_save=False, opt=2, mlir_inference=True, bmodel_inference=True, log_level="normal", embed_debug_info=False):
24.4.2.2. 功能描述
用于将TpuLang模型编译为bmodel。
24.4.2.3. 参数说明
name:string类型。模型名称。
inputs:List[Tensor],表示编译网络的所有输入Tensor;
outputs:List[Tensor],表示编译网络的所有输出Tensor;
cmp:bool类型,True表示需要结果比对,False表示仅编译;如果mlir_inference为False,cmp参数无效。
refs:List[Tensor],表示编译网络的所有需要比对验证的Tensor;
mode:string类型,废弃。
dynamic:bool类型,是否进行动态编译。
no_save:bool类型,是否将中间文件暂存到共享内存并随进程释放,启用该项时Compile会返回生成的bmodel文件的bytes-like object,用户需要自行接收和处理,如使用f.write(bmodel_bin)保存。
asymmetric:bool类型,是否为非对称量化。
opt:int类型,表示编译器group优化级别。0,表示不需要进行group;1,表示尽可能进行group;2,表示根据动态规划进行group。默认值为2。
mlir_inference: bool类型,是否执行mlir的推理,如果为False, cmp参数无效。
bmodel_inference: bool类型,是否执行bmodel的推理。
log_level 用来控制日志等级,目前支持only-pass、only-layer-group、normal、quiet: - only-pass: 主要打印图优化pattern匹配情况。 - only-layer-group: 主要打印layer group 信息。 - normal: 编译生成bmodel的日志都会打印出来 - quiet: 什么都不打印
embed_debug_info: bool类型,是否开启profile模式。
24.4.3. 反初始化
在网络构建之后,需要进行反初始化结束。只有在反初始化后,之前 Tpulang的数据才会得到释放
def deinit(): #pass
24.4.4. 重置默认图
在网络构建之前,需要进行重置默认图操作。如果输入graph为None,重置默认图后,当前graph为空图。 如果设置输入graph,会设置graph为默认图。 如果只有一个子图,可以不需要显示调用reset_default_graph。因为init函数会调用该函数。
def reset_default_graph(graph = None): #pass
24.4.5. 获取当前默认图
在网络构建之后,如果需要得到默认的子图,调用该函数可以得到默认的graph。
def get_default_graph(): #pass
24.4.6. 重置图
如果需要清除graph以及其保存的Tensor信息,可以调用该函数。graph为None时,清除当前默认图的信息。
def reset_graph(graph = None): #pass
注意:如果graph中的Tensor还被其他graph使用,不要调用该函数清除graph信息
24.4.7. 舍入模式
舍入是指按照一定的规则舍去某些数字后面多余的尾数的过程,以得到更简短、明确的数字表示。 给定 x,舍入结果是 y,有下面的舍入模式供选择。
四舍五入,当小数值为0.5时舍入到邻近的偶数,对应的值是
half_to_even
。
四舍五入,正数接近于正无穷,负数接近于负无穷,对应的值是
half_away_from_zero
,公式如下\[\mathsf{y = \mathrm{sign}(x)\left\lfloor|x| + 0.5\right\rfloor = -\mathrm{sign}(x)\left\lceil-|x| - 0.5\right\rceil}\]
无条件舍去,接近于原点,对应的值是
towards_zero
,公式如下\[\begin{split}\mathsf{y = \mathrm{sign}(x)\left\lfloor|x|\right\rfloor = -\mathrm{sign}(x)\left\lceil-|x|\right\rceil} = {\begin{cases}\mathsf{\lfloor x\rfloor}&{\text{if}}\mathsf{\ \ x > 0,}\\ \mathsf{\lceil x\rceil}&{\text{otherwise}}.\end{cases}}\end{split}\]
接近于负无穷,对应的值是
down
,公式如下\[\mathsf{y = \lfloor x\rfloor = -\lceil-x\rceil}\]
接近于正无穷,对应的值是
up
,公式如下\[\mathsf{y = \lceil x\rceil = -\lfloor-x\rfloor}\]
四舍五入,接近于正无穷,对应的值是
half_up
,公式如下\[\mathsf{y = \lceil x + 0.5\rceil = -\lfloor-x - 0.5\rfloor = \left\lceil\frac{\lfloor 2x\rfloor}{2}\right\rceil}\]
四舍五入,接近于正无穷,对应的值是
half_down
,公式如下\[\mathsf{y = \lfloor x - 0.5\rfloor = -\lceil-x + 0.5\rceil = \left\lfloor\frac{\lceil 2x\rceil}{2}\right\rfloor}\]
下表列出不同舍入模式下 x 与 y 的对应关系。
24.5. Operator
为了TpuLang编程时可以考虑到获取好的性能,下面会将Operator分成本地操作(Local Operator)、受限本地操作(Limited Local Operator) 和全局操作(Global Operator)。
本地操作:在启动编译时,可以与其它的本地操作进行合并优化,使得操作之间的数据只存在于TPU的本地存储中。
受限本地操作:在一定条件下才能作为本地操作与其它本地操作进行合并优化。
全局操作:不能与其它操作进行合并优化,操作的输入输出数据都需要放到TPU的全局存储中。
以下操作中,很多属于按元素计算(Element-wise)的操作,要求输入输出Tensor的shape具备相同数量的维度。
当操作的输入Tensor是2个时,分为支持shape广播和不支持shape广播两种。 支持shape广播表示tensor_i0(输入0)和tensor_i1(输入1)的同一维度的shape值可以不同,此时其中一个tensor的shape值必须是1,数据将被广播扩展到另一个tensor对应的shape值。 不支持shape广播则要求tensor_i0(输入0)和tensor_i1(输入1)的shape值一致。
24.5.1. NN/Matrix Operator
24.5.1.1. conv
24.5.1.1.1. 接口定义
def conv(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, out_dtype: str = None, out_name: str = None): #pass
24.5.1.1.2. 功能描述
二维卷积运算。可参考各框架下的二维卷积定义。 该操作属于 本地操作 。
24.5.1.1.3. 参数说明
input:Tensor类型,表示输入Tensor,4维NCHW格式。
weight:Tensor类型,表示卷积核Tensor,4维NCHW格式。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1],oc表示输出Channel数。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1],不为None时要求长度2。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1],不为None时要求长度为2。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0],不为None时要求长度为4。
groups:int型,表示卷积层的组数。
out_dtype:string类型或None,为None时与input数据类型一致。取值为范围为“float32”,“float16”。表示输出Tensor的数据类型。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.1.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.1.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
24.5.1.2. conv_int
24.5.1.2.1. 接口定义
def conv_int(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, input_zp: Union[int, List[int]] = None, weight_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): # pass
24.5.1.2.2. 功能描述
二维卷积定点运算。可参考各框架下的二维卷积定义。
for c in channel
izp = is_izp_const ? izp_val : izp_vec[c];
wzp = is_wzp_const ? wzp_val : wzp_vec[c];
output = (input - izp) Conv (weight - wzp) + bias[c];
该操作属于 本地操作 。
24.5.1.2.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,4维NCHW格式。
weight:Tensor类型,表示卷积核Tensor,4维[oc, ic, kh, kw]格式。其中oc表示输出Channel数,ic表示输入channel数,kh是kernel_h,kw是kernel_w。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1]。bias的数据类型为int32。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1],不为None时要求长度为2。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1],不为None时要求长度为2。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0],不为None时要求长度为4。
groups:int型,表示卷积层的组数。若ic=oc=groups时,则卷积为depthwise conv。
input_zp:List[int]型或int型,表示输入偏移。取None则表示0,取List时要求长度为ic。当前不支持List[int]型。
weight_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为ic,其中ic表示输入的Channel数。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int32。取值范围:int32/uint32。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.2.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype确定。
24.5.1.2.5. 处理器支持
BM1688:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.3. conv_quant
24.5.1.3.1. 接口定义
def conv_quant(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, input_scale: Union[float, List[float]] = None, weight_scale: Union[float, List[float]] = None, output_scale: Union[float, List[float]] = None, input_zp: Union[int, List[int]] = None, weight_zp: Union[int, List[int]] = None, output_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): # pass
24.5.1.3.2. 功能描述
二维卷积定点运算。可参考各框架下的二维卷积定义。
for c in channel
izp = is_izp_const ? izp_val : izp_vec[c];
wzp = is_wzp_const ? wzp_val : wzp_vec[c];
conv_i32 = (input - izp) Conv (weight - wzp) + bias[c];
output = requant_int(conv_i32, mul, shift) + ozp
其中mul,shift由iscale,wscale,oscale得到
该操作属于 本地操作 。
24.5.1.3.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,4维NCHW格式。
weight:Tensor类型,表示卷积核Tensor,4维[oc, ic, kh, kw]格式。其中oc表示输出Channel数,ic表示输入channel数,kh是kernel_h,kw是kernel_w。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1]。bias的数据类型为int32。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1],不为None时要求长度为2。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1],不为None时要求长度为2。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0],不为None时要求长度为4。
groups:int型,表示卷积层的组数。若ic=oc=groups时,则卷积为depthwise conv。
input_scale:List[float]型或float型,表示输入量化参数。取None则使用input Tensor中的量化参数,取List时要求长度为ic。当前不支持List[float]型。
weight_scale:List[float]型或float型,表示卷积核量化参数。取None则使用weight Tensor中的量化参数,取List时要求长度为oc。
output_scale:List[float]型或float型,表示卷积核量化参数。不可以取None,取List时要求长度为oc。当前不支持List[float]型。
input_zp:List[int]型或int型,表示输入偏移。取None则表示0,取List时要求长度为ic。当前不支持List[int]型。
weight_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为oc。
output_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为oc。当前不支持List[int]型。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int8。取值范围:int8/uint8。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.3.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype确定。
24.5.1.3.5. 处理器支持
BM1688:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.4. deconv
24.5.1.4.1. 接口定义
def deconv(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, output_padding: List[int] = None, group: int = 1, out_dtype: str = None, out_name: str = None): #pass
24.5.1.4.2. 功能描述
二维反卷积运算。可参考各框架下的二维反卷积定义。 该操作属于 本地操作 。
24.5.1.4.3. 参数说明
input:Tensor类型,表示输入Tensor,4维NCHW格式。
weight:Tensor类型,表示卷积核Tensor,4维NCHW格式。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1],oc表示输出Channel数。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1],不为None时要求长度为2。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1],不为None时要求长度为2。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0],不为None时要求长度为4。
output_padding:List[int],表示输出每个空间维度的填充大小,取None则表示[0,0],不为None时要求长度为2。
group:int类型,表示表示反卷积层的组数。
out_dtype:string类型或None,为None时与input数据类型一致。取值为范围为“float32”,“float16”。表示输出Tensor的数据类型。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.1.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
24.5.1.5. deconv_int
24.5.1.5.1. 接口定义
def deconv_int(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, output_padding: List[int] = None, group: int = 1, input_zp: Union[int, List[int]] = None, weight_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): # pass
24.5.1.5.2. 功能描述
二维反卷积定点运算。可参考各框架下的二维卷积定义。
for c in channel
izp = is_izp_const ? izp_val : izp_vec[c];
wzp = is_wzp_const ? wzp_val : wzp_vec[c];
output = (input - izp) Deconv (weight - wzp) + bias[c];
该操作属于 本地操作 。
24.5.1.5.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,4维NCHW格式。
weight:Tensor类型,表示卷积核Tensor,4维[oc, ic, kh, kw]格式。其中oc表示输出Channel数,ic表示输入channel数,kh是kernel_h,kw是kernel_w。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1]。bias的数据类型为int32
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1],不为None时要求长度为2。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1],不为None时要求长度为2。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0],不为None时要求长度为4。
output_padding:List[int],表示输出的填充大小,取None则表示[0,0],不为None时要求长度为1或2。
groups:int型,表示反卷积层的组数。
input_zp:List[int]型或int型,表示输入偏移。取None则表示0,取List时要求长度为ic。当前不支持List[int]型。
weight_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为ic,其中ic表示输入的Channel数。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int32。取值范围:int32/uint32。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.5.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype确定。
24.5.1.5.5. 处理器支持
BM1688:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.6. conv3d
24.5.1.6.1. 接口定义
def conv3d(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, out_dtype: str = None, out_name: str = None): #pass
24.5.1.6.2. 功能描述
三维卷积运算。可参考各框架下的三维卷积定义。 该操作属于 本地操作 。
24.5.1.6.3. 参数说明
input:Tensor类型,表示输入Tensor,5维NCDHW格式。
weight:Tensor类型,表示卷积核Tensor,4维NCDHW格式。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1, 1]或[oc],oc表示输出Channel数。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1,1],不为None时要求长度为3。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1,1],不为None时要求长度为3。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0,0,0],不为None时要求长度为6。
groups:int型,表示卷积层的组数。
out_dtype:string类型或None,为None时与input数据类型一致。取值为范围为“float32”,“float16”。表示输出Tensor的数据类型。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.6.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.1.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。input与weight的数据类型必须一致。bias的数据类型必须是FLOAT32。
24.5.1.7. conv3d_int
24.5.1.7.1. 接口定义
def conv3d_int(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, input_zp: Union[int, List[int]] = None, weight_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None):
24.5.1.7.2. 功能描述
三维卷积定点运算。可参考各框架下的三维卷积定义。
for c in channel
izp = is_izp_const ? izp_val : izp_vec[c];
kzp = is_kzp_const ? kzp_val : kzp_vec[c];
output = (input - izp) Conv3d (weight - kzp) + bias[c];
其中Conv3d表示3D卷积计算。
该操作属于 本地操作 。
24.5.1.7.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,5维NCTHW格式。
weight:Tensor类型,表示卷积核Tensor,5维[oc, ic, kt, kh, kw]格式。其中oc表示输出Channel数,ic表示输入channel数,kt是kernel_t,kh是kernel_h,kw是kernel_w。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1, 1]。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1,1],不为None时要求长度为3。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1,1],不为None时要求长度为3。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0,0,0]。不为None时要求长度6。
groups:int型,表示卷积层的组数。若ic=oc=groups时,则卷积为depthwise conv3d。
input_zp:List[int]型或int型,表示输入偏移。取None则表示0,取List时要求长度为ic。当前不支持List[int]型。
weight_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为ic,其中ic表示输入的Channel数。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int32。取值范围:int32/uint32。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.7.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype确定。
24.5.1.7.5. 处理器支持
BM1688:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.8. conv3d_quant
24.5.1.8.1. 接口定义
def conv3d_quant(input: Tensor, weight: Tensor, bias: Tensor = None, stride: List[int] = None, dilation: List[int] = None, pad: List[int] = None, group: int = 1, input_scale: Union[float, List[float]] = None, weight_scale: Union[float, List[float]] = None, output_scale: Union[float, List[float]] = None, input_zp: Union[int, List[int]] = None, weight_zp: Union[int, List[int]] = None, output_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): # pass
24.5.1.8.2. 功能描述
二维卷积定点运算。可参考各框架下的二维卷积定义。
for c in channel
izp = is_izp_const ? izp_val : izp_vec[c];
wzp = is_wzp_const ? wzp_val : wzp_vec[c];
conv_i32 = (input - izp) Conv (weight - wzp) + bias[c];
output = requant_int(conv_i32, mul, shift) + ozp
其中mul,shift由iscale,wscale,oscale得到
该操作属于 本地操作 。
24.5.1.8.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,5维NCTHW格式。
weight:Tensor类型,表示卷积核Tensor,5维[oc, ic, kt, kh, kw]格式。其中oc表示输出Channel数,ic表示输入channel数,kt是kernel_t,kh是kernel_h,kw是kernel_w。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[1, oc, 1, 1, 1]。bias的数据类型为int32。
stride:List[int],表示每个空间维度的步长大小,取None则表示[1,1,1],不为None时要求长度为3。
dilation:List[int],表示每个空间维度的空洞大小,取None则表示[1,1,1],不为None时要求长度为3。
pad:List[int],表示每个空间维度的填充大小,遵循[x1_begin, x2_begin…x1_end, x2_end,…]顺序。取None则表示[0,0,0,0,0,0]。不为None时要求长度6。
groups:int型,表示卷积层的组数。若ic=oc=groups时,则卷积为depthwise conv3d
input_scale:List[float]型或float型,表示输入量化参数。取None则使用input Tensor中的量化参数,取List时要求长度为ic。当前不支持List[float]型。
weight_scale:List[float]型或float型,表示卷积核量化参数。取None则使用weight Tensor中的量化参数,取List时要求长度为oc。
output_scale:List[float]型或float型,表示卷积核量化参数。不可以取None,取List时要求长度为oc。当前不支持List[float]型。
input_zp:List[int]型或int型,表示输入偏移。取None则表示0,取List时要求长度为ic。当前不支持List[int]型。
weight_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为oc。
output_zp:List[int]型或int型,表示卷积核偏移。取None则表示0,取List时要求长度为oc。当前不支持List[int]型。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int8。取值范围:int8/uint8。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.1.8.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype确定。
24.5.1.8.5. 处理器支持
BM1688:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入和权重的数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.9. matmul
24.5.1.9.1. 接口定义
def matmul(input: Tensor, right: Tensor, bias: Tensor = None, right_transpose: bool = False, left_transpose: bool = False, output_transpose: bool = False, keep_dims: bool = True, out_dtype: str = None, out_name: str = None): #pass
24.5.1.9.2. 功能描述
矩阵乘运算。可参考各框架下的矩阵乘定义。 该操作属于 本地操作 。
24.5.1.9.3. 参数说明
input:Tensor类型,表示输入左操作数,大于或等于2维,设最后两维shape=[m,k]。
right:Tensor类型,表示输入右操作数,大于或等于2维,设最后两维shape=[k,n]。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[n]。
left_transpose:bool型,默认为False。表示计算时是否对左矩阵进行转置。
right_transpose:bool型,默认为False。表示计算时是否对右矩阵进行转置。
output_transpose:bool型,默认为False。表示计算时是否对输出矩阵进行转置。
keep_dims:bool型,默认为True。表示结果是否保持原来的dim,False则shape为2维。
out_dtype:string类型或None,为None时与input数据类型一致。取值为范围为“float32”,“float16”。表示输出Tensor的数据类型。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
要求左右Tensor的维度长度一致。 当Tensor的维度长度为2时,表示矩阵和矩阵乘运算。 当Tensor的维度长度大于2时,表示批矩阵乘运算。要求input.shape[-1] == right.shape[-2],input.shape[:-2]和right.shape[:-2]需要满足广播规则。
24.5.1.9.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.1.9.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。input与right的数据类型必须一致。bias的数据类型必须是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。input与right,bias的数据类型必须一致。
24.5.1.10. matmul_int
24.5.1.10.1. 接口定义
def matmul_int(input: Tensor, right: Tensor, bias: Tensor = None, right_transpose: bool = False, left_transpose: bool = False, output_transpose: bool = False, keep_dims: bool = True, input_zp: Union[int, List[int]] = None, right_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): #pass
24.5.1.10.2. 功能描述
矩阵乘运算。可参考各框架下的矩阵乘定义。 该操作属于 本地操作 。
24.5.1.10.3. 参数说明
input:Tensor类型,表示输入左操作数,大于或等于2维,设最后两维shape=[m,k]。
right:Tensor类型,表示输入右操作数,大于或等于2维,设最后两维shape=[k,n]。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[n]。
left_transpose:bool型,默认为False。表示计算时是否对左矩阵进行转置。
right_transpose:bool型,默认为False。表示计算时是否对右矩阵进行转置。
output_transpose:bool型,默认为False。表示计算时是否对输出矩阵进行转置。
keep_dims:bool型,默认为True。表示结果是否保持原来的dim,False则shape为2维。
input_zp:List[int]型或int型,表示input的偏移。取None则表示0。当前不支持List[int]型。
right_zp:List[int]型或int型,表示right的偏移。取None则表示0。当前不支持List[int]型。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int32。取值范围:int32/uint32
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
要求左右Tensor的维度长度一致。 当Tensor的维度长度为2时,表示矩阵和矩阵乘运算。 当Tensor的维度长度大于2时,表示批矩阵乘运算。要求input.shape[-1] == right.shape[-2],input.shape[:-2]和right.shape[:-2]需要满足广播规则。
24.5.1.10.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定。
24.5.1.10.5. 处理器支持
BM1688:输入数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.1.11. matmul_quant
24.5.1.11.1. 接口定义
def matmul_quant(input: Tensor, right: Tensor, bias: Tensor = None, right_transpose: bool = False, keep_dims: bool = True, input_scale: Union[float, List[float]] = None, right_scale: Union[float, List[float]] = None, output_scale: Union[float, List[float]] = None, input_zp: Union[int, List[int]] = None, right_zp: Union[int, List[int]] = None, output_zp: Union[int, List[int]] = None, out_dtype: str = None, out_name: str = None): #pass
24.5.1.11.2. 功能描述
量化的矩阵乘运算。可参考各框架下的矩阵乘定义。 该操作属于 本地操作 。
24.5.1.11.3. 参数说明
input:Tensor类型,表示输入左操作数,大于或等于2维,设最后两维shape=[m,k]。
right:Tensor类型,表示输入右操作数,大于或等于2维,设最后两维shape=[k,n]。
bias:Tensor类型,表示偏置Tensor。为None时表示无偏置,反之则要求shape为[n]。
right_transpose:bool型,默认为False。表示计算时是否对右矩阵进行转置。
keep_dims:bool型,默认为True。表示结果是否保持原来的dim,False则shape为2维。
input_scale:List[float]型或float型,表示input的量化参数。取None则使用input Tensor中的量化参数。当前不支持List[float]型。
right_scale:List[float]型float型,表示right的量化参数。取None则使用right Tensor中的量化参数。当前不支持List[float]型。
output_scale:List[float]型float型,表示output的量化参数。不可以取None。当前不支持List[float]型。
input_zp:List[int]型或int型,表示input的偏移。取None则表示0。当前不支持List[int]型。
right_zp:List[int]型或int型,表示right的偏移。取None则表示0。当前不支持List[int]型。
output_zp:List[int]型或int型,表示output的偏移。取None则表示0。当前不支持List[int]型。
out_dtype:string类型或None,表示输入Tensor的类型,取None表示为int8。取值范围:int8/uint8
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
要求左右Tensor的维度长度一致。 当Tensor的维度长度为2时,表示矩阵和矩阵乘运算。 当Tensor的维度长度大于2时,表示批矩阵乘运算。要求input.shape[-1] == right.shape[-2],input.shape[:-2]和right.shape[:-2]需要满足广播规则。
24.5.1.11.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定。
24.5.1.11.5. 处理器支持
BM1688:输入数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
BM1684X:输入数据类型可以是INT8/UINT8。偏置的数据类型为INT32。
24.5.2. Base Element-wise Operator
24.5.2.1. add
24.5.2.1.1. 接口定义
def add(tensor_i0: Union[Tensor, Scalar, int, float], tensor_i1: Union[Tensor, Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_dtype: str = None, out_name: str = None): #pass
24.5.2.1.2. 功能描述
张量和张量的按元素加法运算。 \(tensor\_o = tensor\_i0 + tensor\_i1\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.1.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。
out_dtype:string类型或None,表示输出Tensor的数据类型,为None时会与输入数据类型一致。可选参数为’float32’/’float16’/’int8’/’uint8’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.1.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定,或与输入数据类型一致(当其中一个输入为’int8’则输出默认为’int8’类型)。当输入为’float32’/’float16’时,输出数据类型必须与输入一致。
24.5.2.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
24.5.2.2. sub
24.5.2.2.1. 接口定义
def sub(tensor_i0: Union[Tensor, Scalar, int, float], tensor_i1: Union[Tensor, Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_dtype: str = None, out_name: str = None): #pass
24.5.2.2.2. 功能描述
张量和张量的按元素减法运算。 \(tensor\_o = tensor\_i0 - tensor\_i1\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.2.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。
out_dtype:string类型或None,表示输出Tensor的数据类型,为None时会与输入数据类型一致。可选参数为’float32’/’float16’/’int8’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.2.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。当输入为’float32’/’float16’时,输出数据类型必须与输入一致。
24.5.2.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
24.5.2.3. mul
24.5.2.3.1. 接口定义
def mul(tensor_i0: Union[Tensor, Scalar, int, float], tensor_i1: Union[Tensor, Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_dtype: str = None, out_name: str = None): #pass
24.5.2.3.2. 功能描述
张量和张量的按元素乘法运算。 \(tensor\_o = tensor\_i0 * tensor\_i1\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.3.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。
out_dtype:string类型或None,表示输出Tensor的数据类型,为None时会与输入数据类型一致。可选参数为’float32’/’float16’/’int8’/’uint8’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.3.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定,或与输入数据类型一致(当其中一个输入为’int8’则输出默认为’int8’类型)。当输入为’float32’/’float16’时,输出数据类型必须与输入一致。
24.5.2.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
24.5.2.4. div
24.5.2.4.1. 接口定义
def div(tensor_i0: Union[Tensor, Scalar], tensor_i1: Union[Tensor, Scalar], out_name: str = None): #pass
24.5.2.4.2. 功能描述
张量和张量的按元素除法运算。 \(tensor\_o = tensor\_i0 / tensor\_i1\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.4.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.2.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32。
24.5.2.5. max
24.5.2.5.1. 接口定义
def max(tensor_i0: Union[Tensor, Scalar, int, float], tensor_i1: Union[Tensor, Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_dtype: str = None, out_name: str = None): #pass
24.5.2.5.2. 功能描述
张量和张量的按元素取最大值。 \(tensor\_o = max(tensor\_i0, tensor\_i1)\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.5.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。
out_dtype:string类型或None,表示输出Tensor的数据类型,为None时会与输入数据类型一致。可选参数为’float32’/’float16’/’int8’/’uint8’/’int16’/’uint16’/’int32’/’uint32’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.5.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
24.5.2.5.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT16/UINT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT16/UINT16/INT8/UINT8。
24.5.2.6. min
24.5.2.6.1. 接口定义
def min(tensor_i0: Union[Tensor, Scalar, int, float], tensor_i1: Union[Tensor, Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_dtype: str = None, out_name: str = None): #pass
24.5.2.6.2. 功能描述
张量和张量的按元素取最小值。 \(tensor\_o = min(tensor\_i0, tensor\_i1)\)。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.6.3. 参数说明
tensor_i0:Tensor类型或Scalar、int、float,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int、float,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。
out_dtype:string类型或None,表示输出Tensor的数据类型,为None时会与输入数据类型一致。可选参数为’float32’/’float16’/’int8’/’uint8’/’int16’/’uint16’/’int32’/’uint32’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.6.4. 返回值
返回一个Tensor,该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。当数据类型为FLOAT16/FLOAT32时,tensor_i0与tensor_i1的数据类型必须一致。
24.5.2.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT16/UINT16/INT32/UINT32/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT16/UINT16/INT32/UINT32/INT8/UINT8。
24.5.2.7. add_shift
24.5.2.7.1. 接口定义
def add_shift(tensor_i0: Union[Tensor, Scalar, int], tensor_i1: Union[Tensor, Scalar, int], shift: int, out_dtype: str, round_mode: str='half_away_from_zero', is_saturate: bool=True, out_name: str = None): #pass
24.5.2.7.2. 功能描述
运算公式 \(tensor\_o = (tensor\_i0 + tensor\_i1) << shift\)。 张量和张量的按元素相加后再舍入算术移shift位,shift为正时,左移,shift为负时,右移。舍入模式由round_mode确定。 add_shift数据相加后,以INT64为中间结果保存,然后在INT64基础上做一次舍入的算数移位操作; 结果支持饱和处理;当tensor_i0、tensor_i1为signed,且tensor_o为unsigned时,结果必须饱和处理。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.7.3. 参数说明
tensor_i0:Tensor类型或Scalar、int,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
shift:int型,表示移位的位数。
round_mode:String型,表示舍入模式。默认值为’half_away_from_zero’。取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
is_saturate:Bool型,表示结果是否需要饱和处理,默认饱和处理。
out_dtype:String或None,表示输出Tensor的数据类型,取默认值时则和tensor_i0的类型一致。可选参数为’int8’/’uint8’/’int16’/’uint16’/’int32’/’uint32’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.7.4. 返回值
返回一个Tensor。 该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。
24.5.2.7.5. 处理器支持
BM1688:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
BM1684X:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
24.5.2.8. sub_shift
24.5.2.8.1. 接口定义
def sub_shift(tensor_i0: Union[Tensor, Scalar, int], tensor_i1: Union[Tensor, Scalar, int], shift: int, out_dtype: str, round_mode: str='half_away_from_zero', is_saturate: bool=True, out_name: str = None): #pass
24.5.2.8.2. 功能描述
运算公式 \(tensor\_o = (tensor\_i0 - tensor\_i1) << shift\)。 张量和张量的按元素相减后再舍入算术移shift位,shift为正时,左移,shift为负时,右移。舍入模式由round_mode确定。 sub_shift数据相减后,以INT64为中间结果保存,然后在INT64基础上做一次舍入的算数移位操作;结果支持饱和处理。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.8.3. 参数说明
tensor_i0:Tensor类型或Scalar、int,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
shift:int型,表示移位的位数。
round_mode:String型,表示舍入模式。默认值为’half_away_from_zero’。取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
is_saturate:Bool型,表示结果是否需要饱和处理,默认饱和处理。
out_dtype:String或None,表示输出Tensor的数据类型,取默认值时则和tensor_i0的类型一致。可选参数为’int8’/’int16’/’int32’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.8.4. 返回值
返回一个Tensor。 该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。
24.5.2.8.5. 处理器支持
BM1688:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
BM1684X:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
24.5.2.9. mul_shift
24.5.2.9.1. 接口定义
def mul_shift(tensor_i0: Union[Tensor, Scalar, int], tensor_i1: Union[Tensor, Scalar, int], shift: int, out_dtype: str, round_mode: str='half_away_from_zero', is_saturate: bool=True, out_name: str = None): #pass
24.5.2.9.2. 功能描述
运算公式 \(tensor\_o = (tensor\_i0 * tensor\_i1) << shift\)。 张量和张量的按元素相减后再舍入算术移shift位,shift为正时,左移,shift为负时,右移。舍入模式由round_mode确定。 mul_shift数据相乘后,以INT64为中间结果保存,然后在INT64基础上做一次舍入的算数移位操作; 结果支持饱和处理;当tensor_i0、tensor_i1为signed,且tensor_o为unsigned时,结果必须饱和处理。 该操作支持广播。 该操作属于 本地操作 。
24.5.2.9.3. 参数说明
tensor_i0:Tensor类型或Scalar、int,表示输入左操作Tensor或Scalar。
tensor_i1:Tensor类型或Scalar、int,表示输入右操作Tensor或Scalar。tensor_i0和tensor_i1至少有一个是Tensor。
shift:int型,表示移位的位数。
round_mode:String型,表示舍入模式。默认值为’half_away_from_zero’。取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
is_saturate:Bool型,表示结果是否需要饱和处理,默认饱和处理。
out_dtype:String或None,表示输出Tensor的数据类型,取默认值时则和tensor_i0的类型一致。可选参数为’int8’/’uint8’/’int16’/’uint16’/’int32’/’uint32’。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.9.4. 返回值
返回一个Tensor。 该Tensor的数据类型由out_dtype指定,或与输入数据类型一致。
24.5.2.9.5. 处理器支持
BM1688:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
BM1684X:输入数据类型可以是INT32/UINT32/INT16/UINT6/INT8/UINT8。
24.5.2.10. copy
24.5.2.10.1. 接口定义
def copy(input: Tensor, out_name: str = None): #pass
24.5.2.10.2. 功能描述
copy,将输入数据复制到输出Tensor中. 该操作属于 全局操作 。
24.5.2.10.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.10.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.2.10.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.2.11. clamp
24.5.2.11.1. 接口定义
def clamp(input: Tensor, min: float, max: float, out_name: str = None): #pass
24.5.2.11.2. 功能描述
将输入Tensor中所有元素的值都限定在设置的最大最小值范围内,大于最大值则截断为最大值,小于最大值则截断为最小值。 要求所有输入Tensor及Scalar的dtype一致。 该操作属于 本地操作 。
24.5.2.11.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor。
min:float类型,表示阶段的下限。
max:float类型,表示阶段的上限。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.2.11.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.2.11.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.3. Element-wise Compare Operator
24.5.3.1. gt
24.5.3.1.1. 接口定义
def gt(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.1.2. 功能描述
张量和张量的按元素大于比较运算。 \(tensor\_o = tensor\_i0 > tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.1.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.1.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.2. lt
24.5.3.2.1. 接口定义
def lt(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.2.2. 功能描述
张量和张量的按元素小于比较运算。 \(tensor\_o = tensor\_i0 < tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.2.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.2.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.3. ge
24.5.3.3.1. 接口定义
def ge(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.3.2. 功能描述
张量和张量的按元素大于等于比较运算。 \(tensor\_o = tensor\_i0 >= tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.3.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.3.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.4. le
24.5.3.4.1. 接口定义
def le(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.4.2. 功能描述
张量和张量的按元素小于等于比较运算。 \(tensor\_o = tensor\_i0 <= tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.4.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.5. eq
24.5.3.5.1. 接口定义
def eq(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.5.2. 功能描述
张量和张量的按元素等于比较运算。 \(tensor\_o = tensor\_i0 == tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.5.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.5.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.5.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.6. ne
24.5.3.6.1. 接口定义
def ne(tensor_i0: Tensor, tensor_i1: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.6.2. 功能描述
张量和张量的按元素不等于比较运算。 \(tensor\_o = tensor\_i0 != tensor\_i1 ? 1 : 0\)。 该操作支持广播。 tensor_i0或者tensor_i1可以被指定为COEFF_TENSOR。 该操作属于 本地操作 。
24.5.3.6.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作Tensor。
tensor_i1:Tensor类型,表示输入右操作Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的scale。tensor_i0与tensor_i1的scale必须一致。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为3,分别为tensor_i0,tensor_i1,output的zero_point。tensor_i0与tensor_i1的zero_point必须一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.6.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。tensor_i0与tensor_i1的数据类型必须一致。
24.5.3.7. gts
24.5.3.7.1. 接口定义
def gts(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.7.2. 功能描述
张量和标量的按元素大于比较运算。 \(tensor\_o = tensor\_i0 > scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.7.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.7.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.7.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.3.8. lts
24.5.3.8.1. 接口定义
def lts(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.8.2. 功能描述
张量和标量的按元素小于比较运算。 \(tensor\_o = tensor\_i0 < scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.8.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.8.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.8.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.3.9. ges
24.5.3.9.1. 接口定义
def ges(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.9.2. 功能描述
张量和标量的按元素大于等于比较运算。 \(tensor\_o = tensor\_i0 >= scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.9.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.9.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.9.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.3.10. les
24.5.3.10.1. 接口定义
def les(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.10.2. 功能描述
张量和标量的按元素小于等于比较运算。 \(tensor\_o = tensor\_i0 <= scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.10.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.10.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.10.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.3.11. eqs
24.5.3.11.1. 接口定义
def eqs(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.11.2. 功能描述
张量和标量的按元素等于比较运算。 \(tensor\_o = tensor\_i0 == scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.11.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.11.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.11.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.3.12. nes
24.5.3.12.1. 接口定义
def nes(tensor_i0: Tensor, scalar_i1: Union[Scalar, int, float], scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.3.12.2. 功能描述
张量和标量的按元素不等于比较运算。 \(tensor\_o = tensor\_i0 != scalar\_i1 ? 1 : 0\)。 该操作属于 本地操作 。
24.5.3.12.3. 参数说明
tensor_i0:Tensor类型,表示输入左操作数。
scalar_i1:Scalar,int或float类型,表示输入右操作数。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.3.12.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.3.12.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。scalar_i1数据类型为FLOAT32。
24.5.4. Activation Operator
24.5.4.1. relu
24.5.4.1.1. 接口定义
def relu(input: Tensor, out_name: str = None): #pass
24.5.4.1.2. 功能描述
relu激活函数,逐元素实现功能 \(y = max(0, x)\)。 该操作属于 本地操作 。
24.5.4.1.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.1.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。若输入是quantized类型,输出的scale与zero_point与输入一致。
24.5.4.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.2. prelu
24.5.4.2.1. 接口定义
def prelu(input: Tensor, slope : Tensor, out_name: str = None): #pass
24.5.4.2.2. 功能描述
prelu激活函数,逐元素实现功能 \(y =\begin{cases}x\quad x>0\\x*slope \quad x<=0\\\end{cases}\)。 该操作属于 本地操作 。
24.5.4.2.3. 参数说明
input:Tensor类型,表示输入Tensor。
slope:Tensor类型,表示slope Tensor。仅支持slope为coeff Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.2.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.4.3. leaky_relu
24.5.4.3.1. 接口定义
def leaky_relu(input: Tensor, negative_slope: float = 0.01, out_name: str = None, round_mode : str="half_away_from_zero",): #pass
24.5.4.3.2. 功能描述
leaky_relu激活函数,逐元素实现功能 \(y =\begin{cases}x\quad x>0\\x*params_[0] \quad x<=0\\\end{cases}\)。 该操作属于 本地操作 。
24.5.4.3.3. 参数说明
input:Tensor类型,表示输入Tensor。
negative_slope:float类型,表示输入的负斜率,默认值为0.01。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.4.3.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。若输入是quantized类型,输出的scale与zero_point与输入一致。
24.5.4.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.4. abs
24.5.4.4.1. 接口定义
def abs(input: Tensor, out_name: str = None): #pass
24.5.4.4.2. 功能描述
abs绝对值激活函数,逐元素实现功能 \(y = \left | x \right |\)。 该操作属于 本地操作 。
24.5.4.4.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.4.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。若输入是quantized类型,输出的scale与zero_point与输入一致。
24.5.4.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.5. ln
24.5.4.5.1. 接口定义
def ln(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.5.2. 功能描述
ln激活函数,逐元素实现功能 \(y = log(x)\)。 该操作属于 本地操作 。
24.5.4.5.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.5.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.5.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.6. ceil
24.5.4.6.1. 接口定义
def ceil(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.6.2. 功能描述
ceil向上取整激活函数,逐元素实现功能 \(y = \left \lfloor x \right \rfloor\)。 该操作属于 本地操作 。
24.5.4.6.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.6.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.7. floor
24.5.4.7.1. 接口定义
def floor(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.7.2. 功能描述
floor向下取整激活函数,逐元素实现功能 \(y = \left \lceil x \right \rceil\)。 该操作属于 本地操作 。
24.5.4.7.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.7.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.7.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.8. round
24.5.4.8.1. 接口定义
def round(input: Tensor, out_name: str = None): #pass
24.5.4.8.2. 功能描述
round四舍五入整激活函数,逐元素实现功能 \(y = round(x)\)。 该操作属于 本地操作 。
24.5.4.8.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.8.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.8.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.4.9. sin
24.5.4.9.1. 接口定义
def sin(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.9.2. 功能描述
sin正弦激活函数,逐元素实现功能 \(y = sin(x)\)。 该操作属于 本地操作 。
24.5.4.9.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.9.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.9.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.10. cos
24.5.4.10.1. 接口定义
def cos(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.10.2. 功能描述
cos余弦激活函数,逐元素实现功能 \(y = cos(x)\)。 该操作属于 本地操作 。
24.5.4.10.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.10.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.10.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.11. exp
24.5.4.11.1. 接口定义
def exp(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.11.2. 功能描述
exp指数激活函数,逐元素实现功能 \(y = e^{x}\)。 该操作属于 本地操作 。
24.5.4.11.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.11.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.11.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.12. tanh
24.5.4.12.1. 接口定义
def tanh(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None, round_mode : str="half_away_from_zero"): #pass
24.5.4.12.2. 功能描述
tanh双曲正切激活函数,逐元素实现功能 \(y=tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}\)。 该操作属于 本地操作 。
24.5.4.12.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.4.12.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.12.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.13. sigmoid
24.5.4.13.1. 接口定义
def sigmoid(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None, round_mode : str="half_away_from_zero"): #pass
24.5.4.13.2. 功能描述
sigmoid激活函数,逐元素实现功能 \(y = 1 / (1 + e^{-x})\)。 该操作属于 本地操作 。
24.5.4.13.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.4.13.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.13.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.14. log_sigmoid
24.5.4.14.1. 接口定义
def log_sigmoid(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.14.2. 功能描述
log_sigmoid激活函数,逐元素实现功能 \(y = log(1 / (1 + e^{-x}))\)。 该操作属于 本地操作 。
24.5.4.14.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.14.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.14.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.15. elu
24.5.4.15.1. 接口定义
def elu(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.15.2. 功能描述
elu激活函数,逐元素实现功能 \(y = \begin{cases}x\quad x>=0\\e^{x}-1\quad x<0\\\end{cases}\)。 该操作属于 本地操作 。
24.5.4.15.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.15.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.15.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.16. square
24.5.4.16.1. 接口定义
def square(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.16.2. 功能描述
square平方激活函数,逐元素实现功能 \(y = \square{x}\)。 该操作属于 本地操作 。
24.5.4.16.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.16.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.16.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.17. sqrt
24.5.4.17.1. 接口定义
def sqrt(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.17.2. 功能描述
sqrt平方根激活函数,逐元素实现功能 \(y = \sqrt{x}\)。 该操作属于 本地操作 。
24.5.4.17.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.17.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.17.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.18. rsqrt
24.5.4.18.1. 接口定义
def rsqrt(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.18.2. 功能描述
rsqrt平方根取反激活函数,逐元素实现功能 \(y = 1 / (sqrt{x})\)。 该操作属于 本地操作 。
24.5.4.18.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.18.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.18.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.19. silu
24.5.4.19.1. 接口定义
def silu(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.19.2. 功能描述
silu激活函数,逐元素实现功能 \(y = x * (1 / (1 + e^{-x}))\)。 该操作属于 本地操作 。
24.5.4.19.3. 参数说明
input:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.19.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.19.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.20. swish
24.5.4.20.1. 接口定义
def swish(input: Tensor, beta: float, scale: List[float]=None, zero_point: List[int]=None, round_mode: str = "half_away_from_zero", out_name: str = None): #pass
24.5.4.20.2. 功能描述
swish激活函数,逐元素实现功能 \(y = x * (1 / (1 + e^{-x * beta}))\)。 该操作属于 本地操作 。
24.5.4.20.3. 参数说明
input:Tensor类型,表示输入Tensor。
beta: Scalar或float类型,表示beta值。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.20.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.20.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.21. erf
24.5.4.21.1. 接口定义
def erf(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.21.2. 功能描述
erf激活函数,对于输入输出Tensor对应位置的元素x和y,逐元素实现功能 \(y = \frac{2}{\sqrt{\pi }}\int_{0}^{x}e^{-\eta ^{2}}d\eta\)。 该操作属于 本地操作 。
24.5.4.21.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.21.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.21.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.22. tan
24.5.4.22.1. 接口定义
def tan(input: Tensor, out_name: str = None): #pass
24.5.4.22.2. 功能描述
tan正切激活函数,逐元素实现功能 \(y = tan(x)\)。 该操作属于 本地操作 。
24.5.4.22.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.22.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.22.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
24.5.4.23. softmax
24.5.4.23.1. 接口定义
def softmax(input: Tensor, axis: int, out_name: str = None): #pass
24.5.4.23.2. 功能描述
softmax激活函数,实现功能 \(tensor\_o = exp(tensor\_i)/sum(exp(tensor\_i),axis)\)。 该操作属于 本地操作 。
24.5.4.23.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
axis:int型,表示进行运算的轴。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.23.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.23.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.4.24. softmax_int
24.5.4.24.1. 接口定义
def softmax_int(input: Tensor, axis: int, scale: List[float], zero_point: List[int] = None, out_name: str = None, round_mode : str="half_away_from_zero"): #pass
24.5.4.24.2. 功能描述
softmax定点运算。可参考各框架下的softmax定义。
for i in range(256) table[i] = exp(scale[0] * i) for n,h,w in N,H,W max_val = max(input[n,c,h,w] for c in C) sum_exp = sum(table[max_val - input[n,c,h,w]] for c in C) for c in C prob = table[max_val - input[n,c,h,w]] / sum_exp output[n,c,h,w] = saturate(int(round(prob * scale[1])) + zero_point[1]), 其中saturate饱和到output数据类型
其中table表示查表。
24.5.4.24.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
axis:int型,表示进行运算的轴。
scale:List[float]型,表示输入和输出的量化系数。长度必须时2。
zero_point:List[int]型或None型,表示输入和输出偏移,长度与scale一致。如果为None,则取[0, 0]。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.4.24.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.24.5. 处理器支持
BM1688:输入数据类型可以是INT8/UINT8。
BM1684X:输入数据类型可以是INT8/UINT8。
24.5.4.25. mish
24.5.4.25.1. 接口定义
def mish(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.25.2. 功能描述
mish激活函数,逐元素实现功能 \(y = x * tanh(ln(1 + e^{x}))\)。 该操作属于 本地操作 。
24.5.4.25.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.25.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.25.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.26. hswish
24.5.4.26.1. 接口定义
def hswish(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.26.2. 功能描述
hswish激活函数,逐元素实现功能 \(y =\begin{cases}0\quad x<=-3\\x \quad x>=3\\x*((x+3)/6) \quad -3<x<3\\\end{cases}\)。 该操作属于 本地操作 。
24.5.4.26.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.26.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.26.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.27. arccos
24.5.4.27.1. 接口定义
def arccos(input: Tensor, out_name: str = None): #pass
24.5.4.27.2. 功能描述
arccos反余弦激活函数,逐元素实现功能 \(y = arccos(x)\)。 该操作属于 本地操作 。
24.5.4.27.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.27.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.27.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
24.5.4.28. arctanh
24.5.4.28.1. 接口定义
def arctanh(input: Tensor, out_name: str = None): #pass
24.5.4.28.2. 功能描述
arctanh反双曲正切激活函数,逐元素实现功能 \(y = arctanh(x)=\frac{1}{2}ln(\frac{1+x}{1-x})\)。 该操作属于 本地操作 。
24.5.4.28.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.28.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.28.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。FLOAT16数据会自动转换为FLOAT32。
24.5.4.29. sinh
24.5.4.29.1. 接口定义
def sinh(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.29.2. 功能描述
sinh双曲正弦激活函数,逐元素实现功能 \(y = sinh(x)=\frac{e^{x}-e^{-x}}{2}\)。 该操作属于 本地操作 。
24.5.4.29.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.29.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.29.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.30. cosh
24.5.4.30.1. 接口定义
def cosh(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.30.2. 功能描述
cosh双曲余弦激活函数,逐元素实现功能 \(y = cosh(x)=\frac{e^{x}+e^{-x}}{2}\)。 该操作属于 本地操作 。
24.5.4.30.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.30.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.30.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.31. sign
24.5.4.31.1. 接口定义
def sign(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.31.2. 功能描述
sign激活函数,逐元素实现功能 \(y =\begin{cases}1\quad x>0\\0\quad x=0\\-1\quad x<0\\\end{cases}\)。 该操作属于 本地操作 。
24.5.4.31.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.31.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.31.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.4.32. gelu
24.5.4.32.1. 接口定义
def gelu(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None, round_mode : str="half_away_from_zero"): #pass
24.5.4.32.2. 功能描述
gelu激活函数,逐元素实现功能 \(y = x* 0.5 * (1+ erf(\frac{x}{\sqrt{2}}))\)。 该操作属于 本地操作 。
24.5.4.32.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.4.32.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.32.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.4.33. hsigmoid
24.5.4.33.1. 接口定义
def hsigmoid(input: Tensor, scale: List[float]=None, zero_point: List[int]=None, out_name: str = None): #pass
24.5.4.33.2. 功能描述
hsigmoid激活函数,逐元素实现功能 \(y = min(1, max(0, \frac{x}{6} + 0.5))\)。 该操作属于 本地操作 。
24.5.4.33.3. 参数说明
tensor:Tensor类型,表示输入Tensor。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的scale。
zero_point:List[int]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为tensor_i0,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.4.33.4. 返回值
返回一个Tensor,该Tensor的形状和数据类型与输入Tensor相同。
24.5.4.33.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
BM1684X:输入数据类型可以是FLOAT32/INT8/UINT8。FLOAT16数据会自动转换为FLOAT32。
24.5.5. Data Arrange Operator
24.5.5.1. permute
24.5.5.1.1. 接口定义
def permute(input:tensor, order:Union[List[int], Tuple[int]], out_name:str=None): #pass
24.5.5.1.2. 功能描述
根据置换参数对输入Tensor进行重排。 例如:输入shape为(6,7,8,9),置换参数order为(1,3,2,0),则输出的shape为(7,9,8,6)。 该操作属于 本地操作 。
24.5.5.1.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
order:List[int]或Tuple[int]型,表示置换参数。要求order长度和tensor维度一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.1.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.2. tile
24.5.5.2.1. 接口定义
def tile(tensor_i: Tensor, reps: Union[List[int], Tuple[int]], out_name: str = None): #pass
24.5.5.2.2. 功能描述
在指定的维度重复复制数据。 该操作属于 受限本地操作 。
24.5.5.2.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
reps:List[int]或Tuple[int]型,表示每个维度的复制份数。要求order长度和tensor维度一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.2.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.3. broadcast
24.5.5.3.1. 接口定义
def broadcast(input: Tensor, reps: Union[List[int], Tuple[int]], out_name: str = None): #pass
24.5.5.3.2. 功能描述
在指定的维度重复复制数据。 该操作属于 受限本地操作 。
24.5.5.3.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
reps:List[int]或Tuple[int]型,表示每个维度的复制份数。要求order长度和tensor维度一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.3.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8/INT16/UINT16。
24.5.5.4. concat
24.5.5.4.1. 接口定义
- def concat(inputs: List[Tensor],
scales: Optional[Union[List[float],List[int]]] = None, zero_points: Optional[List[int]] = None, axis: int = 0, out_name: str = None, dtype=”float32”, round_mode: str=”half_away_from_zero”):
#pass
24.5.5.4.2. 功能描述
对多个张量在指定的轴上进行拼接, 以及支持不同量纲输入、输出。
该操作属于 受限本地操作 。
24.5.5.4.3. 参数说明
inputs:List[Tensor]类型,存放多个Tensor,所有的Tensor要求数据格式一致并具有相同的shape维度数,且除了待拼接的那一维,shape其他维度的值应该相等。
scales:Optional[Union[List[float],List[int]]]类型,存放多个输入和一个输出scale,最后一个为输出的scale。
zero_points:Optional[List[int]]类型,存放多个输入和一个输出的zero_point, 最后一个为输出的zero_point。
axis:int型,表示进行拼接运算的轴。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
dtype:string类型,默认是”float32”。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.5.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.5. split
24.5.5.5.1. 接口定义
def split(input:tensor, axis:int=0, num:int=1, size:Union[List[int], Tuple[int]]=None, out_name:str=None): #pass
24.5.5.5.2. 功能描述
对输入Tensor在指定的轴上拆成多个Tensor。如果size不为空,则由分裂后的大小由size决定,反之则会根据tensor尺寸和num计算平均分裂后的大小。
该操作属于 本地操作 。
24.5.5.5.3. 参数说明
input:Tensor类型,表示将要进行切分的Tensor。
axis:int型,表示进行切分运算的轴。
num:int型,表示切分的份数;
size:List[int]或Tuple[int]型,非平均分裂时,指定每一份大小,平均分裂时,设置为空即可。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.5.4. 返回值
返回一个List[Tensor],其中每个Tensor的数据类型与输入Tensor相同。
24.5.5.5.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.6. pad
24.5.5.6.1. 接口定义
def pad(input:tensor, method='constant', value:Union[Scalar, Variable, None]=None, padding:Union[List[int], Tuple[int], None]=None, out_name:str=None): #pass
24.5.5.6.2. 功能描述
对输入Tensor进行填充。
该操作属于 本地操作 。
24.5.5.6.3. 参数说明
input:Tensor类型,表示将要进行填充的Tensor。
method:string类型,表示填充方法,可选方法”constant”,”reflect”,”symmetric”,”edge”。
value:Saclar或Variable型或None,表示待填充的数值。数据类型和tensor一致;
padding:List[int]或Tuple[int]型或None。padding为None时使用一个长度为2*len(tensor.shape)的全 0 list。例如,一个hw的二维Tensor对应的padding是 [h_top, w_left, h_bottom, w_right]。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.6.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.7. repeat
24.5.5.7.1. 接口定义
def repeat(tensor_i:Tensor, reps:Union[List[int], Tuple[int]], out_name:str=None): #pass
24.5.5.7.2. 功能描述
在指定的维度重复复制数据。功能同tile。 该操作属于 受限本地操作 。
24.5.5.7.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
reps:List[int]或Tuple[int]型,表示每个维度的复制份数。要求order长度和tensor维度一致。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.7.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.7.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.5.8. extract
24.5.5.8.1. 接口定义
def extract(input: Tensor, start: Union[List[int], Tuple[int]] = None, end: Union[List[int], Tuple[int]] = None, stride: Union[List[int], Tuple[int]] = None, out_name: str = None)
24.5.5.8.2. 功能描述
对输入tensor进行切片提取操作。
24.5.5.8.3. 参数说明
input:Tensor类型,表示输入张量。
start:整数的列表或者元组或None,表示切片的起始位置,为None时表示全为0。
end:整数的列表或者元组或None,表示切片的终止位置,为None时表示输出张量的形状。
stride:整数的列表或者元组或None,表示切片的步长,为None时表示全为1。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.8.4. 返回值
返回一个Tensor,数据类型与输入Tensor的数据类型相同。
24.5.5.8.5. 处理器支持
BM1688: 输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8/INT16/UINT16。
24.5.5.9. roll
24.5.5.9.1. 接口定义
def roll(input:Tensor, shifts: Union[int, List[int], Tuple[int]], dims: Union[int, List[int], Tuple[int]] = None, out_name:str=None): #pass
24.5.5.9.2. 功能描述
沿给定维度滚动输入张量。移出最后一个位置的元素将在第一个位置重新引入。如果 dims 为 None,则张量将在滚动之前展平,然后恢复到原始形状。 该操作属于 本地操作 。
24.5.5.9.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
shifts:int,List[int]或Tuple[int]型,张量元素移动的位数。如果 shifts 是元组/列表,则 dims 必须是相同大小的元组/列表,并且每个维度将按相应的值滚动。
dims:int,List[int],Tuple[int]型或None, 滚动的轴。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.5.9.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.5.9.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8/INT16/UINT16。
24.5.6. Sort Operator
24.5.6.1. arg
24.5.6.1.1. 接口定义
def arg(input: Tensor, method: str = "max", axis: int = 0, keep_dims: bool = True, out_name: str = None): #pass
24.5.6.1.2. 功能描述
对输入tensor的指定的axis求最大或最小值,输出对应的index,并将该axis的dim设置为1。 该操作属于 受限本地操作 。
24.5.6.1.3. 参数说明
input:Tensor类型,表示输入的操作Tensor。
method:string类型,表示操作的方法,可选’max’,’min’。
axis:int型,表示指定的轴。默认值为0。
keep_dims:bool型,表示是否保留运算后的指定轴,默认值为True表示保留(此时该轴长度为1)。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.6.1.4. 返回值
返回两个Tensor,第一个Tensor表示indices,类型为int32;第二个Tensor表示values,类型会和input的类型一致。
24.5.6.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。
24.5.6.2. topk
24.5.6.2.1. 接口定义
def topk(input: Tensor, axis: int, k: int, out_name: str = None):
24.5.6.2.2. 功能描述
按某个轴排序后前K个数。
24.5.6.2.3. 参数说明
input:Tensor类型,表示输入Tensor。
axis:int型,表示排序所使用的轴。
k:int型,表示沿着轴排序靠前的数的个数。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.6.2.4. 返回值
返回两个Tensor,第一个Tensor表示前几个数,其数据类型与输入类型相同,第二个Tensor表示前几个数在输入中的索引。
24.5.6.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。
24.5.6.3. sort
24.5.6.3.1. 接口定义
def sort(input: Tensor, axis: int = -1, descending : bool = True, out_name = None)
24.5.6.3.2. 功能描述
沿某个轴的输入张量进行排序,输出排序后的张量以及该张量的数据在输入张量中的索引。
24.5.6.3.3. 参数说明
input:Tensor类型,表示输入张量。
axis:int类型,表示指定的轴。(暂时只支持axis==-1)
descending:bool类型,表示是否按从大到小排列。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.6.3.4. 返回值
返回两个Tensor,第一个张量的数据类型与输入张量的数据类型相同,第二个张量的数据类型为INT32。
24.5.6.3.5. 处理器支持
BM1688:输入张量的数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入张量的数据类型可以是FLOAT32/FLOAT16。
24.5.6.4. argsort
24.5.6.4.1. 接口定义
def argsort(input: Tensor, axis: int = -1, descending : bool = True, out_name : str = None)
24.5.6.4.2. 功能描述
沿某个轴的输入张量进行排序,输出排序后的张量的数据在输入张量中的索引。
24.5.6.4.3. 参数说明
input:Tensor类型,表示输入张量。
axis:int类型,表示指定的轴。(暂时只支持axis==-1)
descending:bool类型,表示是否按从大到小排列。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.6.4.4. 返回值
返回一个Tensor,其数据类型为INT32。
24.5.6.4.5. 处理器支持
BM1688:输入张量的数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入张量的数据类型可以是FLOAT32/FLOAT16。
24.5.6.5. sort_by_key
24.5.6.5.1. 接口定义
def sort_by_key(input: Tensor, key: Tensor, axis: int = -1, descending : bool = True, out_name = None)
24.5.6.5.2. 功能描述
沿某个轴按键对输入张量进行排序,输出排序后的张量以及相应的键。
24.5.6.5.3. 参数说明
input:Tensor类型,表示输入。
key:Tensor类型,表示键。
axis:int类型,表示指定的轴。
descending:bool类型,表示是否按从大到小排列。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.6.5.4. 返回值
返回两个Tensor,第一个张量的数据类型与输入的数据类型相同,第二个张量的数据类型与键的数据类型相同。
24.5.6.5.5. 处理器支持
BM1688:输入和键的数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入和键的数据类型可以是FLOAT32/FLOAT16。
24.5.7. Shape About Operator
24.5.7.1. squeeze
24.5.7.1.1. 接口定义
def squeeze(tensor_i: Tensor, axis: Union[Tuple[int], List[int]], out_name: str = None): #pass
24.5.7.1.2. 功能描述
降维操作,去掉输入shape指定的某些1维的轴,如果没有指定轴(axis)则去除所有是1维的轴。 该操作属于 本地操作 。
24.5.7.1.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
axis:List[int]或Tuple[int]型,表示指定的轴。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.7.1.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.7.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.7.2. reshape
24.5.7.2.1. 接口定义
def reshape(tensor: Tensor, new_shape: Union[Tuple[int], List[int], Tensor], out_name: str = None): #pass
24.5.7.2.2. 功能描述
对输入tensor做reshape的操作。 该操作属于 本地操作 。
24.5.7.2.3. 参数说明
tensor:Tensor类型,表示输入操作Tensor。
new_shape:List[int]或Tuple[int]或Tensor类型,表示转化后的形状。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.7.2.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.7.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.7.3. shape_fetch
24.5.7.3.1. 接口定义
def shape_fetch(tensor_i: Tensor, begin_axis: int = None, end_axis: int = None, step: int = 1, out_name: str = None): #pass
24.5.7.3.2. 功能描述
对输入tensor取指定轴(axis)之间的shape信息。 该操作属于 本地操作 。
24.5.7.3.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
begin_axis:int型,表示指定开始的轴。
end_axis:int型,表示指定结束的轴。
step:int型,表示步长。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.7.3.4. 返回值
返回一个Tensor,该Tensor的数据类型为INT32。
24.5.7.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.7.4. unsqueeze
24.5.7.4.1. 接口定义
def unsqueeze(input: Tensor, axes: List[int] = [1,2], out_name: str = None): #pass
24.5.7.4.2. 功能描述
增维操作。在axis指定的位置增加1。 该操作属于 本地操作 。
24.5.7.4.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
axis:int型,表示指定的轴,设tensor_i的维度长度是D,则axis范围[-D,D-1)。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.7.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.7.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.8. Quant Operator
24.5.8.1. requant_fp_to_int
24.5.8.1.1. 接口定义
def requant_fp_to_int(tensor_i, scale, offset, requant_mode, #unused out_dtype, out_name = None, round_mode='half_away_from_zero'):
24.5.8.1.2. 功能描述
对输入tensor进行量化处理。
该操作对应的计算式为
output = saturate(int(round(input * scale)) + offset), 其中saturate为饱和到output的数据类型
该操作属于 本地操作 。
24.5.8.1.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,3-5维。
scale:List[float]型或float型,表示量化系数。
offset:List[int]型或int型;表示输出偏移。
requant_mode:int型,表示量化模式。废弃。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。(TODO)
out_dtype:string类型,表示输入Tensor的类型.数据类型可以是”int16”/”uint16”/”int8”/”uint8”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.8.1.4. 返回值
返回一个Tensor。该Tensor的数据类型由out_dtype确定。
24.5.8.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。
24.5.8.2. requant_fp
24.5.8.2.1. 接口定义
def requant_fp(tensor_i: Tensor, scale: Union[float, List[float]], offset: Union[float, List[float]], out_dtype: str, out_name: str=None, round_mode: str='half_away_from_zero', first_round_mode: str='half_away_from_zero'):
24.5.8.2.2. 功能描述
对输入tensor进行量化处理。
该操作对应的计算式为:
output = saturate(int(round(float(input) * scale + offset))), 其中saturate为饱和到output的数据类型
该操作属于 本地操作 。
24.5.8.2.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,3-5维。
scale:List[float]型或float型,表示量化系数。
offset:List[int]型或int型。表示输出偏移。
out_dtype:string类型,表示输入Tensor的类型。数据类型可以是”int16”/”uint16”/”int8”/”uint8”
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
first_round_mode:string型,表示之前量化tensor_i时使用的舍入模式。默认为“half_away_from_zero”。first_round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
24.5.8.2.4. 返回值
返回一个Tensor。该Tensor的数据类型由out_dtype确定。
24.5.8.2.5. 处理器支持
BM1688:输入数据类型可以是INT32/INT16/UINT16。
BM1684X:输入数据类型可以是INT32/INT16/UINT16。
24.5.8.3. requant_int
对输入tensor进行量化处理。
def requant_int(tensor_i: Tensor, mul: Union[int, List[int]], shift: Union[int, List[int]], offset: Union[int, List[int]], requant_mode: int, out_dtype: str="int8", out_name=None, round_mode='half_away_from_zero', rq_axis:int = 1, fuse_rq_to_matmul: bool = False):
24.5.8.3.1. 功能描述
对输入tensor进行量化处理。
当requant_mode==0时,该操作对应的计算式为:
output = shift > 0 ? (input << shift) : input output = saturate((output * multiplier) >> 31), 其中 >> 为round_half_up, saturate饱和到INT32 output = shift < 0 ? (output >> -shift) : output, 其中 >> 的舍入模式由round_mode确定。 output = saturate(output + offset), 其中saturate饱和到output数据类型
BM1684X:input数据类型可以是INT32, output数据类型可以是INT32/INT16/INT8
BM1688:input数据类型可以是INT32, output数据类型可以是INT32/INT16/INT8
当requant_mode==1时,该操作对应的计算式为:
output = saturate((input * multiplier) >> 31), 其中 >> 为round_half_up, saturate饱和到INT32 output = saturate(output >> -shift + offset), 其中 >> 的舍入模式由round_mode确定, saturate饱和到output数据类型
BM1684X:input数据类型可以是INT32, output数据类型可以是INT32/INT16/INT8
BM1688:input数据类型可以是INT32, output数据类型可以是INT32/INT16/INT8
当requant_mode==2时,该操作对应的计算式为(建议使用):
output = input * multiplier output = shift > 0 ? (output << shift) : (output >> -shift), 其中 >> 的舍入模式由round_mode确定 output = saturate(output + offset), 其中 saturate饱和到output数据类型
BM1684X:input数据类型可以是INT32/INT16/UINT16, output数据类型可以是INT16/UINT16/INT8/UINT8
BM1688:input数据类型可以是INT32/INT16/UINT16, output数据类型可以是INT16/UINT16/INT8/UINT8
该操作属于 本地操作 。
24.5.8.3.2. 参数说明
tensor_i:Tensor类型,表示输入Tensor,3-5维。
mul:List[int]型或int型,表示量化乘子系数。
shift:List[int]型或int型,表示量化移位系数。右移为负,左移为正。
offset:List[int]型或int型,表示输出偏移。
requant_mode:int型,表示量化模式。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”, 范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
out_dtype:string类型或None,表示输出Tensor的类型。None代表输出数据类型为“int8”
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
rq_axis:int型,表示在rq_axis维度做requant。
fuse_rq_to_matmul:bool类型,表示是否将requant 融合到matmul,默认是False。
24.5.8.3.3. 返回值
返回一个Tensor。该Tensor的数据类型由out_dtype确定。
24.5.8.3.4. 处理器支持
BM1684X
BM1688
24.5.8.4. dequant_int_to_fp
24.5.8.4.1. 接口定义
def dequant_int_to_fp(tensor_i: Tensor, scale: Union[float, List[float]], offset: Union[int, List[int], float, List[float]], out_dtype: str="float32", out_name: str=None, round_mode: str='half_away_from_zero'):
24.5.8.4.2. 功能描述
对输入tensor进行反量化处理。
该操作对应的计算式为:
output = (input - offset) * scale
该操作属于 本地操作 。
24.5.8.4.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,3-5维。
scale:List[float]型或float型,表示量化系数。
offset:List[int]型或int型,表示输出偏移。
out_dtype:string类型,表示输出Tensor的类型。默认输出数据类型为“float32”。当输入数据类型为int8/uint8时,取值范围为“float16”,“float32”。当输入类型为int16/uint16时,输出类型只能为“float32”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:string型,表示舍入模式。默认为“half_away_from_zero”。round_mode取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。(TODO)
24.5.8.4.4. 返回值
返回一个Tensor。该Tensor的数据类型由out_dtype指定。
24.5.8.4.5. 处理器支持
BM1684X:input数据类型可以是INT16/UINT16/INT8/UINT8。
24.5.8.5. dequant_int
24.5.8.5.1. 接口定义
def dequant_int(tensor_i: Tensor, mul: Union[int, List[int]], shift: Union[int, List[int]], offset: Union[int, List[int]], lshift: int, requant_mode: int, out_dtype: str="int8", out_name=None, round_mode='half_up'):
24.5.8.5.2. 功能描述
对输入tensor进行反量化处理。
当requant_mode==0时,该操作对应的计算式为:
output = (intpu - offset) * multiplier output = saturate(output >> -shift), 其中 >> 的舍入模式由round_mode确定, saturate饱和到INT32
BM1684X:input数据类型可以是INT16/UINT16/INT8/UINT8, output数据类型可以是INT32/INT16/UINT16
当requant_mode==1时,该操作对应的计算式为:
output = ((input - offset) * multiplier) << lshift output = saturate(output >> 31), 其中 >> 为round_half_up, saturate饱和到INT32 output = saturate(output >> -shift), 其中 >> 的舍入模式由round_mode确定, saturate饱和到output数据类型
BM1684X:input数据类型可以是INT16/UINT16/INT8/UINT8, output数据类型可以是INT32/INT16/INT8
该操作属于 本地操作 。
24.5.8.5.3. 参数说明
tensor_i:Tensor类型,表示输入Tensor,3-5维。
mul:List[int]型或int型,表示量化乘子系数。
shift:List[int]型或int型,表示量化移位系数。右移为负,左移为正。
offset:List[int]型或int型,表示输出偏移。
lshift:int型,表示左移位系数。
requant_mode:int型,表示量化模式。取值为0和1,0表示“Normal”,1表示“TFLite”。
round_mode:string型,表示舍入模式。默认为“half_up”, 范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。
out_dtype:string类型,表示输入Tensor的类型。默认为“int8”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.8.5.4. 返回值
返回一个Tensor。该Tensor的数据类型由out_dtype确定。
24.5.8.5.5. 处理器支持
BM1684X
24.5.8.6. cast
24.5.8.6.1. 接口定义
def cast(tensor_i: Tensor, out_dtype: str = 'float32', out_name: str = None, round_mode: str = 'half_away_from_zero'):
24.5.8.6.2. 功能描述
将输入张量 tensor_i 转换为指定的数据类型 out_dtype,并根据指定的舍入模式 round_mode 对数据进行舍入。 注意本算子不能单独使用,必须配合其他算子。
24.5.8.6.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
out_dtype: str = ‘float32’,输出张量的数据类型,默认为 float32。
out_name: str = None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode: str = ‘half_away_from_zero’, 舍入模式,默认为 half_away_from_zero。取值范围为“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”。注意,此函数round_mode不支持“half_up”与“half_down”。
24.5.8.6.4. 返回值
返回一个Tensor,该Tensor的数据类型由输入的out_dtype决定。
24.5.8.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/UINT8/INT8。
24.5.9. Up/Down Scaling Operator
24.5.9.1. maxpool2d
24.5.9.1.1. 接口定义
def maxpool2d(input: Tensor, kernel: Union[List[int],Tuple[int],None] = None, stride: Union[List[int],Tuple[int],None] = None, pad: Union[List[int],Tuple[int],None] = None, ceil_mode: bool = False, scale: List[float] = None, zero_point: List[int] = None, out_name: str = None, round_mode: str="half_away_from_zero"): #pass
24.5.9.1.2. 功能描述
对输入Tensor进行Max池化处理。请参考各大框架下的池化操作。 该操作属于 本地操作 。
24.5.9.1.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
kernel:List[int]或Tuple[int]型或None,输入None表示使用global_pooling,不为None时要求该参数长度为2。
stride:List[int]或Tuple[int]型或None,表示步长尺寸,输入None使用默认值[1,1],不为None时要求该参数长度为2。
pad:List[int]或Tuple[int]型或None,表示填充尺寸,输入None使用默认值[0,0,0,0],不为None时要求该参数长度为4。
ceil:bool型,表示计算output shape时是否向上取整。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为input,output的scale。
zero_point:List[int]类型或None,偏移参数。取None代表非量化计算。若为List,长度为2,分别为input,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:String型,当输入输出Tensor为量化时,表示舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
24.5.9.1.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.9.2. maxpool2d_with_mask
24.5.9.2.1. 接口定义
def maxpool2d_with_mask(input: Tensor, kernel: Union[List[int],Tuple[int],None] = None, stride: Union[List[int],Tuple[int],None] = None, pad: Union[List[int],Tuple[int],None] = None, ceil_mode: bool = False, out_name: str = None, mask_name: str = None): #pass
24.5.9.2.2. 功能描述
对输入Tensor进行Max池化处理,并输出其mask index。请参考各大框架下的池化操作。 该操作属于 本地操作 。
24.5.9.2.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
kernel:List[int]或Tuple[int]型或None,输入None表示使用global_pooling,不为None时要求该参数长度为2。
pad:List[int]或Tuple[int]型或None,表示填充尺寸,输入None使用默认值[0,0,0,0],不为None时要求该参数长度为4。
stride:List[int]或Tuple[int]型或None,表示步长尺寸,输入None使用默认值[1,1],不为None时要求该参数长度为2。
ceil:bool型,表示计算output shape时是否向上取整。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
mask_name:string类型或None,表示输出Mask的名称,为None时内部会自动产生名称。
24.5.9.2.4. 返回值
返回两个Tensor,一个Tensor的数据类型与输入Tensor相同。另一个返回一个坐标Tensor,该Tensor是记录使用比较运算池化时所选择的坐标。
24.5.9.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。
24.5.9.3. maxpool3d
24.5.9.3.1. 接口定义
def maxpool3d(input: Tensor, kernel: Union[List[int],int,Tuple[int, ...]] = None, stride: Union[List[int],int,Tuple[int, ...]] = None, pad: Union[List[int],int,Tuple[int, ...]] = None, ceil_mode: bool = False, scale: List[float] = None, zero_point: List[int] = None, out_name: str = None, round_mode : str="half_away_from_zero"): #pass
24.5.9.3.2. 功能描述
对输入Tensor进行Max池化处理。请参考各大框架下的池化操作。 该操作属于 本地操作 。
24.5.9.3.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
kernel:List[int]或Tuple[int]型或int或None,输入None表示使用global_pooling,不为None时若输入单个整数,表示在3个维度上的kernel大小相同,若输入List或Tuple,要求该参数长度为3。
stride:List[int]或Tuple[int]型或int或None,表示步长尺寸,输入None使用默认值[1,1,1],不为None时若输入单个整数,表示在3个维度上的stride大小相同,若输入List或Tuple,要求该参数长度为3。
pad:List[int]或Tuple[int]型或int或None,表示填充尺寸,输入None使用默认值[0,0,0,0,0,0],不为None时若输入单个整数,表示在3个维度上的pad大小相同,若输入List或Tuple,要求该参数长度为6。
ceil_mode:bool型,表示计算output shape时是否向上取整。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为input,output的scale。
zero_point:List[int]类型或None,偏移参数。取None代表非量化计算。若为List,长度为2,分别为input,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
round_mode:String型,当输入输出Tensor为量化时,表示舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
24.5.9.3.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.3.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.9.4. avgpool2d
24.5.9.4.1. 接口定义
def avgpool2d(input: Tensor, kernel: Union[List[int],Tuple[int],None] = None, stride: Union[List[int],Tuple[int],None] = None, pad: Union[List[int],Tuple[int],None] = None, ceil_mode: bool = False, scale: List[float] = None, zero_point: List[int] = None, out_name: str = None, count_include_pad : bool = False, round_mode : str="half_away_from_zero", first_round_mode : str="half_away_from_zero"): #pass
24.5.9.4.2. 功能描述
对输入Tensor进行Avg池化处理。请参考各大框架下的池化操作。 该操作属于 本地操作 。
24.5.9.4.3. 参数说明
input:Tensor类型,表示输入操作Tensor。
kernel:List[int]或Tuple[int]型或None,输入None表示使用global_pooling,不为None时要求该参数长度为2。
stride:List[int]或Tuple[int]型或None,表示步长尺寸,输入None使用默认值[1,1],不为None时要求该参数长度为2。
pad:List[int]或Tuple[int]型或None,表示填充尺寸,输入None使用默认值[0,0,0,0],不为None时要求该参数长度为4。
ceil_mode:bool型,表示计算output shape时是否向上取整。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为input,output的scale。
zero_point:List[int]类型或None,偏移参数。取None代表非量化计算。若为List,长度为2,分别为input,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
count_include_pad:Bool类型,表示在计算平均值时,是否将pad值计算在内,默认值为False。
round_mode:String型,当输入输出Tensor为量化时,表示舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
first_round_mode:String型,当输入输出Tensor为量化时,表示第一次的舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
24.5.9.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.9.5. avgpool3d
24.5.9.5.1. 接口定义
def avgpool3d(input: Tensor, kernel: Union[List[int],int,Tuple[int, ...]] = None, stride: Union[List[int],int,Tuple[int, ...]] = None, pad: Union[List[int],int,Tuple[int, ...]] = None, ceil_mode: bool = False, scale: List[float] = None, zero_point: List[int] = None, out_name: str = None, count_include_pad : bool = False, round_mode : str="half_away_from_zero", first_round_mode : str="half_away_from_zero"): #pass
24.5.9.5.2. 功能描述
对输入Tensor进行Avg池化处理。请参考各大框架下的池化操作。 该操作属于 本地操作 。
24.5.9.5.3. 参数说明
tensor:Tensor类型,表示输入操作Tensor。
kernel:List[int]或Tuple[int]型或int或None,输入None表示使用global_pooling,不为None时若输入单个整数,表示在3个维度上的kernel大小相同,若输入List或Tuple,要求该参数长度为3。
pad:List[int]或Tuple[int]型或int或None,表示填充尺寸,输入None使用默认值[0,0,0,0,0,0],不为None时若输入单个整数,表示在3个维度上的pad大小相同,若输入List或Tuple,要求该参数长度为6。
stride:List[int]或Tuple[int]型或int或None,表示步长尺寸,输入None使用默认值[1,1,1],不为None时若输入单个整数,表示在3个维度上的stride大小相同,若输入List或Tuple,要求该参数长度为3。
ceil_mode:bool型,表示计算output shape时是否向上取整。
scale:List[float]类型或None,量化参数。取None代表非量化计算。若为List,长度为2,分别为input,output的scale。
zero_point:List[int]类型或None,偏移参数。取None代表非量化计算。若为List,长度为2,分别为input,output的zero_point。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
count_include_pad:Bool类型,表示在计算平均值时,是否将pad值计算在内,默认值为False。
round_mode:String型,当输入输出Tensor为量化时,表示第二次的舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
first_round_mode:String型,当输入输出Tensor为量化时,表示第一次的舍入模式。默认值为’half_away_from_zero’。round_mode取值范围为”half_away_from_zero”, “half_to_even”, “towards_zero”, “down”, “up”。
24.5.9.5.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.5.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8/UINT8。
24.5.9.6. upsample
24.5.9.6.1. 接口定义
def upsample(tensor_i: Tensor, scale: int = 2, out_name: str = None): #pass
24.5.9.6.2. 功能描述
在h和w维度对输入tensor数据进行scale倍重复扩展输出。 该操作属于 本地操作 。
24.5.9.6.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
scale:int型,表示扩展倍数。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.9.6.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.6.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16/INT8。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16/INT8。
24.5.9.7. reduce
24.5.9.7.1. 接口定义
def reduce(tensor_i: Tensor, method: str = 'ReduceSum', axis: Union[List[int],Tuple[int],int] = None, keep_dims: bool = False, out_name: str = None): #pass
24.5.9.7.2. 功能描述
依据axis_list,对输入的tensor做reduce操作。 该操作属于 受限本地操作 ;仅当输入数据类型为FLOAT32时是 本地操作。
24.5.9.7.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
method:string类型,表示reduce方法,目前可选”ReduceMin”, “ReduceMax”, “ReduceMean”, “ReduceProd”, “ReduceL2”, “ReduceL1”,”ReduceSum”。
axis:List[int]或Tuple[int]或int,表示需要reduce的轴。
keep_dims:bool型,表示是否要保留原先的维度。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.9.7.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入Tensor相同。
24.5.9.7.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.10. Normalization Operator
24.5.10.1. batch_norm
24.5.10.1.1. 接口定义
def batch_norm(input: Tensor, mean: Tensor, variance: Tensor, gamma: Tensor = None, beta: Tensor = None, epsilon: float = 1e-5, out_name: str = None): #pass
24.5.10.1.2. 功能描述
该batch_norm算子先完成输入值的批归一化,完成归一化之后再进行缩放和平移。 批归一化运算过程可参考各框架的batch_norm算子。
该操作属于 本地操作 。
24.5.10.1.3. 参数说明
input:Tensor类型,表示输入待归一化的Tensor,维度不限,如果x只有1维,c为1,否则c等于x的shape[1]。
mean:Tensor类型,表示输入的均值,shape为[c]。
variance:Tensor类型,表示输入的方差值,shape为[c]。
gamma:Tensor类型或None,表示批归一化之后进行的缩放,不为None时要求shape为[c],取None时相当于shape为[c]的全1Tensor。
beta:Tensor类型或None,表示批归一化和缩放之后进行的平移,不为None时要求shape为[c],取None时相当于shape为[c]的全0Tensor。
epsilon:FLOAT类型,表示为了除法运算数值稳定加在分母上的值。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.10.1.4. 返回值
返回Tensor类型,表示输出归一化后的Tensor,数据类型与输入一致。
24.5.10.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.10.2. layer_norm
24.5.10.2.1. 接口定义
def layer_norm(input: Tensor, gamma: Tensor = None, beta: Tensor = None, epsilon: float = 1e-5, axis: int, out_name: str = None): #pass
24.5.10.2.2. 功能描述
该layer_norm算子先完成输入值的归一化,完成归一化之后再进行缩放和平移。 批归一化运算过程可参考各框架的layer_norm算子。
该操作属于 本地操作 。
24.5.10.2.3. 参数说明
input:Tensor类型,表示输入待归一化的Tensor,维度不限,如果x只有1维,c为1,否则c等于x的shape[1]。
gamma:Tensor类型或None,表示批归一化之后进行的缩放,不为None时要求shape为[c],取None时相当于shape为[c]的全 1 Tensor。
beta:Tensor类型或None,表示批归一化和缩放之后进行的平移,不为None时要求shape为[c],取None时相当于shape为[c]的全 0 Tensor。
epsilon:FLOAT类型,表示为了除法运算数值稳定加在分母上的值。
axis:int型,第一个标准化的维度。 如果rank(X)为r,则axis的允许范围为[-r, r)。 负值表示从后面开始计算维度。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.10.2.4. 返回值
返回Tensor类型,表示输出归一化后的Tensor,数据类型与输入一致。
24.5.10.2.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.10.3. group_norm
24.5.10.3.1. 接口定义
def group_norm(input: Tensor, gamma: Tensor = None, beta: Tensor = None, epsilon: float = 1e-5, num_groups: int, out_name: str = None): #pass
24.5.10.3.2. 功能描述
该group_norm算子先完成输入值的归一化,完成归一化之后再进行缩放和平移。 批归一化运算过程可参考各框架的group_norm算子。
该操作属于 本地操作 。
24.5.10.3.3. 参数说明
input:Tensor类型,表示输入待归一化的Tensor,维度不限,如果x只有1维,c为1,否则c等于x的shape[1]。
gamma:Tensor类型或None,表示批归一化之后进行的缩放,不为None时要求shape为[c],取None时相当于shape为[c]的全1Tensor。
beta:Tensor类型或None,表示批归一化和缩放之后进行的平移,不为None时要求shape为[c],取None时相当于shape为[c]的全0Tensor。
epsilon:FLOAT类型,表示为了除法运算数值稳定加在分母上的值。
num_groups:int型,表示分组的数量。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.10.3.4. 返回值
返回Tensor类型,表示输出归一化后的Tensor,数据类型与输入一致。
24.5.10.3.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.10.4. rms_norm
24.5.10.4.1. 接口定义
def rms_norm(input: Tensor, gamma: Tensor = None, epsilon: float = 1e-5, axis: int = -1, out_name: str = None): #pass
24.5.10.4.2. 功能描述
该rms_norm算子先完成输入值最后一个维度的归一化,完成归一化之后再进行缩放。运算过程可参考各框架的RMSNorm算子。
该操作属于 本地操作 。
24.5.10.4.3. 参数说明
input:Tensor类型,表示输入待归一化的Tensor,维度不限。
gamma:Tensor类型或None,表示批归一化之后进行的缩放,不为None时要求shape与input最后一维 w 相等,取None时相当于shape为[w]的全1Tensor。
epsilon:FLOAT类型,表示为了除法运算数值稳定加在分母上的值。
axis: int型,第一个标准化的维度。 如果rank(X)为r,则axis的允许范围为[-r, r)。 负值表示从后面开始计算维度。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.10.4.4. 返回值
返回Tensor类型,表示输出归一化的后的Tensor,数据类型与输入一致。
24.5.10.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.10.5. normalize
24.5.10.5.1. 接口定义
def normalize(input: Tensor, p: float = 2.0, axes: Union[List[int], int] = 1, eps : float = 1e-12, out_name: str = None):
24.5.10.5.2. 功能描述
对输入张量input的指定维度进行 \(L_p\) 归一化。
对于大小为 \((n_0, ..., n_{dim}, ..., n_k)\) 的张量输入,每个 \(n_{dim}`元素向量:math:`v`沿维度:attr:`axes\) 的变换为
在默认参数下,它对向量的维度1上进行L2归一化。
该操作属于 本地操作 。
24.5.10.5.3. 参数说明
input: Tensor类型。表示输入Tensor。数据类型为float32, float16。
p: float类型,默认值为2.0。表示是归一化过程中的指数值。
axes: Union[List[int], int]类型,默认为1。表示要归一化的维度。如果是list,那么list内的值必须是连续的。注意,axes = [0,-1]并不是连续的。
eps : float类型,默认值为1e-12。 一个极小值,用来避免除以0。
out_name: string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.10.5.4. 返回值
返回Tensor类型,表示输出归一化的后的Tensor,数据类型与输入一致。
24.5.10.5.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.11. Vision Operator
24.5.11.1. nms
24.5.11.1.1. 接口定义
def nms(boxes: Tensor, scores: Tensor, format: str = 'PYTORCH', max_box_num_per_class: int = 1, out_name: str = None)
24.5.11.1.2. 功能描述
对输入tensor进行非极大值抑制处理。
24.5.11.1.3. 参数说明
boxes:Tensor类型,表示输入框的列表。必须是三维张量,第一维为批的个数,第二维为框的个数,第三维为框的4个坐标。
scores:Tensor类型,表示输入得分的列表。必须是三维张量,第一维为批的个数,第二维为类的个数,第三维为框的个数。
format:string类型,’TENSORFLOW’表示Tensorflow格式[y1, x1, y2, x2],’PYTORCH’表示Pytorch格式[x_center, y_center, width, height], 默认值为’PYTORCH’。
max_box_num_per_class:int型,表示每个类中的输出框的最大个数。必须大于0,默认值为1。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.11.1.4. 返回值
返回一个Tensor,表示从框列表中选出的框的索引的列表,它是一个2维张量,格式为[num_selected_indices, 3], 其中每个索引的格式为[batch_index, class_index, box_index]。
24.5.11.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32。
BM1684X:输入数据类型可以是FLOAT32。
24.5.11.2. interpolate
24.5.11.2.1. 接口定义
def interpolate(input: Tensor, scale_h: float, scale_w: float, method: str = 'nearest', coord_mode: str = "pytorch_half_pixel", out_name: str = None)
24.5.11.2.2. 功能描述
对输入tensor进行插值。
24.5.11.2.3. 参数说明
input:Tensor类型,表示输入的Tensor。必须是至少2维的张量。
scale_h:float型,表示高度方向的缩放系数,必须大于0。
scale_w:float型,表示宽度方向的缩放系数,必须大于0。
method: string类型,表示插值方法,可选项为”nearest”或”linear”。默认值为”nearest”。
coord_mode: string类型,表示输出坐标的计算方法,可选项为”align_corners”、”pytorch_half_pixel”、”half_pixel”、”asymmetric”。默认值为”pytorch_half_pixel”。
out_name:string类型或None,表示输出Tensor的名称。如果为None,内部会自动生成名称。
其中, coord_mode 的意义跟onnx的 Resize 算子的参数 coordinate_transformation_mode 的意义是一样的。若h/w方向的放缩因子为 scale ,输入坐标为 x_in ,输入尺寸为 l_in ,输出坐标为 x_out ,输出尺寸为 l_out ,则逆映射定义如下:
“half_pixel”:
x_in = (x_out + 0.5) / scale - 0.5
“pytorch_half_pixel”:
x_in = len > 1 ? (x_out + 0.5) / scale - 0.5 : 0
“align_corners”:
x_in = x_out * (l_in - 1) / (l_out - 1)
“asymmetric”:
x_in = x_out / scale
24.5.11.2.4. 返回值
返回一个Tensor,表示插值后的结果。数据类型与输入类型相同,形状根据缩放系数进行调整。
24.5.11.2.5. 处理器支持
BM1688:支持的输入数据类型为FLOAT32/FLOAT16/INT8。
BM1684X:支持的输入数据类型为FLOAT32/FLOAT16/INT8。
24.5.11.3. yuv2rgb
24.5.11.3.1. 接口定义
def yuv2rgb( inputs: Tensor, src_format: int, dst_format: int, ImageOutFormatAttr: str, formula_mode: str, round_mode: str, out_name: str = None, ):
24.5.11.3.2. 功能描述
对输入tensor进行yuv转rgb格式,输入的Tensor要求shape=[n,h*3/2,w],其中n为批个数,h为图像的像素高,w为图像的像素宽。
24.5.11.3.3. 参数说明
inputs:Tensor类型,表示输入的yuv矩阵。必须是三维张量,第一维为批的个数,第二维为输入矩阵的高,第三维为输入矩阵的宽。
src_format:Int类型,表示输入的格式。FORMAT_MAPPING_YUV420P_YU12=0,FORMAT_MAPPING_YUV420P_YV12=1,FORMAT_MAPPING_NV12=2,FORMAT_MAPPING_NV21=3。
dst_format:Int类型,表示输出的格式。FORMAT_MAPPING_RGB=4,FORMAT_MAPPING_BGR=5。
ImageOutFormatAttr:str型,目前只支持”UINT8”。
formula_mode:string类型,表示使用的yuv2rgb转换公式,目前支持”_601_limited”、”_601_full”。
round_mode:string类型,表示使用的舍入模式,目前支持”HalfAwayFromZero”, “HalfToEven”。
out_name:string类型,表示输出Tensor的名称,非必选,默认为None。
24.5.11.3.4. 返回值
返回一个Tensor,表示转换出的rgb格式Tensor,shape=[n,3,h,w],其中n为批个数,h为图像的像素高,w为图像的像素宽。
24.5.11.3.5. 处理器支持
BM1684X:输入数据类型是INT8/UINT8, 输出UINT8。
BM1688:输入数据类型是INT8/UINT8,输出UINT8。
24.5.11.4. roiExtractor
24.5.11.4.1. 接口定义
def roiExtractor(rois: Tensor, target_lvls: Tensor, feats: List[Tensor], PH: int, PW: int, sampling_ratio: int, list_spatial_scale: Union[int, List[int], Tuple[int]], mode:str=None, out_name:str=None)
24.5.11.4.2. 功能描述
给定4个featrue map,根据target_lvls索引从rois中抽取对应的roi,并与对应的featrue map做roi align,得到最终输出。 该操作属于 本地操作 。
24.5.11.4.3. 参数说明
rois:Tensor类型,表示所有的rois。
target_lvls:Tensor类型,表示roi对应哪层feature map。
feats:List[Tensor]型,表示多层feature map。
PH:int类型,表示输出的height。
PW:int类型,表示输出的width。
sampling_ratio:int类型,表示每层feature map的sample ratio。
- list_spatial_scale:int,List[int]或Tuple[int]型,表示每层feature map对应的spatial scale。
请注意,spatial scale遵循mmdetection风格,最初给定一个整数值,但其浮点倒数最終被用于RoIAlign。
- mode: string类型, 表示Op执行模式, 目前支持DynNormal, DynFuse。
- 请注意,在DynFuse模式下,输入rois的坐标 支持2类风格,1)遵循mmdetection的风格,即5长度[batch_id, x0, y0, x1, y1]。
2)自定义的7长度[a, b, x0, y0, x1, y1, c], 特別注意如果batch_id和a,b,c难以匹配, 建议另外重新生成batch_id。
在DynNormal模式下,输入rois的坐标风格是一种自定义的7长度[a, b, x0, y0, x1, y1, c]风格,以便应用客户独特的模型。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.11.4.4. 返回值
返回一个Tensor,该Tensor的数据类型与输入rois相同。
24.5.11.4.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.12. Select Operator
24.5.12.1. nonzero
24.5.12.1.1. 接口定义
def nonzero(tensor_i:Tensor, dtype: str = 'int32', out_name: str = None): #pass
24.5.12.1.2. 功能描述
抽取输入Tensor data为true时对应的位置信息信息。 该操作属于 全局操作 。
24.5.12.1.3. 参数说明
tensor_i:Tensor类型,表示输入操作Tensor。
dtype:string型,表示输出数据类型,目前仅可使用默认值”int32”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.12.1.4. 返回值
返回一个Tensor,数据类型为INT32。
24.5.12.1.5. 处理器支持
BM1688:输入数据类型可以是FLOAT32/FLOAT16。
BM1684X:输入数据类型可以是FLOAT32/FLOAT16。
24.5.12.2. lut
24.5.12.2.1. 接口定义
def lut(input: Tensor, table: Tensor, out_name: str = None): #pass
24.5.12.2.2. 功能描述
对输入tensor进行查找表查找操作。
24.5.12.2.3. 参数说明
input:Tensor类型,表示输入。
table:Tensor类型,表示查找表。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.12.2.4. 返回值
返回一个Tensor,数据类型与张量 table 的数据类型相同。
24.5.12.2.5. 处理器支持
BM1688: input 的数据类型可以是INT8/UINT8, table 的数据类型可以是INT8/UINT8。
BM1684X: input 的数据类型可以是INT8/UINT8, table 的数据类型可以是INT8/UINT8。
24.5.12.3. select
24.5.12.3.1. 接口定义
def select(lhs: Tensor, rhs: Tensor, tbrn: Tensor, fbrn: Tensor, type: str, out_name = None): #pass
24.5.12.3.2. 功能描述
根据 lhs 与 rhs 的数值比较结果来选择,条件为真时,选择 tbrn ,条件为假时,选择 fbrn 。
24.5.12.3.3. 参数说明
lhs:Tensor类型,表示左边的张量。
rhs:Tensor类型,表示右边的张量。
tbrn:Tensor类型,表示条件为真时取的值。
fbrn:Tensor类型,表示条件为假时取的值。
type: string类型,表示比较符。可选项为”Greater”/”Less”/”GreaterOrEqual”/”LessOrEqual”/”Equal”/”NotEqual”。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
约束条件:要求 lhs 与 rhs 的形状和数据类型相同, tbrn 与 fbrn 的形状和数据类型相同。
24.5.12.3.4. 返回值
返回一个Tensor,数据类型与张量 `tbrn`的数据类型相同。
24.5.12.3.5. 处理器支持
BM1688: lhs / rhs / tbrn / fbrn 的数据类型可以是FLOAT32/FLOAT16(TODO)。
BM1684X: lhs / rhs / tbrn / fbrn 的数据类型可以是FLOAT32/FLOAT16(TODO)。
24.5.12.4. cond_select
24.5.12.4.1. 接口定义
def cond_select(cond: Tensor, tbrn: Union[Tensor, Scalar], fbrn: Union[Tensor, Scalar], out_name:str = None): #pass
24.5.12.4.2. 功能描述
根据条件 cond 来选择,条件为真时,选择 tbrn ,条件为假时,选择 fbrn 。
24.5.12.4.3. 参数说明
cond:Tensor类型,表示条件。
tbrn:Tensor类型或Scalar类型,表示条件为真时取的值。
fbrn:Tensor类型或Scalar类型,表示条件为假时取的值。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
约束条件:若 tbrn 和 fbrn 皆为张量,则要求 tbrn 与 fbrn 的形状和数据类型相同。
24.5.12.4.4. 返回值
返回一个Tensor,数据类型与张量 tbrn 的数据类型相同。
24.5.12.4.5. 处理器支持
BM1688: cond / tbrn / fbrn 的数据类型可以是FLOAT32/FLOAT16(TODO)。
BM1684X: cond / tbrn / fbrn 的输入数据类型可以是FLOAT32/FLOAT16(TODO)。
24.5.12.5. bmodel_inference_combine
24.5.12.5.1. 接口定义
def bmodel_inference_combine( bmodel_file: str, final_mlir_fn: str, input_data_fn: Union[str, dict], tensor_loc_file: str, reference_data_fn: str, dump_file: bool = True, save_path: str = "", out_fixed: bool = False, dump_cmd_info: bool = True, skip_check: bool = True, # disable data_check to increase processing speed run_by_op: bool = False, # enable to run_by_op, may cause timeout error when some OPs contain too many atomic cmds desire_op: list = [], # set ["A","B","C"] to only dump tensor A/B/C, dump all tensor as defalt is_soc: bool = False, # soc mode ONLY support {reference_data_fn=xxx.npz, dump_file=True} using_memory_opt: bool = False, # required when is_soc=True enable_soc_log: bool = False, # required when is_soc=True soc_tmp_path: str = "/tmp", # required when is_soc=True hostname: str = None, # required when is_soc=True port: int = None, # required when is_soc=True username: str = None, # required when is_soc=True password: str = None, # required when is_soc=True ):
24.5.12.5.2. 功能描述
根据生成的bmodel进行推理和逐层Tensor数据打印,配合 npz_tool.py 进行bmodel正确性验证。
24.5.12.5.3. 参数说明
bmodel_file: String类型,表示bmodel绝对路径。
final_mlir_fn: String类型,表示bmodel对应的final.mlir的绝对路径。
input_data_fn: String类型或dict类型,表示输入数据的格式,支持 字典格式、.dat格式、.npz格式。
tensor_loc_file: String类型,表示bmodel对应的tensor_location.json文件的绝对路径。
reference_data_fn: String,类型,表示 `module.state = “TPU_LOWERED”`的.mlir文件或对应的.npz推理结果的绝对路径。bmodel推理时会将原本一个算子的shape拆散,该参数用于恢复原本的shape。
dump_file: Bool类型,表示逐层Tensor数据是否以.npz文件形似保存,或直接返回字典。
save_path: String类型,表示 dump_file=True 时的主机(host)端保存逐层推理的.npz文件的绝对路径。
out_fixed: Bool类型,表示逐层Tensor数据输出是否保持为定点格式。
dump_cmd_info: Bool类型,表示将当前bmodel中包含的所有原子指令对应的final.mlir的信息保存成txt文件,保存路径在save_path下。
skip_check: Bool类型,启用此项可禁用数据对比,提高推理速度。soc模式下默认不进行数据对比。
run_by_op: Bool类型,启用后按OP粒度运行,禁用时为按原子指令粒度运行。按OP粒度运行速度较快,但当一个OP中包含过多原子指令时可能会引发timeout错误。
desire_op: List类型,其中当传入多个String类型的名字时,只会dump出给定名字的tensor。默认dump所有层tensor。
is_soc: Bool类型,表示是否启用soc模式进行推理。
using_memory_opt: Bool类型,启用后会减小在device端的内存消耗,但会增加耗时。推荐在大模型时启用。
enable_soc_log: Bool类型,启用此项打印并在save_path下保存log日志。
soc_tmp_path: String类型,表示soc模式下,板卡(device)端存放临时文件与推理工具的绝对路径。
hostname: String类型,表示soc模式下,device端的ip地址。
port: Int类型,表示soc模式下,device端的端口号。
username: String类型,表示soc模式下,device端的用户名。
password: String类型,表示soc模式下,device端的密码。
注意:
当使用pcie或soc模式进行逐层dump时,需先使用 /tpu-mlir/envsetup.sh 中的use_chip切换环境变量。当使用cmodel模式时,使用use_cmodel。
当使用soc模式时:reference_data_fn必须是.npz格式。
24.5.12.5.4. 返回值
cmodel/pcie模式下:如果 dump_file=True,则在save_path下生成bmodel_infer_xxx.npz文件,否则返回python字典。
soc模式下:在save_path下生成soc_infer_xxx.npz文件。
24.5.12.5.5. 处理器支持
BM1688: cmodel模式。
BM1684X: cmodel/pcie/soc模式。
24.5.12.6. scatter
24.5.12.6.1. 接口定义
def scatter(input: Tensor, index: Tensor, updates: Tensor, axis: int = 0, out_name: str = None): #pass
24.5.12.6.2. 功能描述
根据指定的索引,将输入数据写入目标Tensor的特定位置。该操作允许将更新输入Tensor的元素散布到输出Tensor的指定位置。请参考各大框架下的ScatterElements操作。 该操作属于 本地操作 。
24.5.12.6.3. 参数说明
input:Tensor类型,表示输入操作Tensor,即需要更新的目标Tensor。
index:Tensor类型,表示指定更新位置的索引Tensor。
updates:Tensor类型,表示要写入目标Tensor的值。
axis:int型,表示更新的轴。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.12.6.4. 返回值
返回一个新的Tensor,该Tensor在指定位置上进行了更新操作,其他位置保持了原始输入的Tensor值。
24.5.12.6.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32,FLOAT16,INT8。
BM1688:输入数据类型可以是FLOAT32,FLOAT16,INT8。
24.5.12.7. scatterND
24.5.12.7.1. 接口定义
def scatterND(input: Tensor, indices: Tensor, updates: Tensor, out_name: str = None): #pass
24.5.12.7.2. 功能描述
根据指定的索引,将输入数据写入目标Tensor的特定位置。该操作允许将更新输入Tensor的元素散布到输出Tensor的指定位置。请参考ONNX 11下的ScatterND操作。 该操作属于 本地操作 。
24.5.12.7.3. 参数说明
input:Tensor类型,表示输入操作Tensor,即需要更新的目标Tensor。
indices:Tensor类型,表示指定更新位置的索引Tensor。 数据类型必须是uint32。
updates:Tensor类型,表示要写入目标Tensor的值。Rank(updates) = Rank(input) + Rank(indices) - shape(indices)[-1] -1 。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.12.7.4. 返回值
返回一个新的Tensor,该Tensor在指定位置上进行了更新操作,其他位置保持了原始输入的Tensor值。形状与数据类型和input一致。
24.5.12.7.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32,FLOAT16,INT8。
BM1688:输入数据类型可以是FLOAT32,FLOAT16,INT8。
24.5.13. Preprocess Operator
24.5.13.1. mean_std_scale
24.5.13.1.1. 接口定义
def mean_std_scale(input: Tensor, std: List[float], mean: List[float], scale: Optional[Union[List[float],List[int]]] = None, zero_points: Optional[List[int]] = None, out_name: str = None, odtype="float16", round_mode: str = "half_away_from_zero"): #pass
24.5.13.1.2. 功能描述
对输入Tensor 进行预处理操作。 该操作属于 全局操作 。
24.5.13.1.3. 参数说明
input:Tensor类型,表示输入操作Tensor。必须是4维或5维。
std:List[float]类型,表示数据集的标准差。mean,std维度必须和input的channel维度一致,即input的第二维。
mean: List[float]类型,表示数据集的均值。mean,std维度必须和input的channel维度一致,即input的第二维。
scale: Optional[Union[List[float],List[int]]]类型或None,缩放系数。
zero_points: Optional[List[int]]类型或None,表示零点。
out_name:string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
odtype:String类型,表示接口输出Tensor数据类型。默认值为”float16”。目前支持float16, int8。
round_mode:String类型,表示取整方法。默认值为”half_away_from_zero”,范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”
24.5.13.1.4. 返回值
返回一个Tensor,数据类型为odtype。
24.5.13.1.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32/UINT8/INT8,输出类型可以为INT8/FLOAT16。
24.5.14. Transform Operator
24.5.14.1. rope
24.5.14.1.1. 接口定义
def rope( input: Tensor, weight0: Tensor, weight1: Tensor, is_permute_optimize: bool = False, # unused mul1_round_mode: str = 'half_up', mul2_round_mode: str= 'half_up', add_round_mode: str = 'half_up', mul1_shift: int = None, mul2_shift: int = None, add_shift: int = None, mul1_saturation: bool = True, mul2_saturation: bool = True, add_saturation: bool = True, out_name: str = None): #pass
24.5.14.1.2. 功能描述
对输入Tensor 进行旋转编码(RoPE)操作。 该操作属于 全局操作
24.5.14.1.3. 参数说明
input:Tensor类型,表示输入操作Tensor。必须是4维。
weight0: Tensor, 表示输入操作Tensor。
weight1: Tensor, 表示输入操作Tensor。
is_permute_optimize:bool类型, 表示是否做permute下沉,进行permute下沉shape的检查。# unused
mul1_round_mode: String类型, 表示RoPE中mul1的取整方法。默认值为”half_away_from_zero”,范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”,“half_up”,“half_down”。
mul2_round_mode: String类型, 表示RoPE中mul2的取整方法。默认值为”half_away_from_zero”,范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”,“half_up”,“half_down”。
add_round_mode: String类型, 表示RoPE中add的取整方法。默认值为”half_away_from_zero”,范围是“half_away_from_zero”,“half_to_even”,“towards_zero”,“down”,“up”,“half_up”,“half_down”。
mul1_shift: int型,表示RoPE中mul1的移位的位数。
mul2_shift: int型,表示RoPE中mul2的移位的位数。
add_shift: int型,表示RoPE中add的移位的位数。
mul1_saturation: bool 类型, 表示RoPE中的mul1计算结果是否需要饱和处理, 默认为True饱和处理, 非必要不修改。
mul2_saturation: bool 类型, 表示RoPE中的mul2计算结果是否需要饱和处理, 默认为True饱和处理, 非必要不修改。
add_saturation: bool 类型, 表示RoPE中的add计算结果是否需要饱和处理, 默认为True饱和处理, 非必要不修改。
out_name: output name, string类型,默认为None。
24.5.14.1.4. 返回值
返回一个Tensor,数据类型为odtype。
24.5.14.1.5. 处理器支持
BM1684X:输入数据类型可以是FLOAT32,FLOAT16和INT类型。
24.5.14.2. multi_scale_deformable_attention
24.5.14.2.1. 接口定义
def multi_scale_deformable_attention( query: Tensor, value: Tensor, key_padding_mask: Tensor, reference_points: Tensor, sampling_offsets_weight: Tensor, sampling_offsets_bias_ori: Tensor, attention_weights_weight: Tensor, attention_weights_bias_ori: Tensor, value_proj_weight: Tensor, value_proj_bias_ori: Tensor, output_proj_weight: Tensor, output_proj_bias_ori: Tensor, spatial_shapes: List[List[int]], embed_dims: int, num_heads: int = 8, num_levels: int = 4, num_points: int = 4, out_name: str = None): #pass
24.5.14.2.2. 功能描述
对输入进行多尺度可变形注意力机制,具体功能可参考https://github.com/open-mmlab/mmcv/blob/main/mmcv/ops/multi_scale_deform_attn.py:MultiScaleDeformableAttention:forward,该操作的实现方式与官方有所不同。 目前只支持batch_size=1的情况。 该操作属于 本地操作 。
24.5.14.2.3. 参数说明
query:Tensor类型,Transformer的查询张量,形状为 (1, num_query, embed_dims)。
value:Tensor类型,值投影张量,形状为 (1, num_key, embed_dims)。
key_padding_mask: Tensor类型,查询张量的mask,形状为 (1, num_key)。
reference_points: Tensor类型,归一化的参考点,形状为 (1, num_query, num_levels, 2),所有元素的范围在 [0, 1] 之间,左上角为 (0,0),右下角为 (1,1),包括填充区域。
sampling_offsets_weight: Tensor类型,计算采样偏移量全连接层的权重,形状为 (embed_dims, num_heads*num_levels*num_points*2)。
sampling_offsets_bias_ori: Tensor类型,计算采样偏移量全连接层的偏置,形状为 (num_heads*num_levels*num_points*2)。
attention_weights_weight: Tensor类型,计算注意力权重全连接层的权重,形状为 (embed_dims, num_heads*num_levels*num_points)。
attention_weights_bias_ori: Tensor类型,计算注意力权重全连接层的偏置,形状为 (num_heads*num_levels*num_points)。
value_proj_weight: Tensor类型,计算值投影全连接层的权重,形状为 (embed_dims, embed_dims)。
value_proj_bias_ori: Tensor类型,计算值投影全连接层的偏置,形状为 (embed_dims)。
output_proj_weight: Tensor类型,计算输出投影全连接层的权重,形状为 (embed_dims, embed_dims)。
output_proj_bias_ori: Tensor类型,计算输出投影全连接层的偏置,形状为 (embed_dims)。
spatial_shapes: List[List[int]]类型,不同层级特征的空间形状,形状为 (num_levels, 2),最后一个维度表示 (h, w)。
embed_dims: int类型,查询、键、值的hidden_size。
num_heads: int类型,注意力头数,默认值为8。
num_levels: int类型,多尺度注意力的层级数,默认值为4。
num_points: int类型,每个层级的采样点数,默认值为4。
out_name: string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.14.2.4. 返回值
返回一个Tensor,数据类型为query.dtype。
24.5.14.2.5. 处理器支持
BM1684X: 输入数据类型可以是FLOAT32,FLOAT16类型。
BM1688: 输入数据类型可以是FLOAT32,FLOAT16类型。
24.5.15. Transform Operator
24.5.15.1. a16matmul
24.5.15.1.1. 接口定义
def a16matmul(input: Tensor, weight: Tensor, scale: Tensor, zp: Tensor, bias: Tensor = None, right_transpose=True, out_dtype: str = 'float16', out_name: str = None, group_size: int = 128, bits: int = 4, g_idx: Tensor = None, ): #pass
24.5.15.1.2. 功能描述
对输入进行W4A16/W8A16 MatMul。 该操作属于 全局操作 。
24.5.15.1.3. 参数说明
input:Tensor类型,表示输入tensor。
weight: Tensor类型,表示4bits/8bits量化后权重,以int32类型存储。
scale: Tensor类型,表示权重量化缩放因子,以float32类型存储。
zp: Tensor类型,表示权重量化零点,以int32类型存储。
bias: Tensor类型,表示偏置,以float32类型存储。
right_transpose: Bool类型,表示权重矩阵是否转置,目前仅支持为True。
out_dtype: string类型,表示输出张量的数据类型。
out_name: string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
group_size: int类型,表示量化的group大小。
bits: int类型,表示量化位宽,仅支持4bits/8bits。
g_idx: Tensor类型,量化重排系数,目前不支持。
24.5.15.1.4. 返回值
返回一个Tensor,数据类型为out_dtype。
24.5.15.1.5. 处理器支持
BM1684X: 输入数据类型可以是FLOAT32,FLOAT16类型。
BM1688: 输入数据类型可以是FLOAT32,FLOAT16类型。
24.5.16. Transform Operator
24.5.16.1. qwen2_block
24.5.16.1.1. 接口定义
def qwen2_block(hidden_states: Tensor, position_ids: Tensor, attention_mask: Tensor, q_proj_weights: Tensor, q_proj_scales: Tensor, q_proj_zps: Tensor, q_proj_bias: Tensor, k_proj_weights: Tensor, k_proj_scales: Tensor, k_proj_zps: Tensor, k_proj_bias: Tensor, v_proj_weights: Tensor, v_proj_scales: Tensor, v_proj_zps: Tensor, v_proj_bias: Tensor, o_proj_weights: Tensor, o_proj_scales: Tensor, o_proj_zps: Tensor, o_proj_bias: Tensor, down_proj_weights: Tensor, down_proj_scales: Tensor, down_proj_zps: Tensor, gate_proj_weights: Tensor, gate_proj_scales: Tensor, gate_proj_zps: Tensor, up_proj_weights: Tensor, up_proj_scales: Tensor, up_proj_zps: Tensor, input_layernorm_weight: Tensor, post_attention_layernorm_weight: Tensor, cos: List[Tensor], sin: List[Tensor], out_dtype: str = 'float16', group_size: int = 128, weight_bits: int = 4, hidden_size: int = 3584, rms_norm_eps: float = 1e-06, num_attention_heads: int = 28, num_key_value_heads: int = 4, mrope_section: List[int] = [16, 24, 24], quant_method: str = "gptq", out_name: str = None ): #pass
24.5.16.1.2. 功能描述
qwen2在prefill阶段的一个block layer。 该操作属于 全局操作 。
24.5.16.1.3. 参数说明
hidden_states: Tensor类型,表示激活值,形状为 (1, seq_length, hidden_size)。
position_ids: Tensor类型,表示位置索引,形状为 (3, 1, seq_length)。
attention_mask: Tensor类型,表示注意力掩码,形状为 (1, 1, seq_length, seq_length)。
q_proj_weights: Tensor类型,表示query量化后权重,以int32类型存储。
q_proj_scales: Tensor类型,表示query量化缩放因子,以float32类型存储。
q_proj_zps: Tensor类型,表示query量化零点,以int32类型存储。
q_proj_bias: Tensor类型,表示query偏置,以float32类型存储。
k_proj_weights: Tensor类型,表示key量化后权重,以int32类型存储。
k_proj_scales: Tensor类型,表示key量化缩放因子,以float32类型存储。
k_proj_zps: Tensor类型,表示key量化零点,以int32类型存储。
k_proj_bias: Tensor类型,表示key偏置,以float32类型存储。
v_proj_weights: Tensor类型,表示value量化后权重,以int32类型存储。
v_proj_scales: Tensor类型,表示value量化缩放因子,以float32类型存储。
v_proj_zps: Tensor类型,表示value量化零点,以int32类型存储。
v_proj_bias: Tensor类型,表示value偏置,以float32类型存储。
o_proj_weights: Tensor类型,表示输出投影层量化后权重,以int32类型存储。
o_proj_scales: Tensor类型,表示输出投影层量化缩放因子,以float32类型存储。
o_proj_zps: Tensor类型,表示输出投影层量化零点,以int32类型存储。
o_proj_bias: Tensor类型,表示输出投影层偏置,以float32类型存储。
down_proj_weights: Tensor类型,表示降维投影层量化后权重,以int32类型存储。
down_proj_scales: Tensor类型,表示降维投影层量化缩放因子,以float32类型存储。
down_proj_zps: Tensor类型,表示降维投影层量化零点,以int32类型存储。
gate_proj_weights: Tensor类型,表示门投影层量化后权重,以int32类型存储。
gate_proj_scales: Tensor类型,表示门投影层量化缩放因子,以float32类型存储。
gate_proj_zps: Tensor类型,表示门投影层量化零点,以int32类型存储。
up_proj_weights: Tensor类型,表示升维投影层量化后权重,以int32类型存储。
up_proj_scales: Tensor类型,表示升维投影层量化缩放因子,以float32类型存储。
up_proj_zps: Tensor类型,表示升维投影层量化零点,以int32类型存储。
input_layernorm_weight: Tensor类型,表示对input做layernorm的权重,以int32类型存储。
post_attention_layernorm_weight: Tensor类型,表示对attention层输出做layernorm的权重,以int32类型存储。
cos: List[Tensor]型类型,表示cos位置编码。
sin: List[Tensor]型类型,表示sin位置编码。
out_dtype: string类型,表示输出张量的数据类型。
group_size: int类型,表示量化的group大小。
weight_bits: int类型,表示量化位宽,仅支持4bits/8bits。
hidden_size: int类型,表示query/key/value的hidden_size。
rms_norm_eps: float类型,表示layernorm中的eps参数。
num_attention_heads: int类型,表示注意力头的个数。
num_key_value_heads: int类型,表示key/value头的个数。
mrope_section: List[int]类型,表示位置编码的三个维度大小。
quant_method: str类型,表示量化方式,目前仅支持GPTQ量化。
out_name: string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.16.1.4. 返回值
返回3个Tensor,分别为激活输出、key cache、value cache,数据类型为out_dtype。
24.5.16.1.5. 处理器支持
BM1684X: 输入数据类型可以是FLOAT32,FLOAT16类型。
BM1688: 输入数据类型可以是FLOAT32,FLOAT16类型。
24.5.17. Transform Operator
24.5.17.1. qwen2_block_cache
24.5.17.1.1. 接口定义
def qwen2_block_cache(hidden_states: Tensor, position_ids: Tensor, attention_mask: Tensor, k_cache: Tensor, v_cache: Tensor, q_proj_weights: Tensor, q_proj_scales: Tensor, q_proj_zps: Tensor, q_proj_bias: Tensor, k_proj_weights: Tensor, k_proj_scales: Tensor, k_proj_zps: Tensor, k_proj_bias: Tensor, v_proj_weights: Tensor, v_proj_scales: Tensor, v_proj_zps: Tensor, v_proj_bias: Tensor, o_proj_weights: Tensor, o_proj_scales: Tensor, o_proj_zps: Tensor, o_proj_bias: Tensor, down_proj_weights: Tensor, down_proj_scales: Tensor, down_proj_zps: Tensor, gate_proj_weights: Tensor, gate_proj_scales: Tensor, gate_proj_zps: Tensor, up_proj_weights: Tensor, up_proj_scales: Tensor, up_proj_zps: Tensor, input_layernorm_weight: Tensor, post_attention_layernorm_weight: Tensor, cos: List[Tensor], sin: List[Tensor], out_dtype: str = 'float16', group_size: int = 128, weight_bits: int = 4, hidden_size: int = 3584, rms_norm_eps: float = 1e-06, num_attention_heads: int = 28, num_key_value_heads: int = 4, mrope_section: List[int] = [16, 24, 24], quant_method: str = "gptq", out_name: str = None ): #pass
24.5.17.1.2. 功能描述
qwen2在decode阶段的一个block layer。 该操作属于 全局操作 。
24.5.17.1.3. 参数说明
hidden_states: Tensor类型,表示激活值,形状为 (1, 1, hidden_size)。
position_ids: Tensor类型,表示位置索引,形状为 (3, 1, 1)。
attention_mask: Tensor类型,表示注意力掩码,形状为 (1, 1, 1, seq_length + 1)。
k_cache: Tensor类型,表示key cache,形状为 (1, seq_length, num_key_value_heads, head_dim)。
v_cache: Tensor类型,表示value cache,形状为 (1, seq_length, num_key_value_heads, head_dim)。
q_proj_weights: Tensor类型,表示query量化后权重,以int32类型存储。
q_proj_scales: Tensor类型,表示query量化缩放因子,以float32类型存储。
q_proj_zps: Tensor类型,表示query量化零点,以int32类型存储。
q_proj_bias: Tensor类型,表示query偏置,以float32类型存储。
k_proj_weights: Tensor类型,表示key量化后权重,以int32类型存储。
k_proj_scales: Tensor类型,表示key量化缩放因子,以float32类型存储。
k_proj_zps: Tensor类型,表示key量化零点,以int32类型存储。
k_proj_bias: Tensor类型,表示key偏置,以float32类型存储。
v_proj_weights: Tensor类型,表示value量化后权重,以int32类型存储。
v_proj_scales: Tensor类型,表示value量化缩放因子,以float32类型存储。
v_proj_zps: Tensor类型,表示value量化零点,以int32类型存储。
v_proj_bias: Tensor类型,表示value偏置,以float32类型存储。
o_proj_weights: Tensor类型,表示输出投影层量化后权重,以int32类型存储。
o_proj_scales: Tensor类型,表示输出投影层量化缩放因子,以float32类型存储。
o_proj_zps: Tensor类型,表示输出投影层量化零点,以int32类型存储。
o_proj_bias: Tensor类型,表示输出投影层偏置,以float32类型存储。
down_proj_weights: Tensor类型,表示降维投影层量化后权重,以int32类型存储。
down_proj_scales: Tensor类型,表示降维投影层量化缩放因子,以float32类型存储。
down_proj_zps: Tensor类型,表示降维投影层量化零点,以int32类型存储。
gate_proj_weights: Tensor类型,表示门投影层量化后权重,以int32类型存储。
gate_proj_scales: Tensor类型,表示门投影层量化缩放因子,以float32类型存储。
gate_proj_zps: Tensor类型,表示门投影层量化零点,以int32类型存储。
up_proj_weights: Tensor类型,表示升维投影层量化后权重,以int32类型存储。
up_proj_scales: Tensor类型,表示升维投影层量化缩放因子,以float32类型存储。
up_proj_zps: Tensor类型,表示升维投影层量化零点,以int32类型存储。
input_layernorm_weight: Tensor类型,表示对input做layernorm的权重,以int32类型存储。
post_attention_layernorm_weight: Tensor类型,表示对attention层输出做layernorm的权重,以int32类型存储。
cos: List[Tensor]型类型,表示cos位置编码。
sin: List[Tensor]型类型,表示sin位置编码。
out_dtype: string类型,表示输出张量的数据类型。
group_size: int类型,表示量化的group大小。
weight_bits: int类型,表示量化位宽,仅支持4bits/8bits。
hidden_size: int类型,表示query/key/value的hidden_size。
rms_norm_eps: float类型,表示layernorm中的eps参数。
num_attention_heads: int类型,表示注意力头的个数。
num_key_value_heads: int类型,表示key/value头的个数。
mrope_section: List[int]类型,表示位置编码的三个维度大小。
quant_method: str类型,表示量化方式,目前仅支持GPTQ量化。
out_name: string类型或None,表示输出Tensor的名称,为None时内部会自动产生名称。
24.5.17.1.4. 返回值
返回3个Tensor,分别为激活输出、key cache、value cache,数据类型为out_dtype。
24.5.17.1.5. 处理器支持
BM1684X: 输入数据类型可以是FLOAT32,FLOAT16类型。
BM1688: 输入数据类型可以是FLOAT32,FLOAT16类型。