5. mcdnn_cnn_train
此实体包含在训练时需要用到的卷积神经网络相关的所有函数。mcdnn_cnn_train库依赖于mcdnn_ops_infer,mcdnn_ops_train和mcdnn_adv_infer。 有关后端数据和描述符类型,请参见mcdnn_backend。
5.1. 数据类型参考
5.1.1. 不透明结构类型的指针
5.1.1.1. mcdnnFusedOpsConstParamPack_t
mcdnnFusedOpsConstParamPack_t是指向不透明结构的指针,该结构包含mcdnnFusedOps常量参数描述。使用mcdnnCreateFusedOpsConstParamPack()函数创建一个此结构的实例,使用mcdnnDestroyFusedOpsConstParamPack()函数销毁已创建的描述符。
5.1.1.2. mcdnnFusedOpsPlan_t
mcdnnFusedOpsPlan_t是指向不透明结构的指针,该结构包含mcdnnFusedOpsPlan描述。此描述符包含计划信息,包括问题类型和大小,应运行哪些内核以及内部工作空间分区。使用mcdnnCreateFusedOptionsPlan()函数创建一个此结构的实例,使用mcdnnDestroyFusedOptionsPlan()函数销毁已创建的描述符。
5.1.1.3. mcdnnFusedOpsVariantParamPack_t
mcdnnFusedOpsVariantParamPack_t是指向不透明结构的指针,该结构包含mcdnnFusedOps变量参数描述。使用mcdnnCreateFusedOpsVariantParamPack()函数创建一个此结构的实例,使用函数mcdnnDestroyFusedOpsVariantParamPack()销毁已创建的描述符。
5.1.2. 结构类型
5.1.2.1. mcdnnConvolutionBwdFilterAlgoPerf_t
mcdnnConvolutionBwdFilterAlgoPerf_t是一个结构,包含由mcdnnFindConvolutionBackwardFilterAlgorithm()返回的执行结果或由mcdnnGetConvolutionBackwardFilterAlgorithm_v7()返回的启发式结果。
数据成员(Data Members)
mcdnnConvolutionBwdFilterAlgo_t algo
运行该算法以获取相关的性能指标。
mcdnnStatus_t status
如果在调用mcdnnConvolutionBackwardFilter()或工作空间分配期间发生任何错误,此状态将表示该错误。否则,此状态将是mcdnnConvolutionBackwardFilter()的返回状态。
MCDNN_STATUS_ALLOC_FAILED 如果工作空间分配期间发生任何错误或提供的工作空间不足。
MCDNN_STATUS_INTERNAL_ERROR 如果计算期间或工作空间释放期间出现任何错误。
否则,此状态将是mcdnnConvolutionBackwardFilter()的返回状态。
float time
mcdnnConvolutionBackwardFilter()的执行时间(以毫秒为单位)。
size_t memory
workspace大小(以字节为单位)。
mcdnnDeterminism_t determinism
算法的确定性。
mcdnnMathType_t mathType
提供给算法的数学类型。
int reserved[3]
为后续属性预留的空间。
5.1.3. 枚举类型
5.1.3.1. mcdnnFusedOps_t
mcdnnFusedOps_t是一种枚举类型,用于选择要在融合运算中执行的特定计算序列。
成员与描述
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS = 0
在per-channel基础上,它按以下顺序执行这些操作:缩放,添加bias,激活,卷积和生成batchnorm统计信息。
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD = 1
在per-channel基础上,它按以下顺序执行这些操作:缩放,添加bias,激活,卷积反向权重和生成batchnorm统计信息。
MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING = 2
从ySum,ySqSum和已学习的scale及bias计算等效scale和bias。 (可选)更新运行统计信息并生成已保存的统计信息。
MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE = 3
从已学习的运行统计信息、scale、bias计算等效scale和bias。
MCDNN_FUSED_CONV_SCALE_BIAS_ADD_ACTIVATION = 4
在per-channel基础上,它按以下顺序执行这些操作:卷积,缩放,添加bias,使用另一个张量进行元素级相加,激活。
MCDNN_FUSED_SCALE_BIAS_ADD_ACTIVATION_GEN_BITMASK = 5
在per-channel基础上,它按以下顺序执行这些操作:在一个张量上进行缩放和bias,在第二个张量上进行缩放和bias,对这两个张量进行元素级相加,在得到的张量上执行激活并生成激活位掩码。
MCDNN_FUSED_DACTIVATION_FORK_DBATCHNORM = 6
在per-channel基础上,它按以下顺序执行这些操作:反向激活,fork (即,写出残差分支的梯度),反向BN。
5.1.3.2. mcdnnFusedOpsConstParamLabel_t
mcdnnFusedOpsConstParamLabel_t是一种枚举类型,用于选择mcdnnFusedOps描述符的类型。更多信息,参见mcdnnSetFusedOpsConstParamPackAttribute()。
typedef enum {
MCDNN_PARAM_XDESC = 0,
MCDNN_PARAM_XDATA_PLACEHOLDER = 1,
MCDNN_PARAM_BN_MODE = 2,
MCDNN_PARAM_BN_EQSCALEBIAS_DESC = 3,
MCDNN_PARAM_BN_EQSCALE_PLACEHOLDER = 4,
MCDNN_PARAM_BN_EQBIAS_PLACEHOLDER = 5,
MCDNN_PARAM_ACTIVATION_DESC = 6,
MCDNN_PARAM_CONV_DESC = 7,
MCDNN_PARAM_WDESC = 8,
MCDNN_PARAM_WDATA_PLACEHOLDER = 9,
MCDNN_PARAM_DWDESC = 10,
MCDNN_PARAM_DWDATA_PLACEHOLDER = 11,
MCDNN_PARAM_YDESC = 12,
MCDNN_PARAM_YDATA_PLACEHOLDER = 13,
MCDNN_PARAM_DYDESC = 14,
MCDNN_PARAM_DYDATA_PLACEHOLDER = 15,
MCDNN_PARAM_YSTATS_DESC = 16,
MCDNN_PARAM_YSUM_PLACEHOLDER = 17,
MCDNN_PARAM_YSQSUM_PLACEHOLDER = 18,
MCDNN_PARAM_BN_SCALEBIAS_MEANVAR_DESC = 19,
MCDNN_PARAM_BN_SCALE_PLACEHOLDER = 20,
MCDNN_PARAM_BN_BIAS_PLACEHOLDER = 21,
MCDNN_PARAM_BN_SAVED_MEAN_PLACEHOLDER = 22,
MCDNN_PARAM_BN_SAVED_INVSTD_PLACEHOLDER = 23,
MCDNN_PARAM_BN_RUNNING_MEAN_PLACEHOLDER = 24,
MCDNN_PARAM_BN_RUNNING_VAR_PLACEHOLDER = 25,
MCDNN_PARAM_ZDESC = 26,
MCDNN_PARAM_ZDATA_PLACEHOLDER = 27,
MCDNN_PARAM_BN_Z_EQSCALEBIAS_DESC = 28,
MCDNN_PARAM_BN_Z_EQSCALE_PLACEHOLDER = 29,
MCDNN_PARAM_BN_Z_EQBIAS_PLACEHOLDER = 30,
MCDNN_PARAM_ACTIVATION_BITMASK_DESC = 31,
MCDNN_PARAM_ACTIVATION_BITMASK_PLACEHOLDER = 32,
MCDNN_PARAM_DXDESC = 33,
MCDNN_PARAM_DXDATA_PLACEHOLDER = 34,
MCDNN_PARAM_DZDESC = 35,
MCDNN_PARAM_DZDATA_PLACEHOLDER = 36,
MCDNN_PARAM_BN_DSCALE_PLACEHOLDER = 37,
MCDNN_PARAM_BN_DBIAS_PLACEHOLDER = 38,
} mcdnnFusedOpsConstParamLabel_t;
mcdnnFusedOpsConstParamLabel_t表格说明
使用的简称 |
含义 |
|---|---|
Setter |
|
Getter |
|
|
|
属性 列中的 |
枚举数名称中的 |
mcdnnFusedOpsConstParamLabel_t中的
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS
属性 |
Setter中期望传入 的描述符类型 |
说明 |
默认值 |
|---|---|---|---|
|
Setter中,
|
描述 x (输入) 张量大小,布局, 数据类型的张量 描述符 |
|
|
Setter中,
|
描述 VariantParamPack 中 xData 指针 是否为NULL,如果 不是,则为用户 允许的指针对齐 |
|
|
Setter中,
|
描述scale,bias ,统计数据的操作 模式 mcDNN 只支持
|
|
|
Setter中,
|
张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型 形状必须与
如果设置为 NULL,scale 和bias操作均会 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中 batchNorm 等效scale指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为
|
|
|
Setter中,
|
描述 VariantParam Pack中batchNorm 等效bias指针是否 为NULL 如果不是,则为用 户允许的指针对齐 如果设置为
|
|
|
Setter中,
|
描述激活操作 mcDNN
只支持
若设为 NULL
或激活模式设为
|
|
|
Setter中,
|
描述卷积操作 |
|
|
Setter中,
|
卷积核描述符, 描述 w (卷积核)张量 的大小,布局, 数据类型 |
|
|
Setter中,
|
描述 VariantParamPack 中 w (卷积核) 张量指针是否为 NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
张量描述符, 描述 y (输出) 张量大小,布局, 数据类型 |
|
|
Setter中,
|
描述 VariantParamPack 中 y (输出) 张量指针是否为 NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
张量描述符, 描述 y 的和与 y 平方和的张量 大小,布局, 数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定的 模式匹配 若设置为NULL, y 统计数据生成 操作会变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中 y 的和的指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN _PTR_NULL, y 统计数据生成 操作会变为NoP |
|
|
Setter中,
|
描述 VariantParam Pack 中 y 平方和 的指针是否为 NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN _PTR_NULL,y 统计数据生成 操作会变为NoP |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
mcdnnFusedOpsConstParamLabel_t完全融合快速路径(正向)的条件
参数 |
条件 |
|---|---|
|
张量为4维 数据类型为 布局为 对齐为 张量的 |
|
scale或bias操作不是NoP: 张量为4维,形状为1xCx1x1 数据类型为 布局为完全压缩格式 对齐为 |
|
卷积描述符的 卷积描述符的 卷积描述符的 卷积描述符的组计数需要为1 卷积描述符的 卷积核布局为 卷积核数据类型为 MCDNN_DATA_HALF 卷积核的 K 维为 32 的倍数 卷积核的 RxS 尺寸为 1x1 或 3x3 若卷积核的 RxS 尺寸为 1x1,卷积
描述符的 卷积核的对齐为
|
|
张量为4维 数据类型为 布局为 对齐为 |
|
统计数据生成操作不是NoP: 张量为4维,形状为1xKx1x1 数据类型为 布局为完全压缩 对齐为 |
mcdnnFusedOpsConstParamLabel_t中的
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD
属性 |
Setter中期望传入 的描述符类型 |
说明 |
默认值 |
|---|---|---|---|
|
Setter中,
|
张量描述符,描 述 x (输入) 张量大小,布局, 数据类型 |
|
|
Setter中,
|
描述
VariantParamPack
中 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述scale,bias ,统计数据的操作 模式 mcDNN 只支持 MCDNN_BATCHNORM _SPATIAL 和 MCDNN_BATCHNORM _SPATIAL _PERSISTENT, 即scale,bias, 统计数据均为 per-channel模式 |
|
|
Setter中,
|
张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 如果设置为 NULL,scale 和bias操作均会 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效scale指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则scale操作会 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效bias指针是否 为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则bias操作会 变为NoP |
|
|
Setter中,
|
描述激活操作 mcDNN 只支持 MCDNN_ACTIVATION _RELU 和 MCDNN_ACTIVATION _IDENTITY 激活模式 若设为 NULL 或激活模式设为 MCDNN_ACTIVATION _IDENTITY, 则op序列中的 激活操作会变为 NoP |
|
|
Setter中,
|
描述卷积操作 |
|
|
Setter中,
|
卷积核描述符, 描述 dw (卷积核 梯度输出) 张量的大小, 布局,数据类型 |
|
|
Setter中,
|
描述 VariantParamPack 中 dw (卷积核 梯度输出) 张量 指针是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
张量描述符, 描述 dy (梯度输入)张量 大小,布局, 数据类型 |
|
|
Setter中,
|
描述 VariantParamPack 中 dy (梯度输入)张量 指针是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
mcdnnFusedOpsConstParamLabel_t完全融合快速路径(反向)的条件
参数 |
条件 |
|---|---|
|
张量为4维 数据类型为 布局为 对齐为 张量的 |
|
scale或bias操作不是NoP: 张量为4维,形状为1xCx1x1 数据类型为 布局为完全压缩 对齐为 |
|
卷积描述符的 卷积描述符的 卷积描述符的 卷积描述符的组计数需要为1 卷积描述符的 mathType 需要设为 MCDNN_TENSOR_OP_MATH 或 MCDNN_TENSOR_OP_MATH_ALLOW _CONVERSION 卷积核布局为 卷积核数据类型为 MCDNN_DATA_HALF 卷积核的 K 维为 32 的倍数 卷积核的 RxS 尺寸为 1x1 或 3x3 若卷积核的 RxS 尺寸为 1x1,卷积
描述符的 卷积核的对齐为
|
|
张量为4维 数据类型为 布局为 对齐为 |
mcdnnFusedOpsConstParamLabel_t中的
MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING
适用于mcdnnFusedOp_t中MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING属性 |
|||
|---|---|---|---|
属性 |
Setter中期望传入 的描述符类型 |
说明 |
默认值 |
|
Setter中,
|
描述scale,bias ,统计数据的操作 模式 mcDNN
只支持 |
|
|
Setter中,
|
张量描述符, 描述 y 的和与 y 平方和的张量 大小,布局, 数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定的 模式匹配 |
|
|
Setter中,
|
描述 VariantParamPack 中 y 的和的指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述 VariantParamPack 中 y 的和的指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
通用张量描述符, 描述batchNorm 训练的scale, bias和统计数据 张量的大小, 布局,数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 (与 mcdnnBatchNormal ization* API中 的 bnScale BiasMeanVarDesc 字段类似) |
|
|
Setter中,
|
描述 VariantParamPack 中 batchNorm 训练的scale指针 是否为NULL 如果不是,则为用 户允许的指针对齐 若不需要
|
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 训练的bias指针 是否为NULL 如果不是,则为用 户允许的指针对齐 若不需要 BN_EQSCALE 和 BN_EQBIAS 的输出,则此属性 值可以为NULL |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 保存的均值指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 保存的逆标准差 指针是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 移动均值指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 移动方差指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则此输出计算 变为NoP |
|
|
Setter中,
|
张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型 形状必须与
若不需要 BN_EQSCALE 和 BN_EQBIAS 的 输出,则此参数 可以为NULL |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效scale指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则scale操作会 变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效bias指针是否 为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则bias操作会 变为NoP |
|
mcdnnFusedOpsConstParamLabel_t中的
MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE
适用于mcdnnFusedOp_t中MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE属性 |
|||
|---|---|---|---|
属性 |
Setter中期望传入 的描述符类型 |
说明 |
默认值 |
|
Setter中,
|
描述scale,bias ,统计数据的操作 模式 mcDNN 只支持 MCDNN_BATCHNORM _SPATIAL 和 MCDNN_BATCHNORM _SPATIAL _PERSISTENT, 即scale,bias, 统计数据均为 per-channel模式 |
|
|
Setter中,
|
通用张量描述符, 描述batchNorm 训练的scale, bias和统计数据 张量的大小, 布局,数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 (与 mcdnnBatch Normalization* API中的 bnScale BiasMeanVarDesc 字段类似) |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 训练的scale指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 训练的bias指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 移动均值指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 移动方差指针 是否为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
张量描述符, 描述batchNorm 等效scale和bias 张量的大小, 布局,数据类型 形状必须与 MCDNN_PARAM_BN _MODE 中指定 的模式匹配 |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效 scale指针是否 为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则此输出计算 会变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效bias指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则输出计算 会变为NoP |
|
mcdnnFusedOpsConstParamLabel_t中的
MCDNN_FUSED_CONVOLUTION_SCALE_BIAS_ADD_RELU
属性 |
Setter中期望传入 的描述符类型 |
说明 |
默认值 |
|---|---|---|---|
|
Setter中,
|
描述 x (输入) 张量大小,布局, 数据类型的张量 描述符 |
|
|
Setter中,
|
描述 VariantParamPack 中 xData 指针 是否为NULL, 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
描述卷积操作 |
|
|
Setter中,
|
卷积核描述符,
描述 |
|
|
Setter中,
|
描述 VariantParamPack 中 w (卷积核) 张量指针是否 为NULL 如果不是,则为用 户允许的指针对齐 |
|
|
Setter中,
|
张量描述符,描述 alpha1 scale和bias张量 的大小,布局, 数据类型 张量形状为 (1,K,1,1),其中 K是输出特征图的 数量 |
|
|
Setter中,
|
描述 VariantParamPack 中batchNorm 等效scale或 alpha1 张量指针是否 为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则 alpha1 缩放 操作变为NoP |
|
|
Setter中,
|
张量描述符, 描述 z 张量的 大小,布局, 数据类型的张量 描述符 如果不设置,则 z 缩放加法( scale-add) 运算 会变为NoP |
|
|
Setter中,
|
描述 VariantParamPack 中 z 张量指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则 z 缩放加法 运算会变为NoP |
|
|
Setter中,
|
张量描述符,描述 alpha2 张量的大小, 布局,数据类型 如果设置为
|
|
|
Setter中,
|
描述 VariantParamPack 中 batchNorm z等效缩放指针 是否为NULL 如果不是,则为用 户允许的指针对齐 如果设置为 MCDNN_PTR_NULL, 则输入 z 缩放 会变为NoP |
|
|
Setter中,
|
描述激活操作 mcDNN 只支持 MCDNN_ACTIVATION _RELU 和 MCDNN_ACTIVATION _IDENTITY 激活模式 若设为 |
|
|
Setter中,
|
张量描述符, 描述 y (输出) 张量大小,布局, 数据类型 |
|
|
Setter中,
|
描述 VariantParamPack 中 y (输出) 张量指针是否为 NULL 如果不是,则为用 户允许的指针对齐 |
|
5.1.3.3. mcdnnFusedOpsPointerPlaceHolder_t
mcdnnFusedOpsPointerPlaceHolder_t是一种枚举类型,用于选择mcdnnFusedOps描述符指针的对齐类型。
项 |
说明 |
|---|---|
|
表示指向 variantPack 中张量的指针 为 NULL |
|
表示指向 variantPack 中张量的指针 不为 NULL,且会元素对齐 |
|
表示指向 variantPack 中张量的指针 不为 NULL,且会16字节对齐 |
5.1.3.4. mcdnnFusedOpsVariantParamLabel_t
mcdnnFusedOpsVariantParamLabel_t是一种枚举类型,用于设置缓冲区指针。这些缓冲区指针可以在每次迭代中更改。
typedef enum {
MCDNN_PTR_XDATA = 0,
MCDNN_PTR_BN_EQSCALE = 1,
MCDNN_PTR_BN_EQBIAS = 2,
MCDNN_PTR_WDATA = 3,
MCDNN_PTR_DWDATA = 4,
MCDNN_PTR_YDATA = 5,
MCDNN_PTR_DYDATA = 6,
MCDNN_PTR_YSUM = 7,
MCDNN_PTR_YSQSUM = 8,
MCDNN_PTR_WORKSPACE = 9,
MCDNN_PTR_BN_SCALE = 10,
MCDNN_PTR_BN_BIAS = 11,
MCDNN_PTR_BN_SAVED_MEAN = 12,
MCDNN_PTR_BN_SAVED_INVSTD = 13,
MCDNN_PTR_BN_RUNNING_MEAN = 14,
MCDNN_PTR_BN_RUNNING_VAR = 15,
MCDNN_PTR_ZDATA = 16,
MCDNN_PTR_BN_Z_EQSCALE = 17,
MCDNN_PTR_BN_Z_EQBIAS = 18,
MCDNN_PTR_ACTIVATION_BITMASK = 19,
MCDNN_PTR_DXDATA = 20,
MCDNN_PTR_DZDATA = 21,
MCDNN_PTR_BN_DSCALE = 22,
MCDNN_PTR_BN_DBIAS = 23,
MCDNN_SCALAR_SIZE_T_WORKSPACE_SIZE_IN_BYTES = 100,
MCDNN_SCALAR_INT64_T_BN_ACCUMULATION_COUNT = 101,
MCDNN_SCALAR_DOUBLE_BN_EXP_AVG_FACTOR = 102,
MCDNN_SCALAR_DOUBLE_BN_EPSILON = 103,
} mcdnnFusedOpsVariantParamLabel_t;
mcdnnFusedOpsVariantParamLabel_t表格说明
使用的简称 |
含义 |
|---|---|
Setter |
mcdnnSetFusedOpsVariantParamPack Attribute() |
Getter |
mcdnnGetFusedOpsVariantParamPack Attribute() |
属性键 列中的 |
枚举数名称中的 |
mcdnnFusedOpsVariantParamLabel_t中的
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_CONV_BNSTATS
属性键 |
Setter中 期望传入的 描述符类型 |
I/O 类型 |
说明 |
默认值 |
|---|---|---|---|---|
|
|
input |
设备上指向 x (输入) 张量的指针 需与已设置的 MCDNN_PARAM _XDATA_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 batchNorm 等效scale 张量的指针 需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 batchNorm 等效bias张量 的指针 需要与已设置
的 |
|
|
|
input |
设备上指向 w (卷积核) 张量的指针 需要与已设置
的 |
|
|
|
output |
设备上指向 y (输出) 张量的指针 需要与已设置
的 |
|
|
|
output |
设备上指向 y 的和张量 的指针 需要与已设置
的 |
|
|
|
output |
设备上指向 y 的平方和 张量的指针 需要与已设置
的 |
|
|
|
input |
设备上指向 用户已分配的 工作空间的指 针 若需求的工作 空间大小为 0,可以为 NULL |
|
|
|
input |
主机内存中 指向一个 size_t 值 的指针 描述用户已分 配的工作空间 大小(以字节 为单位) 需要大于或
等于 |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
mcdnnFusedOpsVariantParamLabel_t中的
MCDNN_FUSED_SCALE_BIAS_ACTIVATION_WGRAD
属性键 |
Setter中 期望传入的 描述符类型 |
I/O 类型 |
说明 |
默认值 |
|---|---|---|---|---|
|
|
input |
设备上指向 x (输入) 张量的指针 需要与已设置
的 |
|
|
|
input |
设备上指向 batchNorm 等效scale 张量的指针 需要与已设置
的 |
|
|
|
input |
设备上指向 batchNorm 等效bias张量 的指针 需要与已设置 的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 dw (卷积核 梯度输出) 张量的指针 需要与已设置 的 MCDNN_PARAM _WDATA_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 dy (梯度输 入)张量的 指针 需要与已设置 的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 用户已分配的 工作空间的指 针 若需求的工作 空间大小为 0,可以为 NULL |
|
|
|
input |
主机内存中 指向一个 size_t 值 的指针 描述用户已分 配的工作空间 大小(以字节 为单位) 需要大于或 等于 mcdnn MakeFusedOps Plan 的值 |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
mcdnnFusedOpsVariantParamLabel_t中的
MCDNN_FUSED_BN_FINALIZE_STATISTICS_TRAINING
属性键 |
Setter中 期望传入的 描述符类型 |
I/O 类型 |
说明 |
默认值 |
|---|---|---|---|---|
|
|
input |
设备上指向 y 的和张量 的指针 需与已设置的 MCDNN_PARAM _YSUM_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 y 的平方和 张量的指针 需与已设置的 MCDNN_PARAM _YSQSUM_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 batchNorm scale张量的 指针 需与已设置的 MCDNN_PARAM _BN_SCALE_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 batchNorm bias张量的指 针 需与已设置的 MCDNN_PARAM _BN_BIAS_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 保存的均值 张量的指针 需与已设置的 MCDNN_PARAM _BN_SAVED _MEAN_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 保存的逆标 准差张量的指 针 需与已设置的 MCDNN_PARAM _BN_SAVED _INVSTD_ PLACEHOLDER 属性一致 |
|
|
|
input/ output |
设备上指向 batchNorm 移动均值张量 的指针 需与已设置的 MCDNN_PARAM _BN_RUNNING _MEAN_ PLACEHOLDER 属性一致 |
|
|
|
input/ output |
设备上指向 batchNorm 移动方差张量 的指针 需与已设置的 MCDNN_PARAM _BN_RUNNING _VAR_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 等效scale 张量的指针 需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 等效bias张量 的指针 需与已设置的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致 |
|
|
|
input |
主机内存中 指向 int64_t 中一个标量值 的指针 该标量值描述 y 的和与 平方和张量 累加的张量 元素数 例如,在单个 GPU用例中, 若mode为 MCDNN _BATCHNORM_ SPATIAL 或 MCDNN _BATCHNORM _SPATIAL_ PERSISTENT, 该值应等于张 量的 N*H*W, 该张量为从中 计算统计数据 的张量 在多GPU用例 中,若已在 y 的和与平方和 张量上执行 all-reduce, 该值应为每个 GPU上单GPU累 积计数的总和 |
|
|
|
input |
主机内存中 指向一个双 精度标量值的 指针 在移动平均 计算中使用的 系数 参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor |
|
|
|
input |
主机内存中 指向一个双 精度标量值的 指针 批量归一化 公式中使用的 条件常量 其值应大于或 等于 mcdnn.h 中定义的 MCDNN_BN_MIN _EPSILON 的值 参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor |
|
|
|
input |
设备上指向 用户已分配的 工作空间的指 针 若需求的工作 空间大小为 0,可以为 NULL |
|
|
|
input |
主机内存中 指向一个 size_t 值 的指针 描述用户已分 配的工作空间 大小(以字节 为单位) 需要大于或 等于 mcdnn MakeFusedOps Plan 的值 |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
mcdnnFusedOpsVariantParamLabel_t中的
MCDNN_FUSED_BN_FINALIZE_STATISTICS_INFERENCE
属性键 |
Setter中 期望传入的 描述符类型 |
I/O 类型 |
说明 |
默认值 |
|---|---|---|---|---|
|
|
input |
设备上指向 batchNorm scale张量的 指针 需与已设置的 MCDNN_PARAM _BN_SCALE_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 batchNorm bias张量的指 针 需与已设置的 MCDNN_PARAM _BN_BIAS_ PLACEHOLDER 属性一致 |
|
|
|
input/ output |
设备上指向 batchNorm 移动均值张量 的指针 需与已设置的 MCDNN_PARAM _BN_RUNNING _MEAN_ PLACEHOLDER 属性一致 |
|
|
|
input/ output |
设备上指向 batchNorm 移动方差张量 的指针 需与已设置的 MCDNN_PARAM _BN_RUNNING _VAR_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 等效scale 张量的指针 需与已设置的 MCDNN_PARAM _BN_EQSCALE_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 batchNorm 等效bias张量 的指针 需与已设置的 MCDNN_PARAM _BN_EQBIAS_ PLACEHOLDER 属性一致 |
|
|
|
input |
主机内存中 指向一个双 精度标量值的 指针 批量归一化 公式中使用的 条件常量 其值应大于或 等于 mcdnn.h 中定义的 MCDNN_BN _MIN_ EPSILON 的值 参见 mcdnnBatch Normaliza tion* API中 的 exponen tialAverage Factor |
|
|
|
input |
设备上指向 用户已分配的 工作空间的指 针 若需求的工作 空间大小为 0,可以为 NULL |
|
|
|
inpu |
主机内存中 指向一个 size_t 值 的指针 描述用户已分 配的工作空间 大小(以字节 为单位) 需要大于或 等于 mcdnn MakeFusedOps Plan 的值 |
|
|
|
input |
设备上指向 x (图像) 张量的指针 需与已设置的 MCDNN_PARAM _XDATA PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 w (卷积核) 张量的指针 需与已设置的 MCDNN_PARAM _WDATA_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 alpha1 或 batchNorm 等效scale 张量的指针 需与已设置的 MCDNN_PARAM _BN _EQSCALE_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 z 张量的 指针 需已设置的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 z 的 alpha2 或等效scale 张量的指针 需与已设置的 MCDNN_PARAM _BN_Z _EQSCALE_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 z 的 batchNorm 等效bias张量 的指针 需与已设置的 MCDNN_PARAM _BN_Z _EQBIAS_ PLACEHOLDER 属性一致 |
|
|
|
output |
设备上指向 y (输出) 张量的指针 需与已设置的 MCDNN_PARAM _YDATA_ PLACEHOLDER 属性一致 |
|
|
|
input |
设备上指向 用户已分配的 工作空间的指 针 若需求的工作 空间大小为 0,可以为 NULL |
|
|
|
input |
主机内存中 指向一个 size_t 值 的指针 描述用户已分 配的工作空间 大小(以字节 为单位) 需要大于或 等于 mcdnn MakeFusedOps Plan 的值 |
|
备注
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_NULL,则VariantParamPack中的设备指针也需要为NULL。
如果ConstParamPack中对应的指针占位符设置为MCDNN_PTR_ELEM_ALIGNED或MCDNN_PTR_16B_ALIGNED,则VariantParamPack中的设备指针可能不是NULL,分别至少需要元素对齐或16字节对齐。
5.2. API参考
5.2.1. API函数
5.2.1.1. mcdnnCnnTrainVersionCheck()
此函数检查库的CnnTrain子集的版本是否与其他子库一致。
mcdnnStatus_t mcdnnCnnTrainVersionCheck(void)
返回值
MCDNN_STATUS_SUCCESS
版本与其他子库一致。
MCDNN_STATUS_VERSION_MISMATCH
CnnTrain的版本与其他子库不一致。用户应检查并确保所有子组件安装版本一致。
5.2.1.2. mcdnnConvolutionBackwardBias()
该函数计算与bias相关的卷积函数梯度,其是输入张量所有图像上属于同一特征图的元素的总和。因此,得到的元素数等于输入张量的特征图数。
mcdnnStatus_t mcdnnConvolutionBackwardBias(
mcdnnHandle_t handle,
const void *alpha,
const mcdnnTensorDescriptor_t dyDesc,
const void *dy,
const void *beta,
const mcdnnTensorDescriptor_t dbDesc,
void *db)
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示: dstValue = alpha[0]*resultValue + beta[0]*priorDstValue。
dyDesc
输入。已初始化的输入张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
dy
输入。数据指针,指向与张量描述符dyDesc关联的GPU内存。
dbDesc
输入。已初始化的输出张量描述符的句柄。
db
输出。数据指针,指向与输出张量描述符dbDesc关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
操作成功启动。
MCDNN_STATUS_NOT_SUPPORTED
此函数不支持已提供的配置。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
One of the parameters n, height, or width of the output tensor is not 1.
输入张量和输出张量的特征图数量不同。
两个张量描述符的dataType不同。
5.2.1.3. mcdnnConvolutionBackwardFilter()
mcdnnStatus_t mcdnnConvolutionBackwardFilter(
mcdnnHandle_t handle,
const void *alpha,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const mcdnnTensorDescriptor_t dyDesc,
const void *dy,
const mcdnnConvolutionDescriptor_t convDesc,
mcdnnConvolutionBwdFilterAlgo_t algo,
void *workSpace,
size_t workSpaceSizeInBytes,
const void *beta,
const mcdnnFilterDescriptor_t dwDesc,
void *dw)
该函数计算张量dy的卷积权重梯度,其中y是mcdnnConvolutionForward()中正向卷积的输出。它使用指定的算法,并在输出张量dw中返回结果。缩放系数alpha和beta可用于缩放计算结果或与当前dw累加。
参数
handle
输入。已创建的mcDNN上下文的句柄。更多信息,参见mcdnnHandle_t。
alpha, beta
输入。指向缩放系数(主机内存中)的指针,用于将计算结果与输出层中的先验值混合,如下所示:
dstValue = alpha[0] * result + beta[0] * priorDstValue
xDesc
输入。已初始化的张量描述符的句柄。更多信息,参见mcdnnTensorDescriptor_t。
x
输入。数据指针,指向与张量描述符xDesc关联的GPU内存。
dyDesc
输入。已初始化的输入差分张量描述符的句柄。
dy
输入。数据指针,指向与反向传播梯度张量描述符dyDesc关联的GPU内存。
convDesc
输入。已初始化的卷积描述符。更多信息,参见mcdnnConvolutionDescriptor_t。
algo
输入。指定应使用哪个卷积算法来计算结果的枚举。更多信息,参见mcdnnConvolutionBwdFilterAlgo_t。
workSpace
输入。数据指针,指向执行指定算法所需的工作空间GPU内存。如果特定算法不需要工作空间,则该指针可以为nil。
workSpaceSizeInBytes
输入。指定已提供的workSpace大小(以字节为单位)。
dwDesc
输入。已初始化的卷积核梯度描述符的句柄。更多信息,参见mcdnnFilterDescriptor_t。
dw
输入/输出。数据指针,指向与卷积核梯度描述符dwDesc(携带结果)关联的GPU内存。
返回值
MCDNN_STATUS_SUCCESS
操作成功启动。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
以下至少有一个为NULL:handle、xDesc、dyDesc、convDesc、dwDesc、xData、dyData、dwData、alpha、beta
xDesc和dyDesc的维数不匹配
xDesc和dwDesc的维数不匹配
xDesc的维数小于3
xDesc、dyDesc和dwDesc的数据类型不匹配。
xDesc和dwDesc每个图像(或分组卷积情况下的组)的输入特征图数不匹配。
yDesc或dwDesc表示输出通道计数,其不是组计数的倍数(如果在convDesc中设置了组计数)。
MCDNN_STATUS_NOT_SUPPORTED
需至少满足以下任一条件:
xDesc或dyDesc具有负张量步幅
xDesc,dwDesc或dyDesc的维数不是4或5
所选algo不支持提供的参数;有关每个algo支持的参数,参见以下详尽列表
MCDNN_STATUS_MAPPING_ERROR
创建与卷积核数据关联的纹理对象时发生错误。
MCDNN_STATUS_EXECUTION_FAILED
此函数在GPU上启用失败。
支持的mcdnnConvolutionBackwardFilter()配置
数据类型配置 |
xDesc,dyDesc, dwDesc 数据类型 |
|
|---|---|---|
|
|
|
|
|
|
|
MCDNN_DATA_BFLOAT16 |
|
|
|
|
|
|
|
备注
指定单独的算法会导致性能、支持和计算决定因素发生变化。有关算法选项及其各自支持的参数和确定性的详尽列表,请参见下表。
支持的算法
MCDNN_CONVOLUTION_BWD_FILTER_ALGO_1 (_ALGO_1)
MCDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT_TILING (_FFT_TILING)
MCDNN_TENSOR_NCHW (_NCHW)
MCDNN_TENSOR_NHWC (_NHWC)
MCDNN_TENSOR_NCHW_VECT_C (_NCHW_VECT_C)
mcdnnConvolutionBackwardFilter() 2D卷积支持的算法:dwDesc: _NHWC
算法名称 |
确定性 (Yes or No) |
dyDesc 支持的 张量格式 |
dxDesc 支持的 张量格式 |
支持的 数据类型 配置 |
重要 |
|---|---|---|---|---|---|
|
NHWC HWC- packed |
NHWC HWC- packed |
PSEUDO _HALF_ CONFIG PSEUDO _BFLOAT16 _CONFIG FLOAT _CONFIG |
mcdnnConvolutionBackwardFilter() 2D卷积支持的算法:dwDesc: _NCHW
算法名称 |
确定性 (Yes or No) |
dyDesc 支持的 张量格式 |
dxDesc 支持的 张量格式 |
支持的 数据类型 配置 |
重要 |
|---|---|---|---|---|---|
|
Yes |
除 _NCHW_ VECT_C 之外的所有 其他格式 |
NCHW CHW- packed |
PSEUDO _HALF _CONFIG TRUE_HALF _CONFIG PSEUDO _BFLOAT16 _CONFIG FLOAT _CONFIG DOUBLE _CONFIG |
所有维度 大于0 convDesc 组计数支 持:大于0 |
|
Yes |
NCHW CHW- packed |
NCHW CHW- packed |
PSEUDO _HALF _CONFIG FLOAT _CONFIG DOUBLE _CONFIG |
1适用于 所有维度 convDesc 组计数支 持:大于0 dyDesc 宽度或高度 必须等于1 (与 xDesc 相同的维 度) 其他维度必 须小于或等 于256,即 目前支持的 最大1D分块 尺寸 convDesc 垂直和水平 卷积核步幅 必须等于1 dwDesc 卷积核高度 必须大于 convDesc 零填充高度 dwDesc 卷积核宽度 必须大于 convDesc 零填充宽度 |
mcdnnConvolutionBackwardFilter() 3D卷积支持的算法:dwDesc: _NCHW
算法名称 |
确定性 (Yes or No) |
dyDesc 支持的 张量格式 |
dxDesc 支持的 张量格式 |
支持的 数据类型 配置 |
重要 |
|---|---|---|---|---|---|
|
No |
除 _NCDHW _VECT_C 之外的所有 其他格式 |
NCDHW CDHW -packed NCDHW W-packed NDHWC |
PSEUDO _HALF _CONFIG PSEUDO _BFLOAT16 _CONFIG FLOAT _CONFIG DOUBLE _CONFIG |
所有维度 大于0 convDesc 组计数支 持:大于0 |
mcdnnConvolutionBackwardFilter() 3D卷积支持的算法:dwDesc: _NHWC
算法名称 |
确定性 (Yes or No) |
dyDesc 支持的 张量格式 |
dxDesc 支持的 张量格式 |
支持的 数据类型 配置 |
重要 |
|---|---|---|---|---|---|
|
Yes |
NDHWC HWC-packed |
NDHWC HWC-packed |
PSEUDO _HALF _CONFIG PSEUDO _BFLOT16 _CONFIG FLOAT _CONFIG TRUE_HALF _CONFIG |
所有维度 大于0 convDesc 组计数支 持:大于0 |
5.2.1.4. mcdnnCreateFusedOpsConstParamPack()
此函数创建一个不透明结构来存储所选mcdnnFusedOps计算序列的各种problem size信息,例如形状,布局和张量类型,以及卷积和激活描述符。
mcdnnStatus_t mcdnnCreateFusedOpsConstParamPack(
mcdnnFusedOpsConstParamPack_t *constPack,
mcdnnFusedOps_t ops);
参数
constPack
输入。由该函数创建的不透明结构。更多信息,参见mcdnnFusedOpsConstParamPack_t。
ops
输入。要在mcdnnFusedOps计算中执行的特定计算序列,定义在枚举类型mcdnnFusedOps_t中。
返回值
MCDNN_STATUS_BAD_PARAM
constPack或ops为NULL。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
MCDNN_STATUS_SUCCESS
描述符创建成功。
5.2.1.5. mcdnnCreateFusedOpsPlan()
此函数创建mcdnnFusedOps计算的plan描述符。此描述符包含计划信息,包括问题类型和大小,应运行哪些内核以及内部工作空间分区。
mcdnnStatus_t mcdnnCreateFusedOpsPlan(
mcdnnFusedOpsPlan_t *plan,
mcdnnFusedOps_t ops);
参数
plan
输入。指针,指向此函数创建的描述符实例。
ops
输入。此plan描述符对应的融合操作计算的特定序列。更多信息,参见mcdnnFusedOps_t。
返回值
MCDNN_STATUS_BAD_PARAM
输入plan为NULL或ops输入不是有效的mcdnnFusedOp枚举。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
MCDNN_STATUS_SUCCESS
plan描述符创建成功。
5.2.1.6. mcdnnCreateFusedOpsVariantParamPack()
此函数创建mcdnnFusedOps计算的variant pack描述符。
mcdnnStatus_t mcdnnCreateFusedOpsVariantParamPack(
mcdnnFusedOpsVariantParamPack_t *varPack,
mcdnnFusedOps_t ops);
参数
varPack
输入。指针,指向此函数创建的描述符。更多信息,参见mcdnnFusedOpsVariantParamPack_t。
ops
输入。此描述符对应的融合操作计算的特定序列。
返回值
MCDNN_STATUS_SUCCESS
描述符创建成功。
MCDNN_STATUS_ALLOC_FAILED
资源无法分配。
MCDNN_STATUS_BAD_PARAM
任何输入都无效。
5.2.1.7. mcdnnDestroyFusedOpsConstParamPack()
此函数用于销毁已创建的mcdnnFusedOpsConstParamPack_t结构。
mcdnnStatus_t mcdnnDestroyFusedOpsConstParamPack(
mcdnnFusedOpsConstParamPack_t constPack);
参数
constPack
输入。要销毁的mcdnnFusedOpsConstParamPack_t结构。
返回值
MCDNN_STATUS_SUCCESS
描述符已销毁成功。
MCDNN_STATUS_INTERNAL_ERROR
ops枚举值不受支持或无效。
5.2.1.8. mcdnnDestroyFusedOpsPlan()
此函数用于销毁已提供的plan描述符。
mcdnnStatus_t mcdnnDestroyFusedOpsPlan(
mcdnnFusedOpsPlan_t plan);
参数
plan
输入。需要通过此函数销毁的描述符。
返回值
MCDNN_STATUS_SUCCESS
plan描述符为NULL或描述符已成功销毁。
5.2.1.9. mcdnnDestroyFusedOpsVariantParamPack()
此函数用于销毁已为mcdnnFusedOps常量参数创建的描述符。
mcdnnStatus_t mcdnnDestroyFusedOpsVariantParamPack(
mcdnnFusedOpsVariantParamPack_t varPack);
参数
varPack
输入。要销毁的描述符。
返回值
MCDNN_STATUS_SUCCESS
描述符销毁成功。
5.2.1.10. mcdnnFindConvolutionBackwardFilterAlgorithm()
mcdnnStatus_t mcdnnFindConvolutionBackwardFilterAlgorithm(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t xDesc,
const mcdnnTensorDescriptor_t dyDesc,
const mcdnnConvolutionDescriptor_t convDesc,
const mcdnnFilterDescriptor_t dwDesc,
int requestedAlgoCount,
int *returnedAlgoCount,
mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults)
此函数尝试所有可用于mcdnnConvolutionBackwardFilter()的算法。它将尝试提供的convDesc MathType和MCDNN_TENSOR_OP_MATH(假设两者不同)。
备注
只能使用MCDNN_FMA_MATH 尝试没有 MCDNN_TENSOR_OP_MATH可用性的算法,并以同样方式返回。 对于MCDNN_DATA_FLOAT,MCDNN_FMA_MATH将使用float类型计算,其它MATH_TYPE将使用tf32类型计算。
通过mcMalloc()分配内存。在用户分配的mcdnnConvolutionBwdFilterAlgoPerf_t数组中返回性能指标。这些指标以一种有序的方式写入,其中第一个元素的计算时间最短。可用算法的总数可以通过mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount() API查询。
备注
此函数是主机阻塞。
建议在分配层数据之前运行此函数;否则可能会由于资源使用问题而不必要地禁止某些算法选项。
参数
handle
输入。已创建的mcDNN上下文的句柄。
xDesc
输入。已初始化的输入张量描述符的句柄。
dyDesc
输入。已初始化的输入差分张量描述符的句柄。
convDesc
输入。已初始化的卷积描述符。
dwDesc
输入。已初始化的卷积核描述符的句柄。
requestedAlgoCount
输入。要存储在perfResults中的最大元素数。
returnedAlgoCount
输出。存储在perfResults中的输出元素数。
perfResults
输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
未正确分配handle。
未正确分配xDes、dyDesc或dwDesc。
xDesc,dyDesc或dwDesc的维度小于1。
returnedCount或perfResults为nil。
requestedCount小于1。
MCDNN_STATUS_ALLOC_FAILED
此函数无法分配内存来存储样本输入,卷积核和输出。
MCDNN_STATUS_INTERNAL_ERROR
需至少满足以下任一条件:
此函数不能用来分配必要的计时对象。
此函数不能用来释放必要的计时对象。
此函数不能用来释放样本输入,卷积核和输出。
5.2.1.11. mcdnnFindConvolutionBackwardFilterAlgorithmEx()
mcdnnStatus_t mcdnnFindConvolutionBackwardFilterAlgorithmEx(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t xDesc,
const void *x,
const mcdnnTensorDescriptor_t dyDesc,
const void *dy,
const mcdnnConvolutionDescriptor_t convDesc,
const mcdnnFilterDescriptor_t dwDesc,
void *dw,
int requestedAlgoCount,
int *returnedAlgoCount,
mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults,
void *workSpace,
size_t workSpaceSizeInBytes)
此函数尝试所有可用于mcdnnConvolutionBackwardFilter()的算法。它将尝试提供的convDesc MathType和MCDNN_TENSOR_OP_MATH(假设两者不同)。
备注
只能使用MCDNN_TENSOR_OP_MATH尝试没有MCDNN_FMA_MATH可用性的算法,并以同样方式返回。 对于MCDNN_DATA_FLOAT,MCDNN_FMA_MATH将使用float类型计算,其它MATH_TYPE将使用tf32类型计算。
通过mcMalloc()分配内存。在用户分配的mcdnnConvolutionBwdFilterAlgoPerf_t数组中返回性能指标。这些指标以一种有序的方式写入,其中第一个元素的计算时间最短。可用算法的总数可以通过mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount() API查询。
备注
此函数是主机阻塞。
参数
handle
输入。已创建的mcDNN上下文的句柄。
xDesc
输入。已初始化的输入张量描述符的句柄。
x
输入。数据指针,指向与卷积核描述符xDesc关联的GPU内存。
dyDesc
输入。已初始化的输入差分张量描述符的句柄。
dy
输入。数据指针,指向与张量描述符dyDesc关联的GPU内存。
convDesc
输入。已初始化的卷积描述符。
dwDesc
输入。已初始化的卷积核描述符的句柄。
dw
输入/输出。数据指针,指向与卷积核描述符dwDesc关联的GPU内存。此张量的内容会被任意值覆盖。
requestedAlgoCount
输入。要存储在perfResults中的最大元素数。
returnedAlgoCount
输出。存储在perfResults中的输出元素数。
perfResults
输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。
workSpace
输入。指向GPU内存的数据指针,此内存是某些算法所必需的工作空间。此工作空间的大小将决定算法的可用性。nil指针被视为0字节的workSpace。
workSpaceSizeInBytes
输入。指定已提供的workSpace大小(以字节为单位)。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
未正确分配handle。
未正确分配xDes、dyDesc或dwDesc。
xDesc,dyDesc或dwDesc的维度小于1。
x,dy或dw为nil。
returnedCount或perfResults为nil。
requestedCount小于1。
MCDNN_STATUS_INTERNAL_ERROR
需至少满足以下任一条件:
此函数不能用来分配必要的计时对象。
此函数不能用来释放必要的计时对象。
此函数不能用来释放样本输入,卷积核和输出。
5.2.1.12. mcdnnFusedOpsExecute()
此函数执行mcdnnFusedOps操作的序列。
mcdnnStatus_t mcdnnFusedOpsExecute(
mcdnnHandle_t handle,
const mcdnnFusedOpsPlan_t plan,
mcdnnFusedOpsVariantParamPack_t varPack);
参数
handle
输入。指向mcDNN库上下文的指针。
plan
输入。指向已创建和初始化的plan描述符的指针。
varPack
输入。指向变量参数包描述符的指针。
返回值
MCDNN_STATUS_BAD_PARAM
plan描述符中的mcdnnFusedOps_t类型不受支持。
5.2.1.13. mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount()
mcdnnStatus_t mcdnnGetConvolutionBackwardFilterAlgorithmMaxCount(
mcdnnHandle_t handle,
int *count)
该函数返回可从mcdnnFindConvolutionBackwardFilterAlgorithm()和mcdnnGetConvolutionForwardAlgorithmer_v7()返回的算法的最大数量。这是所有算法总和加上当前设备支持的具有Tensor Core操作的算法总和。
参数
handle
输入。已创建的mcDNN上下文的句柄。
count
输出。得到的算法最大计数。
返回值
MCDNN_STATUS_SUCCESS
此函数执行成功。
MCDNN_STATUS_BAD_PARAM
未正确分配提供的handle。
5.2.1.14. mcdnnGetConvolutionBackwardFilterAlgorithm_v7()
该函数用作启发式函数,用于为给定卷积参数获取mcdnnConvolutionBackwardFilter()的最适合算法。此函数将返回按期望的(基于内部启发式)相对性能排序的所有算法(包括MCDNN_TENSOR_OP_MATH和MCDNN_DEFAULT_MATH版本的算法,其中MCDNN_TENSOR_OP_MATH可能可用),最快的是perfResults的索引0。要全面搜索最快的算法,请使用mcdnnFindConvolutionBackwardFilterAlgorithm()。可用算法的总数可以通过returnedAlgoCount变量查询。
mcdnnStatus_t mcdnnGetConvolutionBackwardFilterAlgorithm_v7(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t xDesc,
const mcdnnTensorDescriptor_t dyDesc,
const mcdnnConvolutionDescriptor_t convDesc,
const mcdnnFilterDescriptor_t dwDesc,
const int requestedAlgoCount,
int *returnedAlgoCount,
mcdnnConvolutionBwdFilterAlgoPerf_t *perfResults)
参数
handle
输入。已创建的mcDNN上下文的句柄。
xDesc
输入。已初始化的输入张量描述符的句柄。
dyDesc
输入。已初始化的输入差分张量描述符的句柄。
convDesc
输入。已初始化的卷积描述符。
dwDesc
输入。已初始化的卷积核描述符的句柄。
requestedAlgoCount
输入。要存储在perfResults中的最大元素数。
returnedAlgoCount
输出。存储在perfResults中的输出元素数。
perfResults
输出。用户分配的数组,用于存储按计算时间升序排序的性能指标。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
以下任一参数为NULL:handle、xDesc、dyDesc、convDesc、dwDesc、perfResults、returnedAlgoCount。
输入张量和输出张量的特征图数量不同。
两个张量描述符或卷积核的dataType不同。
requestedAlgoCount小于或等于0。
5.2.1.15. mcdnnGetConvolutionBackwardFilterWorkspaceSize()
mcdnnStatus_t mcdnnGetConvolutionBackwardFilterWorkspaceSize(
mcdnnHandle_t handle,
const mcdnnTensorDescriptor_t xDesc,
const mcdnnTensorDescriptor_t dyDesc,
const mcdnnConvolutionDescriptor_t convDesc,
const mcdnnFilterDescriptor_t gradDesc,
mcdnnConvolutionBwdFilterAlgo_t algo,
size_t *sizeInBytes)
此函数返回用户应分配的GPU内存工作空间量,以便能够使用指定算法来调用mcdnnConvolutionBackwardFilter()函数。然后,分配的工作空间将传入mcdnnConvolutionBackwardFilter()函数。指定的算法可以是调用mcdnnGetConvolutionBackwardFilterAlgorithm_v7()的结果,也可以由用户任意选择。请注意,并非每个算法都可用于输入张量的每个配置和/或卷积描述符的每个配置。
参数
handle
输入。已创建的mcDNN上下文的句柄。
xDesc
输入。已初始化的输入张量描述符的句柄。
dyDesc
输入。已初始化的输入差分张量描述符的句柄。
convDesc
输入。已初始化的卷积描述符。
dwDesc
输入。已初始化的卷积核描述符的句柄。
algo
输入。指定所选卷积算法的枚举。
sizeInBytes
输出。作为工作空间所需的GPU内存量,以便能够使用指定的算法执行正向卷积。
返回值
MCDNN_STATUS_SUCCESS
查询成功。
- MCDNN_STATUS_BAD_PARAM
需至少满足以下任一条件:
输入张量和输出张量的特征图数量不同。
两个张量描述符或卷积核的dataType不同。
MCDNN_STATUS_NOT_SUPPORTED
指定的算法不支持张量描述符,卷积核描述符和卷积描述符的组合。
5.2.1.16. mcdnnGetFusedOpsConstParamPackAttribute()
此函数检索参数指针输入所指向的描述符的值。 描述符的类型由paramLabel输入的枚举值指定。
mcdnnStatus_t mcdnnGetFusedOpsConstParamPackAttribute(
const mcdnnFusedOpsConstParamPack_t constPack,
mcdnnFusedOpsConstParamLabel_t paramLabel,
void *param,
int *isNULL);
参数
constPack
输入。mcdnnFusedOpsConstParamPack_t不透明结构,用于存储所选mcdnnFusedOps计算序列的各种problem size信息,例如形状,布局和张量类型,以及卷积和激活描述符。
paramLabel
输入。此getter函数可以检索多种类型的描述符。参数输入指向描述符本身,此输入表明参数输入所指向的描述符类型。mcdnnFusedOpsConstParamLabel_t枚举类型可用于选择描述符的类型。参见以下参数描述。
param
输入。数据指针,指向与要检索的描述符关联的主机内存。此描述符的类型取决于paramLabel的值。对于给定的paramLabel,如果constPack中的关联值设置为NULL或默认为NULL,则mcDNN将把该值或constPack中的不透明结构复制到param指向的主机内存缓冲区。有关更多信息,请参见mcdnnFusedOpsConstParamLabel_t中的表格。
isNULL
输入/输出。用户必须在此字段中传入主机内存中指向整数的指针。 如果与给定paramLabel关联的constPack中的值默认为NULL,或用户已设置为NULL,则mcDNN将一个非零值写入isNULL所指的位置。
返回值
MCDNN_STATUS_SUCCESS
已成功检索描述符值。
MCDNN_STATUS_BAD_PARAM
constPack,param或isNULL为NULL,或者paramLabel无效。
5.2.1.17. mcdnnGetFusedOpsVariantParamPackAttribute()
此函数用于检索变量参数包描述符的设置。
mcdnnStatus_t mcdnnGetFusedOpsVariantParamPackAttribute(
const mcdnnFusedOpsVariantParamPack_t varPack,
mcdnnFusedOpsVariantParamLabel_t paramLabel,
void *ptr);
参数
varPack
输入。指向mcdnnFusedOps变量参数包(varPack)描述符的指针。
paramLabel
输入。缓冲区指针参数的类型(在varPack描述符中)。更多信息,参见mcdnnFusedOpsConstParamLabel_t。检索到的描述符值因类型而异。
ptr
输出。指针,指向此函数写入检索值的主机或设备内存。指针的数据类型和主机/设备内存位置取决于paramLabel的输入选择。更多信息,参见mcdnnFusedOpsVariantParamLabel_t。
返回值
MCDNN_STATUS_SUCCESS
已成功检索描述符值。
MCDNN_STATUS_BAD_PARAM
varPack或ptr为NULL,或者paramLabel的设置值无效。
5.2.1.18. mcdnnMakeFusedOpsPlan()
在mcdnnFusedOpsExecut()实际执行融合操作之前,此函数确定要执行的最佳内核以及用户应分配的工作空间大小。
mcdnnStatus_t mcdnnMakeFusedOpsPlan(
mcdnnHandle_t handle,
mcdnnFusedOpsPlan_t plan,
const mcdnnFusedOpsConstParamPack_t constPack,
size_t *workspaceSizeInBytes);
参数
handle
输入。指向mcDNN库上下文的指针。
plan
输入。指向已创建和初始化的plan描述符的指针。
constPack
输入。指向常量参数包描述符的指针。
workspaceSizeInBytes
输出。用户为执行此计划应分配的工作空间大小。
返回值
MCDNN_STATUS_BAD_PARAM
任意输入为NULL,或者不支持constPack描述符中的mcdnnFusedOps_t类型。
MCDNN_STATUS_SUCCESS
此函数执行成功。
5.2.1.19. mcdnnSetFusedOpsConstParamPackAttribute()
此函数用于设置参数指针输入所指向的描述符。描述符的类型由paramLabel输入的枚举值指定。
mcdnnStatus_t mcdnnSetFusedOpsConstParamPackAttribute(
mcdnnFusedOpsConstParamPack_t constPack,
mcdnnFusedOpsConstParamLabel_t paramLabel,
const void *param);
参数
constPack
输入。mcdnnFusedOpsConstParamPack_t不透明结构,用于存储卷积和激活等操作的各种problem size信息,例如形状,布局和张量类型,卷积和激活描述符,以及设置。
paramLabel
输入。此setter函数可以设置多种类型的描述符。参数输入指向描述符本身,此输入表明参数输入所指向的描述符类型。mcdnnFusedOpsConstParamLabel_t枚举类型可用于选择描述符的类型。
param
输入。数据指针,指向与特定描述符关联的主机内存。此描述符的类型取决于paramLabel的值。有关更多信息,请参见mcdnnFusedOpsConstParamLabel_t中的表格。 如果该指针设置为NULL,则mcDNN库将记录空值。如果不是,则此指针指向的值(即,值或底部的不透明结构)将在mcdnnSetFusedOpsConstParamPackAttribute()运行期间复制到constPack中。
返回值
MCDNN_STATUS_SUCCESS
描述符设置成功。
MCDNN_STATUS_BAD_PARAM
constPack为NULL,或者paramLabel或constPack的ops设置无效。
5.2.1.20. mcdnnSetFusedOpsVariantParamPackAttribute()
此函数用于设置变量参数包描述符。
mcdnnStatus_t mcdnnSetFusedOpsVariantParamPackAttribute(
mcdnnFusedOpsVariantParamPack_t varPack,
mcdnnFusedOpsVariantParamLabel_t paramLabel,
void *ptr);
参数
varPack
输入。指向mcdnnFusedOps变量参数包(varPack)描述符的指针。
paramLabel
输入。通过此函数设置的缓冲区指针参数的类型(在varPack描述符中)。更多信息,参见mcdnnFusedOpsConstParamLabel_t。
ptr
输入。主机或设备内存中的指针,指向设置的描述符参数值。指针的数据类型和主机/设备内存位置取决于paramLabel的输入选择。更多信息,参见mcdnnFusedOpsVariantParamLabel_t。
返回值
MCDNN_STATUS_BAD_PARAM
varPack为NULL,或paramLabel的设置值无效。
MCDNN_STATUS_SUCCESS
描述符设置成功。