模块概述¶
Cambricon CNNL(寒武纪人工智能计算库)是一个基于寒武纪MLU并针对深度人工智能网络的计算库。Cambricon CNNL 针对深度人工智能网络应用场景,提供了高度优化的常用算子,同时也为用户提供简洁、高效、通用、灵活并且可扩展的编程接口。
Cambricon CNNL具有以下特点:
Cambricon CNNL基于BANG C语言(寒武纪针对MLU硬件开发的编程语言)实现算子开发。
Cambricon CNNL编译依赖寒武纪驱动应用程序接口CNDrv,寒武纪运行时库Cambricon CNRT、寒武纪编译器CNCC、寒武纪汇编器CNAS,运行依赖CNDrv、CNRT。
Cambricon CNNL头文件位于
include目录下,Cambricon CNNL库位于lib64目录下,其中库文件分为动态链接库和静态链接库。Cambricon CNNL提供两组软件包,分别支持远离零点四舍五入(Round half away from zero)和向上四舍五入(Round half up)这两种设备端数值修约模式,用于推理模型的适配。
依赖版本说明¶
Cambricon CNNL 版本 |
依赖组件版本 |
|---|---|
Cambricon CNNL v1.23.z |
CNToolkit >= v3.8.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.22.z |
CNToolkit >= v3.7.1 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.21.z |
CNToolkit >= v3.7.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.20.z |
CNToolkit >= v3.6.1 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.19.z |
CNToolkit >= v3.5.1 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.18.z |
CNToolkit >= v3.5.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.17.z |
CNToolkit >= v3.4.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.16.z |
CNToolkit >= v3.3.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.15.z |
CNToolkit >= v3.2.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.14.z |
CNToolkit >= v3.1.1 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.13.z |
CNToolkit >= v3.0.2 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.12.z |
CNToolkit >= v3.0.1 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.11.z |
CNToolkit >= v3.0.0 && CNToolkit <= v3.y.z |
Cambricon CNNL v1.10.5 |
CNToolkit >= v2.8.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.10.4 |
CNToolkit >= v2.8.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.10.3 |
CNToolkit >= v2.8.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.10.2 |
CNToolkit >= v2.8.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.10.1 |
CNToolkit >= v2.8.1 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.10.0 |
CNToolkit >= v2.8.1 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.9.6 |
CNToolkit >= v2.7.4 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.9.3 |
CNToolkit >= v2.7.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.9.0 |
CNToolkit >= v2.7.2 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.8.z |
CNToolkit >= v2.5.3 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.7.z |
CNToolkit >= v2.5.2 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.7.0 |
CNToolkit >= v2.4.2 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.6.z |
CNToolkit >= v2.4.0 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.5.z |
CNToolkit >= v2.2.1 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.4.z |
CNToolkit >= v2.1.2 && CNToolkit <= v2.y.z |
Cambricon CNNL v1.3.1 |
CNToolkit >= v1.8.0 && CNToolkit <= v1.y.z |
Cambricon CNNL v1.3.0 |
CNToolkit >= v1.7.0 && CNToolkit <= v1.y.z |
Cambricon CNNL v1.2.z |
CNToolkit >= v1.6.0 && CNToolkit <= v1.y.z |
Cambricon CNNL v1.1.z |
CNToolkit >= v1.5.0 && CNToolkit < v1.6.0 |
Cambricon CNNL v1.0.z |
CNToolkit >= v1.4.0 && CNToolkit < v1.5.0 |
支持平台说明¶
Cambricon CNNL 版本 |
支持的CPU架构 |
支持的MLU架构 |
|---|---|---|
Cambricon CNNL v1.23.z |
x86_64 |
MLU300 series,MLU500 series |
aarch64 |
1V |
|
Cambricon CNNL v1.22.z |
x86_64 |
MLU300 series,MLU500 series |
aarch64 |
1V |
|
Cambricon CNNL v1.21.z |
x86_64 |
MLU300 series,MLU500 series |
aarch64 |
1V |
|
Cambricon CNNL v1.20.z |
x86_64 |
MLU300 series,MLU500 series |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.19.z |
x86_64 |
MLU300 series,MLU500 series |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.18.z |
x86_64 |
MLU370,MLU590 |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.17.z |
x86_64 |
MLU370,MLU590 |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.16.z |
x86_64 |
MLU370,MLU590 |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.15.z |
x86_64 |
MLU370,MLU590 |
aarch64 |
CE3226,1V |
|
Cambricon CNNL v1.14.z |
x86_64 |
MLU290,MLU370,MLU590 |
aarch64 |
CE3226,MLU370 |
|
Cambricon CNNL v1.13.z |
x86_64 |
MLU290,MLU370 |
aarch64 |
CE3226,MLU370 |
|
Cambricon CNNL v1.12.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.11.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.10.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.9.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.8.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.7.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.6.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.5.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE,CE3226 |
|
Cambricon CNNL v1.4.z |
x86_64 |
MLU220,MLU270,MLU290,MLU370 |
aarch64 |
MLU220 EDGE |
|
Cambricon CNNL v1.3.1 |
x86_64 |
MLU220,MLU270,MLU290 |
aarch64 |
MLU220 EDGE |
|
Cambricon CNNL v1.3.0 |
x86_64 |
MLU270,MLU290 |
Cambricon CNNL v1.2.z |
x86_64 |
MLU220,MLU270,MLU290 |
Cambricon CNNL v1.1.z |
x86_64 |
MLU220,MLU270,MLU290 |
Cambricon CNNL v1.0.z |
x86_64 |
MLU220,MLU270,MLU290 |
v1.23.2¶
新增接口或弃用¶
无。
特性变更¶
算子cnnlBatchMatMulBCast_v2优化了在TensorStride为0时的broadcast场景内存占用过多情况。
修复问题¶
修复了算子cnnlBiasAdd workspace逻辑错误导致的core dump问题。
修复了算子cnnlActivationForward逻辑错误导致的精度问题。
修复了算子cnnlBatchNormBackward_v2输入y和激活模式组合关系的防呆问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActivelForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlHistc、cnnlBincount、cnnlTloopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlBorderAlignForward、cnnlCycleOp、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在HALF数据类型下,部分规模存在计算错误问题。
v1.23.1¶
新增接口或弃用¶
无。
特性变更¶
无。
修复问题¶
修复了算子cnnlActivationForward glu模式没有解除Bfloat16防呆的问题。
修复了算子cnnlMatMulEx GEVM模式中带bias且后转数出错的问题。
修复了算子cnnlMatMul在MLU300 series性能下降的问题。
修复了算子cnnlTranspose在MLU300 series性能下降的问题。
修复了算子cnnlOpTensor由于SIZE_SCALE_BUF大小的改动引起的性能下降问题。
修复了算子cnnlOpTensor当输入tensor为int64数据类型时缺少的防呆检查问题,即要求alpha1、alpha2、beta在48bit表示范围内。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActivelForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlHistc、cnnlBincount、cnnlTloopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlBorderAlignForward、cnnlCycleOp、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在HALF数据类型下,部分规模存在计算错误问题。
v1.23.0¶
新增接口或弃用¶
无。
特性变更¶
算子cnnlCastDataType支持了CNNL_CAST_INT16_TO_BFLOAT16、CNNL_CAST_INT8_TO_BFLOAT16、CNNL_CAST_UINT8_TO_BFLOAT16、CNNL_CAST_INT64_TO_BFLOAT16、CNNL_CAST_BFLOAT16_TO_INT8、CNNL_CAST_BFLOAT16_TO_UINT8、CNNL_CAST_BFLOAT16_TO_INT16、CNNL_CAST_BFLOAT16_TO_INT32、CNNL_CAST_BFLOAT16_TO_INT64模式。
算子cnnlInterp在INTERP_BILINEAR模式下新增INTERP_COORDINATE_TRANSFORMATION_ALGO1算法支持。
以下算子在MLU500 series上支持Bfloat16数据类型:
cnnlLogicOp、cnnlMatMulEx、cnnlBiasAddBackward、cnnlLinspace、cnnlGroupNormForward、cnnlRepeatInterleave、cnnlIndexAdd、cnnlActivationBackward、cnnlActivationForward所有模式、cnnlGroupNormBackward、cnnlConvolutionBackwardData。
以下算子支持了int64数据类型:
cnnlLogicOp、cnnlArange、cnnlMasked、cnnlOpTensor、cnnlAdvancedIndex、cnnlTransform、cnnlReduce。
算子cnnlLogicOp在int64数据类型下,数值范围不能超过48bit。
以下算子在MLU500 series上支持tensor规模大于2G的场景:
cnnlLogicOp、cnnlGroupNormForward、cnnlScatter、cnnlMSELoss、cnnlMSELossBackward。
以下算子做了性能优化:
cnnlRoiAlign、cnnlConvolutionBackwardFilter、cnnlOpTensor、cnnlTranspose、cnnlTopKTensor、cnnlRandGenerateMultinomial、cnnlGroupNormBackward、cnnlMatMul、cnnlNormalize、cnnlNms、cnnlStrideBatchMatMul、cnnlConvolutionForward、cnnlRoiAlignBackward。
以下算子实现对齐了PyTorch 1.13.1:
cnnlGridSampleForward。
算子cnnlDet在MLU500 series支持的功能与MLU300 series对齐。
算子cnnlMatMul所有kernel支持输出片外数据类型为Float32,输入片上数据类型为Bfloat16或者Half。
算子cnnlMatMul输出片外数据类型是Bfloat16且指定了片上数据类型时,该片上数据类型必须是Float32。
算子cnnlAsStridedBackward支持Half数据类型。
以下算子解决了int输入情况下,当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlScatterRef、cnnlLogicOp、cnnlBiasAdd、cnnlReduce。
算子cnnlReduce在AND和OR模式下支持unint8和bool数据类型输出。
算子cnnlPoolingForward给接口extra_host_input添加不为空的检查。
算子cnnlMasked支持了各个模式下数值大于1的bool类型输入。
算子cnnlMatMulEx支持Gelu激活。
算子cnnlActivationBackward的CNNL_ACTIVATION_SIGMOID模式支持广播功能。
修复问题¶
修复了算子cnnlExpand中间维度广播且规模较小的场景下性能下降问题。
修复了算子cnnlExpand内存越界导致的core dump问题。
修复了算子cnnlAdvancedIndex形状推导错误的问题。
修复了算子cnnlAdvancedIndex逻辑错误导致的core dump问题。
修复了算子cnnlConvolutionBackwardData规模变大导致的core dump问题。
修复了算子cnnlTranspose逻辑错误导致的core dump问题。
修复了算子cnnlUnpoolForward异常报错问题。
修复了算子cnnlPoolingForward因防呆不当导致的core dump问题。
修复了算子cnnlBiasAddBackward使用axis参数计算所需workspace大小,但未对axis参数做范围检查的问题。
修复了以下算子精度越界问题:
cnnlMatMul、cnnlMatMulInference、cnnlBceLossBackward、cnnlTrace、cnnlNormalize、cnnlIndexPut、cnnlCastDataType。
修复了以下算子内存地址越界问题:
cnnlUnpoolBackward、cnnlCastDataType、cnnlIndexPut、cnnlNormalize、cnnlBceWithLogits、cnnlReduce、cnnlRoialign、cnnlConvolutionForward、cnnlBatchMatmulBCast、cnnlRoiAlignForward、cnnlInterp、cnnlConvolutionBackwardFilter。
修复了算子cnnlStridedSlice规模过大导致的精度异常问题。
修复了以下算子性能下降问题:
cnnlMatMul、cnnlScatter、cnnlConvolutionForward、cnnlPad。
修复了算子cnnlMatMul内存使用异常导致的timeout问题。
修复了算子cnnlIndexPut规模过大导致的core dump问题。
修复了算子cnnlAdvancedIndex在ADVANCED_INDEX_INT32_SLICE_370_PERF模式workspace计算错误的问题。
修复了算子cnnlRNNBackwardWeights在rnn_desc->proj_size不等于0时,部分规模计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActivelForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlHistc、cnnlBincount、cnnlTloopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlBorderAlignForward、cnnlCycleOp、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
以下算子还不支持stride特性:
cnnlRoll、cnnlWeightNormBackward、cnnlWeightNorm、cnnlVarForward、cnnlUnsortedSegmentSum、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlUniqueConsecutive、cnnlUnfold、cnnlUnarySelect、cnnlTrunc、cnnlTriIndices、cnnlTrigonForward、cnnlTrace、cnnlTinShiftForward、cnnlTinShiftBackward、cnnlTile、cnnlThresholdBackward、cnnlThreshold、cnnlSyncBatchNormGatherStatsWithCounts、cnnlSyncBatchNormElemt、cnnlSyncBatchNormBackwardElemtV2、cnnlSyncBatchNormBackwardElemt、cnnlSvd、cnnlStridedSliceBackward、cnnlStridedSlice、cnnlStrideBatchMatMul、cnnlStdVarMean、cnnlStdForward、cnnlStdBackward、cnnlSquaredDifference、cnnlSquare、cnnlSqrtBackward、cnnlSplit、cnnlSpace2batch、cnnlSortedSegmentReduce、cnnlSoftsignGrad、cnnlSoftsignForward、cnnlSoftplusForward、cnnlSoftplusBackward、cnnlSoftmaxBackward、cnnlSlogDet、cnnlShuffleChannel、cnnlSelect、cnnlSearchSorted、cnnlScatterRef、cnnlScatter、cnnlScaledTanh、cnnlScale、cnnlRsqrtBackward、cnnlRoiPoolingForward、cnnlRoiPoolingBackward、cnnlRoiAlignRotatedForward、cnnlRoiAlignRotatedBackward、cnnlRNNTLoss、cnnlRNNForwardTraining、cnnlRNNForwardInference、cnnlRNNBackwardWeights、cnnlRNNBackwardData、cnnlRMSProp、cnnlReplicationPadBackward、cnnlReplicationPad2d、cnnlRepeatInterleave、cnnlReflectionPadBackward、cnnlReflectionPad2d、cnnlReduce、cnnlReciprocal、cnnlRandGenerateUniformInt、cnnlRandGenerateUniform、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateNormal、cnnlQuantizeV2、cnnlQuantizeV1、cnnlQuantizeStrategy、cnnlQuantizeParam、cnnlQuantizeMatMul、cnnlQuantizeDeconvolution、cnnlQuantizeConvolutionForward、cnnlQuantizeConvolutionBackwardFilter、cnnlQuantizeConvolutionBackwardData、cnnlQuantizeBatchMatMulBCast、cnnlQuantizeBatchMatMul、cnnlQR、cnnlPsamaskForward、cnnlPsamaskBackward、cnnlPreluBackward、cnnlPrelu、cnnlPow、cnnlPoolingIndex、cnnlPoolingForwardWithIndex、cnnlPoolingBackward、cnnlPoisson、cnnlPointsInBoxes、cnnlPad、cnnlOrgqr、cnnlOneHot、cnnlNlllossForward、cnnlNlllossBackward、cnnlNanInf、cnnlMultiHeadAttnForward、cnnlMulN、cnnlMSELossBackward、cnnlMomentum、cnnlMinimum、cnnlMediancnnlMaximum、cnnlMatrixDiag、cnnlMatrixBandPart、cnnlMaskZero、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlLSTM、cnnlLrnGrad、cnnlLog1p、cnnlListDiff、cnnlLinspace、cnnlLayerNormForward、cnnlKthValue、cnnlKerasMomentum、cnnlIsNan、cnnlIsInf、cnnlIsFinite、cnnlInvertPermutation、cnnlInverse、cnnlInTopK、cnnlInstanceNormInference、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlIndexSelect、cnnlIndexPut、cnnlIndexAdd、cnnlIm2col、cnnlHardtanhBackward、cnnlHardtanh、cnnlGroupNormBackward、cnnlGrep、cnnlGradientDescent、cnnlGatherV2、cnnlGatherTree、cnnlGatherNd、cnnlGather、cnnlFusedOpsExecute、cnnlFocalLossSigmoidForward、cnnlFocalLossSigmoidBackward、cnnlFloorModTrunc、cnnlFloorMod、cnnlFloorDivV2、cnnlFloorDivTrunc、cnnlFlip、cnnlFakeQuantizePerchannelAffine、cnnlExponential、cnnlExpand、cnnlErfinv、cnnlEmbeddingBagBackward、cnnlEmbeddingBackward、cnnlDynamicStitch、cnnlDynamicPartition、cnnlDiagPart、cnnlDiagonal、cnnlDiag、cnnlDet、cnnlDeformRoiPoolForward、cnnlDeformRoiPoolBackward、cnnlDeconvolutionInference、cnnlDeconvolution、cnnlDcNForward、cnnlDcNBackwardWeight、cnnlDcNBackwardData、cnnlcycleOp、cnnlcumsum、cnnlcumprod、cnnlcummin、cnnlcummax、cnnlcTcLoss、cnnlcropAndResizeBackwardImage、cnnlcropAndResizeBackwardBoxes、cnnlcropAndResize、cnnlcosineSimilarity、cnnlcopySign、cnnlconvolutionForwardInference、cnnlconvolutionForward、cnnlconvolutionBackwardFilter、cnnlconvolutionBackwardData、cnnlconj、cnnlconcat、cnnlcomplexAbs、cnnlcol2Im、cnnlceil、cnnlcdistForward、cnnlcdistBackward、cnnlcaxpby、cnnlcarafeForward、cnnlcarafeBackward、cnnlBucketize、cnnlBoxOverlapBev、cnnlBoxIouRotated、cnnlBorderAlignForward、cnnlBiasAdd、cnnlBceWithLogitsBackward、cnnlBceLossBackward、cnnlBceLoss、cnnlBboxOverlaps、cnnlBatchNormForwardInference、cnnlBatchMatMul、cnnlBatch2space、cnnlAttention、cnnlAtan2、cnnlAsStridedBackward、cnnlAsStrided、cnnlAssignTo、cnnlAssignSub、cnnlAssignAdd、cnnlArange_v2、cnnlApplyProximalAdagrad、cnnlApplyFtrlV2、cnnlApplyCenterRMSProp、cnnlApplyAddSign、cnnlApplyAdaMax、cnnlApplyAdam、cnnlApplyAdaGradV2、cnnlApplyAdaGrad、cnnlApplyAdadelta、cnnlAdvancedIndex_v2、cnnlAddN_v2、cnnlAdaptivePoolingForward_v2、cnnlAdaptivePoolingBackward、cnnlActivationForward、cnnlActivationBackward、cnnlWhere_v2、cnnlUnique_v2、cnnlTranspose_v2、cnnlTransform_v2、cnnlTopKTensor_v3、cnnlSyncBatchNormStats_v2、cnnlSyncBatchnormBackwardReduce_v2、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlSpace2batchNd_v2、cnnlSoftmaxForward_v2、cnnlSoftmaxCrossEntropyWithLogits_v2、cnnlSmoothL1LossForward_v2、cnnlSmoothL1LossBackward_v2、cnnlRoiAlignBackward_v2、cnnlReorg_v2、cnnlRandGenerateMultinomial_v2、cnnlQuantizeConvolutionForward、cnnlQuantizeConvolutionBackwardFilter、cnnlPowR_v2、cnnlPoolingForward_v2、cnnlNormalize_v3、cnnlNms_v2、cnnlMSELoss_v2、cnnlMatMulInference_v2、cnnlMatMul_v2、cnnlMasked_v4、cnnlLrn_v2、cnnlLayerNormBackward_v2、cnnlL2Loss_v2、cnnlInterpBackward_v3、cnnlInterp_v3、cnnlGru_v2、cnnlGroupNormForward_v3、cnnlFusedDropout_v2、cnnlFrozenBatchNormBackward_v2、cnnlFloorDiv_v2、cnnlEmbeddingForward_v2、cnnlEmbeddingBag_v2、cnnlDivNoNan_v2、cnnlCustomizedActiveForward_v2、cnnlBitCompute_v2、cnnlBiasAddBackward_v2、cnnlBceWithLogits_v2、cnnlBatchNormForwardTraining_v2、cnnlBatchNormBackward_v2、cnnlBatchMatMulBCast_v2、cnnlBatchGatherV2_v2、cnnlBatch2spaceNd_v2、cnnlAxpy_v2、cnnlAxpby_v2、cnnlAx_v2。
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在HALF数据类型下,部分规模存在计算错误问题。
以下算子在部分情况下存在性能下降:cnnlOpTensor算子输入为HALF数据类型的部分规模、cnnlTranspose算子部分规模、cnnlConvolutionForward算子部分规模。
在MLU500 series上,算子cnnlActivationBackward在广播模式下不支持Bfloat16数据类型。
非标准Bool类型输入,有些场景有精度问题。
v1.22.0¶
新增接口或弃用¶
新增接口cnnlStrideBatchMatMul_v2。相比cnnlStrideBatchMatMul接口,适配了TF32模式等。更多详情,参见Cambricon CNNL Developer Guide。
特性变更¶
算子cnnlMatMul_v2支持alpha和beta参数。
算子cnnlCastDataType支持CNNL_CAST_INT32_TO_UINT8模式。
以下算子在MLU500 series上支持Bfloat16数据类型:
cnnlAddcdiv、cnnlAddcmul、cnnlCastDataType、cnnlClip、cnnlClip_v2、cnnlIndexPut、cnnlIndexSelect、cnnlIndexput、cnnlMasked、cnnlMasked_v2、cnnlMasked_v3、cnnlMasked_v4、cnnlMseLoss、cnnlMseLoss_v2、cnnlMseLossBackward、cnnlRandGenerateUniformInt、cnnlReduce、cnnlSoftmaxBackward、cnnlTile。
算子cnnlTri支持Bool数据类型。
以下算子在MLU500 series上nan/inf与竞品对齐:
cnnlLog1P、cnnlUnpoolForward、cnnlUnpoolBackward。
以下算子进行了性能优化:
cnnlInterp的CNNL_INTERP_BILINEAR模式、cnnlBitCompute_v2的CNNL_CYCLE_BAND_OP和CNNL_CYCLE_BOR_OP模式下带stride拷贝场景、SyncBatchNormElemt、SyncBatchnormBackwardReduce、cnnlScatter、cnnlSoftmaxForward。
算子cnnlBitCompute_v2支持scalar输入。
算子cnnlFusedOpsExecute支持CNNL_CONV_SCALE_BN_ACTIVATION_ADD_ACTIVATION模式。
以下算子整型精度对齐竞品:
cnnlClip_v2、cnnlBatchMatMulBCast。
算子cnnlEmbeddingBackward在MLU500 series上支持tensor规模大于2G的场景。
算子cnnlOpTensor在MLU300 series上在不广播情况下支持tensor规模大于2G的场景。
算子cnnlReduce在CNNL_REDUCE_ONLY_INDICES模式下支持output描述符为空的处理。
以下算子实现对齐了PyTorch 1.13.1:
cnnlNlllossBackward、cnnlNlllossForward、cnnlInterp、cnnlInterpBackward。
新增算子split的sample。
算子cnnlRandGenerateTruncatedNormal支持CNNL_RAND_RNG_PHILOX模式。
算子cnnlTrigonForward支持CNNL_COMPUTATION_HIGH_PRECISION模式。
算子cnnlSvd支持compute_uv为false时,参数u和v包含0元素的情况。
算子cnnlMatMul_v2支持stride功能。
算子cnnlMatMul支持输出片外数据类型为Float32,输入片上数据类型为Bfloat16或者Half。
修复问题¶
修复了算子cnnlPoolingIndex在文档中未说明只支持CNNL_POOLING_MAX模式的问题。
修复了算子cnnlMatMul在文档中未说明alpha和beta参数只能为默认值的问题。
修复了以下算子性能下降问题:
cnnlApplyProximalAdagrad、cnnlCopy、cnnlMatMul、cnnlTranspose、cnnlOpTensor,cnnlFusedOpsExecute、cnnlPad。
修复了算子cnnlInterp在tensor规模超过2G时不报防呆的问题。
修复了以下算子内存地址越界问题:
cnnlConvolutionForward、cnnlFusedOpsExecute、cnnlReplicationPadBackward、cnnlTopKTensor、cnnlPow、cnnlMatMul、cnnlInterp、cnnlIm2Col、cnnlTopKTensor、cnnlMatrixDiag、cnnlSortedSegmentReduce。
修复了算子cnnlCropAndResize在CNNL_CROP_AND_RESIZE_BILINEAR模式下精度越界问题。
修复了算子cnnlTranspose在不同模式下存在的性能异常问题。
修复了算子cnnlGroupNormBackward在tensor规模大于2G时异常问题。
修复了算子cnnlTranspose在tensor规模大于2G时计算错误问题。
修复了算子cnnlSortedSegmentReduce在tensor规模大于2G时计算错误问题。
修复了算子cnnlClip参数min小于max时计算失败的问题。
修复了算子cnnlExp在handle为空时没有防呆的问题。
修复了算子cnnlDCNForward在某些规模下结果出错的问题。
修复了算子cnnlRandGenerateUniform在Bfloat16数据类型下计算错误的问题。
修复了算子cnnlSelect数据类型防呆不正确的问题。
修复了算子cnnlInverse对零矩阵输出不正确的问题。
修复了算子cnnlConvolutionBackwardData在输入输出layout是NCHW时运行报错的问题。
修复了算子cnnlConvolutionBackwardData在无需量化输入时,量化参数被赋值后计算出错问题。
修复了算子cnnlConvolutionForward误调用cnnlFusedOpsExecute逻辑导致core dump问题。
修复了算子cnnlL1LossBackward在Cambricon CNNL Developer Guide中缺少支持的数据类型说明的问题。
修复了算子cnnlTransform在output为空时缺少防呆的问题。
修复了算子cnnlMatMul数值超出数据类型表示范围时的core dump问题。
修复了算子cnnlExp_v2参数prefer缺少防呆的问题。
修复了算子cnnlWhere结果维度不匹配问题。
修复了算子cnnlClip在Bfloat16数据类型下部分场景计算出错的问题。
修复了算子cnnlMasked在CNNL_MASKED_FILL模式下,mask大于1计算出错的问题。
修复了算子cnnlNlllosBackward在algorithm不为CNNL_REDUCTION_NONE时,不检查tw_desc和total_filter是否为空指针的问题。
修复了算子cnnlOpTensor逻辑有误导致的core dump问题。
修复了算子cnnlReorg缺少描述符reorg_desc不为空的防呆,layout为NC时,reorg_h和reorg_w必须为1的防呆,cnnlInitReorgExtraInput缺少extra_output为空的防呆问题。
修复了算子cnnlDivNoNan、cnnlExp、cnnlFloorDiv、cnnlFloorDivTrunc、cnnlLog、cnnlPow、cnnlRsqrt、cnnlSin和cnnlCos不支持CNNL_COMPUTATION_ULTRAHIGH_PRECISION模式的防呆缺失和文档说明的问题。
修复了算子cnnlFusedOpsExecute异常报Error的问题。
修复了算子cnnlInterp逻辑出错导致的core dump问题。
修复了算子cnnlRNNForwardTraining不正确的防呆和逻辑出错导致的timeout问题。
修复了算子cnnlIndexPut进错分支导致的core dump问题。
修复了算子cnnlConvolutionBackwardFilter逻辑调用错误导致的精度问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActivelForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在HALF数据类型下,部分规模存在计算错误问题。
以下算子在部分情况下存在性能下降:
cnnlExpand算子中间维度广播且规模较小。
v1.21.1¶
新增接口或弃用¶
无。
特性变更¶
无。
修复问题¶
修复了cnnlFusedOp部分规模性能下降的问题。
修复了cnnlGroupNormBackward算子在输入tensor规模超过2G时的计算错误问题。
修复了cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在
proj_size参数大于0,且layout为CNNL_SEQDATA_TNC_PACKED时计算错误的问题。修复了cnnlAdvancedIndex算子在输入为标量时计算错误的问题。
修复了cnnlGetOpTensorWorkspaceSize_v2接口零元素防呆报错的问题。
修复了cnnlHistc算子在部分规模下计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子在HALF数据类型下,部分规模存在计算错误问题。
以下算子在部分情况下存在性能下降:cnnlOpTensor算子输入为HALF数据类型的部分规模、cnnlExpand算子中间维度广播且规模较小、cnnlTranspose算子部分规模、cnnlConvolutionForward算子部分规模。
v1.21.0¶
新增接口或弃用¶
新增算子cnnlSortedSegmentReduce。
新增接口cnnlTri_v2。相比于cnnlTri,可支持输入tensor维度大于2G规模的情况,但额外使用workspace空间。
新增接口cnnlStridedSlice_v2。相比于cnnlStridedSlice,支持输入tensor维度大于2G规模的情况。
新增接口cnnlCumsum_v2。相比于cnnlCumsum,可支持输入tensor维度大于2G规模的情况,但额外使用workspace空间。
弃用接口cnnlAdaptivePoolingForward,可使用cnnlAdaptivePoolingForward_v2接口进行替换。所有可替换接口,参见《Cambricon CNNL Developer Guide》的 “Deprecated APIs” 章节。
特性变更¶
cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining算子新增支持通过cnnlSetRNNDescriptor_v2接口给cnnlRNNDescriptor_t设置大于0的
proj_size参数值。在MLU500 series上新增支持BFloat16数据类型的算子:
cnnlSelectV2、cnnlTri_v2、cnnlActivationBackward::CNNL_ACTIVATION_SILU、cnnlActivationForward::CNNL_ACTIVATION_SILU、cnnlCumsum_v2、cnnlRsqrt_v2、cnnlScatter、cnnlReciprocal、cnnlGather、cnnlPow、cnnlAdvanceIndex、cnnlLog_v2、cnnlExp_v2、cnnlDiv_v2、cnnlSoftmaxForward、cnnlLogicOp、cnnlNeg、cnnlIsNan、cnnlAbs、cnnlNlllossForward、cnnlNlllossBackward、cnnlArange、cnnlTopK、cnnlMaximum、cnnlMinimum、cnnlSincos、cnnlPow、cnnlSoftmaxBackward、cnnlRandGenerateMultinomial、cnnlRandGenerateUniform。
在MLU500 series上新增支持输入tensor维度大于2G规模的算子:
cnnlBatchMatMulBCast_v2、cnnlSqrt_v2、cnnlCumsum_v2、cnnlStridedSlice_v2、cnnlSoftmaxForward、cnnlWhere_v2、cnnlLayerNormBackward、cnnlBitConpute_v2、cnnlLogicOp、cnnlIndexPut。
在MLU300 series上新增支持输入tensor维度大于2G规模的算子:cnnlBatchMatMulBCast_v2。
cnnlFill算子新增在MLU300 series上不支持输入tensor维度大于2G规模的防呆检查。
cnnlCast算子新增支持CNNL_CAST_INT16_TO_INT8模式。
cnnlFloorModTrunc算子支持接口中的
input1和input2为host侧地址指针,需要调用cnnlSetTensorDescriptorPointerMode接口设置对应tensor描述符中的pointer_mode为CNNL_POINTER_MODE_HOST。cnnlRNNTLoss算子解除logits输入部分规模限制。
cnnlFusedDropout_v2算子mask输入新增支持bool数据类型。
cnnlMasked_v4算子CNNL_MASKED_SCALE模式下mask输入支持bool数据类型。
cnnlReduce算子新增支持CNNL_REDUCE_NANSUM模式。
cnnlFill算子新增支持CNNL_DTYPE_COMPLEX_FLOAT数据类型。
cnnlFakeQuantizePerTensorAffine算子解除在MLU500 series和MLU300 series上的规模限制。
cnnlNms算子解除
confidence_threshold参数只能在0到1之间的范围限制。cnnlExponential、cnnlFusedDropout_v2、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateUniform、cnnlRandGenerateDescreteUniform算子在CNNL_RAND_RNG_PHILOX模式下支持超过 \(2^{64}\) 周期,并提供cnnlRandGetSimulateThreadNum接口用于框架更新全局offset。
优化以下算子在部分模式或规模下的性能:
cnnlQR、cnnlBucketize、cnnlRoiAlignForward、cnnlIndexPut、cnnlMatmulInference、cnnlFusedOp、cnnlPdistForward、cnnlAdvanceIndex、cnnlGridSampleForward、cnnlConvolutionBackwardData、cnnlStridedSlice、cnnlMatmul_v2、cnnlCopy、cnnlMasked::CNNL_MASKED_FILL、cnnlSoftmaxForward、cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlRNNForwardTraining、cnnlTranspose、cnnlSoftmaxBackward、cnnlSign、cnnlDiv、cnnlConvolutionBackwardFilter、cnnlUnsortedSegmentSum、cnnlNlllossForward、cnnlInterp_v3、cnnlIndexSelect。
cnnl samples中增加matmul_sample。
新增支持CNNL接口调用统计功能,将环境变量
CNNL_TRACE_ENABLE_API设置为ON,可统计运行过程中所有CNNL接口的调用次数到文件,并可通过CNNL_TRACE_DATA_DIR环境变量设置文件输出路径。不再支持CE3226架构。
修复问题¶
修复以下算子在MLU500 series上输入数据包含NAN/INF值时计算错误的问题:
cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlHardtanhBackward、cnnlActivationBackward::CNNL_ACTIVATION_HARDWISH、cnnlRoiAlignForward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
v1.20.4¶
新增接口或弃用¶
无。
特性变更¶
无。
修复问题¶
修复了cnnlAdvancedIndex在部分规模下存在的功能问题。
修复了cnnlScatter在部分规模下存在的功能问题。
修复了cnnlConvolutionBackwardData在某种特殊模式下存在的精度问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSWISH、ActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlHardtanhBackward、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlSparseSoftmaxCrossEntropyWithLogits、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlTransformcnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlIndexPut、cnnlMatMulInference、cnnlBatchMatMulBCast_v2、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerTensorAffine、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlThreshold、cnnlPoisson、cnnlFusedDropout_v2、cnnlRandGenerateUniformInt、cnnlMaximum、cnnlConvolutionForward、cnnlConvolutionBackwardFilter、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateUniform、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlTriIndices、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
CNNL 针对网络中有使用的176个算子进行了tensor num的防呆筛查和修正,其余未在网络中使用的算子状态未知。
已知还存在的防呆问题如下:cnnlBceLoss、cnnlBceWithLogits_v2、cnnlRoiAlignBackward_v2、cnnlRNNBackwardData、cnnlRNNBackwardWeights可接受的最大tensor size仅支持2G bytes,在超过2G bytes的规模下会计算错误或coredump。
v1.20.3¶
新增接口或弃用¶
无。
特性变更¶
无。
修复问题¶
修复了cnnlRoiAlign在部分规模下存在的功能问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSWISH、ActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlHardtanhBackward、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlSparseSoftmaxCrossEntropyWithLogits、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlTransformcnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlIndexPut、cnnlMatMulInference、cnnlBatchMatMulBCast_v2、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerTensorAffine、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlThreshold、cnnlPoisson、cnnlFusedDropout_v2、cnnlRandGenerateUniformInt、cnnlMaximum、cnnlConvolutionForward、cnnlConvolutionBackwardFilter、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateUniform、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlTriIndices、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
CNNL 针对网络中有使用的176个算子进行了tensor num的防呆筛查和修正,其余未在网络中使用的算子状态未知。
已知还存在的防呆问题如下:cnnlBceLoss、cnnlBceWithLogits_v2、cnnlRoiAlignBackward_v2、cnnlRNNBackwardData、cnnlRNNBackwardWeights可接受的最大tensor size仅支持2G bytes,在超过2G bytes的规模下会计算错误或coredump。
v1.20.2¶
新增接口或弃用¶
无。
特性变更¶
算子cnnlApplyFtrlV2添加lr_power的防呆,要求-32768 < lr_power < 32767。之前该算子超过int16表示范围时会有实现缺陷,因此增加该约束。
修复问题¶
修复了cnnlRoiAlignBackward在部分规模下存在的功能问题。
修复了算子cnnlBatchGatherV2在最低维度特别大,超出12000左右的时候存在功能问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSWISH、ActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlHardtanhBackward、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlSparseSoftmaxCrossEntropyWithLogits、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlTransformcnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlIndexPut、cnnlMatMulInference、cnnlBatchMatMulBCast_v2、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerTensorAffine、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlThreshold、cnnlPoisson、cnnlFusedDropout_v2、cnnlRandGenerateUniformInt、cnnlMaximum、cnnlConvolutionForward、cnnlConvolutionBackwardFilter、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateUniform、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlTriIndices、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
CNNL 针对网络中有使用的176个算子进行了tensor num的防呆筛查和修正,其余未在网络中使用的算子状态未知。
已知还存在的防呆问题如下:cnnlBceLoss、cnnlBceWithLogits_v2、cnnlRoiAlignBackward_v2、cnnlRNNBackwardData、cnnlRNNBackwardWeights可接受的最大tensor size仅支持2G bytes,在超过2G bytes的规模下会计算错误或coredump。
v1.20.1¶
新增接口或弃用¶
无。
特性变更¶
无。
修复问题¶
修复了算子cnnlRandGenerateMultinomial、cnnlRandGenerateDescreteUniform修改为philox算法后在某些特殊规模下功能问题。
修复了算子cnnlEmbedding_backward在部分规模下的功能问题。
修复了算子cnnlEmbedding_forward在部分规模下的功能问题。
修复了cnnlConvolutionBackwardFilter在590上的功能问题。
修复了cnnlConvolutionForward在590上的精度问题。
修复了在多线程情况下运行CNNL可能存在的随机问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
算子cnnlBatchGatherV2在最低维度特别大,超出12000左右的时候存在功能问题。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSWISH、ActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlHardtanhBackward、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlSparseSoftmaxCrossEntropyWithLogits、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlTransformcnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlIndexPut、cnnlMatMulInference、cnnlBatchMatMulBCast_v2、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerTensorAffine、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlThreshold、cnnlPoisson、cnnlFusedDropout_v2、cnnlRandGenerateUniformInt、cnnlMaximum、cnnlConvolutionForward、cnnlConvolutionBackwardFilter、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateUniform、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlTriIndices、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
CNNL 针对网络中有使用的176个算子进行了tensor num的防呆筛查和修正,其余未在网络中使用的算子状态未知。
已知还存在的防呆问题如下:cnnlBceLoss、cnnlBceWithLogits_v2、cnnlRoiAlignBackward_v2、cnnlRNNBackwardData、cnnlRNNBackwardWeights可接受的最大tensor size仅支持2G bytes,在超过2G bytes的规模下会计算错误或coredump。
v1.20.0¶
新增接口或弃用¶
新增算子:cnnlFloorDiv_v2、cnnlLogicOpNot
特性变更¶
算子性能优化:cnnlRoiAlign_v2、cnnlCopy、cnnlOrgqr、cnnlBceWithLogits、cnnlSplit、cnnlGatherV2、cnnlConvolutionBackwardFilter、cnnlUnique_v2、cnnlWhere_v2、cnnlInterp_v3、cnnlBceLoss、cnnlCTCLoss、cnnlInterpBackward_v2、cnnlIndexSelect、cnnlAdvancedIndex、cnnlUnsortedSegmentSum、cnnlGroupNormForward_v2、cnnlBceLoss。
新增支持BFloat16数据类型的算子:cnnlMatMul_v2、cnnlOptensor、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSHRINK、cnnlActivationMode_t::CNNL_ACTIVATION_SOFTSHRINK。
新增支持large tensor功能的算子:cnnlLayerNormBackward_v2、cnnlBatchMatMulBCast_v2、cnnlStrideBatchMatMul、cnnlBatchNormForwardTraining_v2、cnnlBatchNormForwardInference、cnnlBatchNormBackward_v2、cnnlFrozenBatchNormBackward_v2、cnnlSoftmaxForward、cnnlScatter、cnnlSoftmaxBackward、cnnlNlllossForward、cnnlNlllossBackward、cnnlLayerNormForward、cnnlReduce、cnnlGather。
算子cnnlReduce在reduce_op == CNNL_REDUCE_AND || reduce_op == CNNL_REDUCE_OR模式下新增支持int64数据类型。
cnnlCreate接口支持默认的device,调用cnnlCreate接口前,不再要求必须先调用cnrtSetDevice接口。
cnnlTransform_v2算子支持整型数据类型,解决了之前在int输入下数值较大时存在的精度问题,支持复数乘法。
cnnlRandGenerateNormal、cnnlExponential、cnnlRandGenerateMultinomial、cnnlRandGenerateDescreteUniform支持philix算法。
cnnlOptensor支持复数乘法。
cnnlGroupNormBackward支持输入参数中的
diff_scale和diff_bias为NULL,新增支持CNNL_LAYOUT_NCL。cnnlBitCompute_v2支持int64和uint64数据类型。
cnnlLayerNormBackward_v2在half/bf16输入情况下提高了精度。
cnnlEmbeddingBackward支持结果唯一的特性。
cnnLogicOp支持标量和tensor计算。
增加了cnnlNms_v2的sample。
解决了cnnlNms_v2参数
confidence_threshold的限制。cnnlBincount支持了weight tensor的输入。
裁剪工具解除了对CNPerf的版本依赖。
cnnlTrigonFunctionMode_t::CNNL_TRIGON_TANH支持高精度模式。
cnnlGather解除了
"The shape of input tensor must be same as index tensor"的限制。cnnlScatter解除了
"The shape of src (if it is a tensor) tensor must be same as index tensor"的限制。cnnlTopkTensor和cnnlTopkTensor_v2增加对MLU590的防呆,不能在MLU590上使用这两个接口。
cnnlTopkTensor_v3修改对tensor size的防呆,增强了限制,之前对tensor num超过2GB num进行防呆,修改成tensor size超过
min(INTMAX32, UINT32MAX/sizeof(dtype))进行防呆。cnnlApplyAdam和cnnlBceLossBackward修改防呆,增强了限制,之前对tensor num超过2GB num进行防呆,修改成tensor size超过2GB进行防呆。
cnnlConvolutionForward在MLU590上新增对tensor num大于2GB的防呆。
cnnlCTCLoss增加防呆
max_input_length和max_label_length必须大于等于0,增加了对MLU590 以下平台不支持large tensor的防呆。cnnlReduce新增在
cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX、cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX模式下超过2G num的防呆。cnnlAddN_v2和cnnlMulN增加了对MLU590以下平台不支持large tensor的防呆。
cnnlLogicOp_t::CNNL_LOGIC_OP_NOT新增了不支持tensor和CPU scalar混合输入的防呆。
修复问题¶
修复了算子cnnlDCNForward在half类型下精度低的问题。
修复了算子cnnlMatmul在特定规模下的功能问题。
修复了算子cnnlMatmul在365-D2上的性能回退。
修复了cnnlConvolutionBackwardFilter在570上的功能问题。
修复了cnnlStrideBatchMatMul在部分规模下的功能问题。
新增了cnnlIndexfill_v2,解决了该算子存在的功能问题。
修复了cnnlConvolutionBackwardData在部分规模下的功能问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
以下算子在MLU590上nan/inf 无法和竞品对齐:
cnnlActivationForward在cnnlActivationMode_t::CNNL_ACTIVATION_GELU和cnnlActivationMode_t::CNNL_ACTIVATION_TANH模式下、cnnlActivationBackward在cnnlActivationMode_t::CNNL_ACTIVATION_SILU、cnnlActivationMode_t::CNNL_ACTIVATION_LOGSIGMOID、cnnlActivationMode_t::CNNL_ACTIVATION_ELU_V2、cnnlActivationMode_t::CNNL_ACTIVATION_HARDSWISH、ActivationMode_t::CNNL_ACTIVATION_GELU模式下、cnnlAdaptivePoolingForward、cnnlCropAndResize、cnnlCTCLoss、cnnlCumprod、cnnlErf_v2、cnnlGridSampleBackward、cnnlKthValue、cnnlLrn、cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlMedian、cnnlTopKTensor_v3、cnnlBceWithLogits、cnnlPow、cnnlGru_v2、cnnlExecFFT、cnnlQR、cnnlBatchNormBackward_v2、cnnlNms_v2、cnnlLrnGrad、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlFocalLossSigmoidForward、cnnlUnique_v2、cnnlBorderAlignForward、cnnlBorderAlignBackward、cnnlInverse、cnnlCummin、cnnlCummax、cnnlCropAndResizeBackwardImage、cnnlLog1p、cnnlPoolingForwardWithIndex、cnnlPoolingIndex、cnnlInstanceNormInference、cnnlDeconvolution、cnnlInterpBackward_v2、cnnlPoolingForward、cnnlPoolingBackward、cnnlMaskZero、cnnlRandGenerateMultinomial_v2、cnnlCustomizedActiveForward_v2、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRMSProp、cnnlSvd、cnnlRNNForwardInference、cnnlGroupNormForward_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlConvolutionBackwardData、cnnlDeconvolutionInference、cnnlHardtanhBackward、cnnlSoftsignGrad、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlAdaptivePoolingBackward、cnnlApplyAdadelta、cnnlApplyAdaMax、cnnlCarafeBackward、cnnlClip_v2、cnnlFusedOpsExecute、cnnlInstanceNormForward、cnnlInstanceNormBackward、cnnlSparseSoftmaxCrossEntropyWithLogits、cnnlReduce在cnnlReduceOp_t::CNNL_REDUCE_MIN_LAST_INDEX和cnnlReduceOp_t::CNNL_REDUCE_MAX_LAST_INDEX模式下。
以下算子在int输入情况下当输入值超出[\(-2 ^{23}\), \(2 ^{23}\)]范围时存在精度问题:
cnnlCummax、cnnlCummin、cnnlFractionalMaxPoolForward、cnnlAdaptivePoolingBackward、cnnlBiasAdd、cnnlTransformcnnlHistc、cnnlBincount、cnnlTopKTensor_v3、cnnlClip_v2、cnnlUnpoolForward、cnnlUnpoolBackward、cnnlSparseSoftmaxCrossEntropyWithLogits_v2、cnnlIndexPut、cnnlMatMulInference、cnnlBatchMatMulBCast_v2、cnnlReduce、cnnlTrace、cnnlExecFFT、cnnlFakeQuantizePerTensorAffine、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlBucketize、cnnlThreshold、cnnlPoisson、cnnlFusedDropout_v2、cnnlRandGenerateUniformInt、cnnlMaximum、cnnlConvolutionForward、cnnlConvolutionBackwardFilter、cnnlRandGenerateMultinomial、cnnlRandGenerateNormal、cnnlRandGenerateTruncatedNormal、cnnlRandGenerateUniform、cnnlLogicOp、cnnlBorderAlignForward、cnnlCycleOp、cnnlScatterRef、cnnlTriIndices、cnnlUnique、cnnlBorderAlignBackward、cnnlDCNBackwardData。
CNNL 针对网络中有使用的176个算子进行了tensor num的防呆筛查和修正,其余未在网络中使用的算子状态未知。
已知还存在的防呆问题如下:cnnlBceLoss、cnnlBceWithLogits_v2、cnnlRoiAlignBackward_v2、cnnlRNNBackwardData、cnnlRNNBackwardWeights可接受的最大tensor size仅支持2G bytes,在超过2G bytes的规模下会计算错误或coredump。
cnnlRandGenerateMultinomial、cnnlRandGenerateDescreteUniform修改为philox算法后在某些特殊规模下可能有功能问题
v1.19.1¶
新增接口或弃用¶
无。
特性变更¶
无。
已修复问题¶
修复了算子cnnlComplexAbs输入为较大数值时计算错误的问题。
修复了算子cnnlConvolutionForward不完善的large tensor防呆问题。
修复了算子cnnlConvolutionForward计算workspace_size错误的问题。
修复了算子cnnlConvolutionForward在部分规模下core dump的问题。
修复了算子cnnlConvolutionForward部分规模下非对称量化模式的精度问题。
修复了算子cnnlDCNForward在部分规模下精度不足的问题。
修复了算子cnnlPow在部分规模下计算错误的问题。
修复了算子cnnlBatchMatMulBCast在部分规模下性能下降的问题。
修复了算子cnnlMatmul待废弃接口在部分规模下core dump的问题。
修复了算子cnnlSign在复数输入为0时计算错误的问题。
修复了算子cnnlGroupNormForward在部分规模下core dump的问题。
修复了算子cnnlBatchMatMulBCast误报防呆的问题
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小一些。
v1.19.0¶
新增接口或弃用¶
新增算子:cnnlPolar、cnnlUniqueConsecutive
特性变更¶
算子性能优化:cnnlCTCLoss、cnnlInterp、cnnlCumsum、cnnlMatmul、cnnlConcat、cnnlUnique、cnnlDCNForward、cnnlDCNBackwardData、cnnlScatter。
新增支持BFloat16数据类型的算子:cnnlCast、cnnlConcat、cnnlStridedSlice、cnnlEmbeddingForward、cnnlExpand、cnnlRandomNormal、cnnlFusedDropout、cnnlFill、cnnlMasked、cnnlIndexPut、cnnlPad、cnnlMatmul、cnnlDCNForward、cnnlDCNBackwardData、cnnlReduce、cnnlTransform、cnnlBatchMatMulBCast_v2、cnnlLayerNormForward、cnnlLayerNormBackward。
算子cnnlPow新增支持输入参数为CPU端标量。
算子cnnlCTCLoss新增支持large tensor功能。
算子cnnlSign新增支持复数类型输入。
新增硬件支持MLU570、MLU580。
已修复问题¶
修复了算子cnnlUnique部分规模下core dump问题。
修复了算子cnnlConvolutionBackwardData在浮点输入且量化参数无效时的精度问题。
修复了算子cnnlActivationForward在GELU模式下与框架默认行为精度不一致的问题。
修复了算子cnnlNllLossForward在部分规模下core dump的问题。
修复了算子cnnlOpTensor在CE3226上部分规模计算错误的问题。
修复了算子cnnlComplexAbs输入为较大数值时计算错误的问题。
修复了cnnl裁剪工具裁剪失败的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化存在精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小。
v1.18.1¶
新增接口或弃用¶
无。
特性变更¶
算子cnnlUnique优化了部分场景下的性能。
已修复问题¶
修复了算子cnnlSoftplusBackward GEN_CASE生成参数不对的问题。
修复了算子cnnlMatMulInference workspace使用错误的问题。
修复了算子cnnlTranspose非法内存访问的问题。
修复了算子cnnlAsStridedBackward部分场景下core dump的问题。
修复了算子cnnlGru内存异常的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlActivationForward在GELU模式下与框架默认行为精度不一致。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小一些。
v1.18.0¶
新增接口或弃用¶
无。
特性变更¶
算子性能优化:cnnlBatchMatmulBCast、cnnlIndexPut。
算子cnnlBatchGatherV2、cnnlTranspose、cnnlAxpby:在MLU590平台上支持tensor num大于2G的特性。
算子cnnlNllLossForward:解除了对
target_value的规模限制、增加对index为-1的device侧防呆。
已修复问题¶
修复了算子cnnlGatherNd内存泄漏的问题。
修复了算子cnnlPow、cnnlFloorMod计算NaN/Inf测例出错的问题。
修复了算子cnnlReduce在max和min模式下计算NaN/Inf测例出错的问题。
修复了算子cnnlTranspose、cnnlMatMulInference、cnnlConvolutionForward性能下降的问题。
修复了算子cnnlSelectV2在某些规模下计算错误的问题。
修复了算子cnnlOpTensor在非对称数据类型下计算错误的问题。
修复了算子cnnlUnique在
dim参数为0维度且不等于1的场景的防呆问题。修复了算子cnnlScatterNd、cnnlGatherV2地址不对齐导致core dump的问题。
修复了算子cnnlInterp在nearest模式下的精度问题。
算子cnnlNllLossForward:修复了防呆处理不当问题,解除了target_value不能为ignore_index的限制。
修复了算子cnnlMatMul部分规模下的精度问题。
修复了算子cnnlErfinv防呆问题。
修复了算子cnnlMatMulInference workspace相关的bug。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数
--whole-archive(-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
算子cnnlActivationForward在GELU模式下与框架默认行为精度不一致。
算子cnnlConvolutionForward在MLU590平台上depthwise模式下,支持的规模范围比之前版本小一些。
v1.17.1¶
新增接口或弃用¶
无。
特性变更¶
新增支持 x86_64 kylinv10 系统。
算子性能优化:cnnlUnique、cnnlCumsum、cnnlCummax、cnnlCummin。
完善算子防呆:cnnlTriIndices、cnnlBatch2spaceNd_v2、cnnlSpace2batchNd_v2。
已修复问题¶
修复了cnnlActivationBackward算子在GELU模式下性能下降的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs、cnnlPow在输入存在NaN/Inf时存在精度问题。
cnnlNlllossForward、cnnlNlllossBackward算子对于不在[0, C-1]范围内、但等于ignore_index的target_value存在限制和防呆。
cnnlActivationForward算子在GELU模式下与框架默认行为精度不一致。
v1.17.0¶
新增接口或弃用¶
新增算子:cnnlOrgqr、cnnlExpm1、cnnlErfinv、cnnlTriIndices、cnnlTrace、cnnlMatrixDiag、cnnlBincount、cnnlBucketize、cnnlCross、cnnlDynamicPartition。
新增接口cnnlSetGrepDescriptor_v4,相比于cnnlSetGrepDescriptor_v3,参数begin和size从int32_t替换为int64_t,支持的数值范围更大。
新增接口cnnlGroupNormForward_v3,相比于cnnlGroupNormForward_v2,新增可选输出saved_mean、saved_rstd。
弃用接口:cnnlPointsInBoxes、cnnlBorderAlignForward、cnnlDeformRoiPoolBackward、cnnlDeformRoiPoolForward、cnnlRoiAlignRotatedBackward、cnnlRoiAlignRotatedForward、cnnlPsamaskBackward、cnnlPsamaskForward、cnnlTinShiftBackward、cnnlTinShiftForward、cnnlFocalLossSigmoidBackward、cnnlFocalLossSigmoidForward、cnnlCarafeBackward、cnnlCarafeForward、cnnlDestroyCarafeDescriptor、cnnlSetCarafeDescriptor、cnnlCreateCarafeDescriptor、cnnlBoxIouRotated、cnnlBboxOverlaps。以上算子在寒武纪 BANGC OPS V0.6.0 及更高版本中有相同算法功能算子可替代。
弃用接口:cnnlBatchNormForwardTraining、cnnlBatchNormForwardTrainingV2、cnnlBatchNormBackward、cnnlBatchNormBackwardV2、cnnlGroupNormForward、cnnlL2Loss、cnnlLayerNormBackward、cnnlTopKTensor、cnnlTopKTensor_v2、cnnlSyncBatchNormStats、cnnlSyncBatchnormBackwardReduce、cnnlMSELoss、cnnlFrozenBatchNormBackward、cnnlFrozenBatchNormBackwardV2,可替换接口见《Cambricon CNNL Developer Guide》的 Deprecated APIs 章节。
特性变更¶
对不支持tensor维度乘积大于2G的算子统一增加防呆检查。此外,若将CNNL_CHECK_DIM_SIZE设置为true,则仅检查tensor单维度大于2G的情况,单维度大于2G的检查仅在用户使用cnnlSetTensorDescriptor_v2接口时有意义。
优化以下算子在部分规模下的性能:cnnlActivationForward、cnnlActivationBackward、cnnlStrideBatchMatMul、cnnlBatchMatmulBCast、cnnlRNNTLoss、cnnlScatterNd_v2、cnnlTranspose_v2、cnnlIm2col、cnnlMatmulEx、cnnlReduce、cnnlConvolutionForward、cnnlCopy、cnnlMatmulInference、cnnlOneHot、cnnlOpTensor、cnnlNms_v2、cnnlCummin、cnnlCummax、cnnlGatherV2、cnnlNlllossForward、cnnlLayerNormForward、cnnlMatmul_v2、cnnlAdvancedIndex、cnnlDet、cnnlIndexPut、cnnlRoiAlignForward、cnnlFractionalMaxPoolForward。
解除以下算子在MLU590上tensor维度乘积大于2G以及单维度大于2G的限制:cnnlGather、cnnlGatherNd、cnnlGrep、cnnlApplyProximalAdagrad、cnnlIsInf、cnnlAddcmul、cnnlRandomMultinomial、cnnlPow、cnnlAddcdiv。
以下算子新增支持1V平台功能:cnnlSpace2Batch、cnnlDCNForward、cnnlIndexAdd、cnnlThreshold。
对以下接口增加不支持MLU590平台的防呆检查与限制说明:cnnlBatchNormForwardTraining、cnnlBatchNormBackward、cnnlGroupNormForward、cnnlL2Loss、cnnlLayerNormBackward、cnnlTopKTensor、cnnlTopKTensor_v2、cnnlSyncBatchNormStats、cnnlSyncBatchnormBackwardReduce、cnnlMSELoss、cnnlFrozenBatchNormBackward。
cnnlStrideBatchMatMul、cnnlBatchMatmulBCast_v2算子参数alpha、beta的计算精度与参数compute_type保持一致。
cnnlNumTrue和cnnlWhere算子新增支持输入为uint8_t、int8、int16数据类型。
cnnlGroupNormForward_v3算子新增可选saved_mean、saved_rstd输出。
cnnlNms_v2算子新增支持confidence为half数据类型、且boxes为float数据类型的组合。
cnnlExponential算子支持参数lambda等于0时输出全inf。
cnnlCTCLoss算子支持blank_id不等于0的情况。
CNNL提供动态裁剪功能,根据用户程序实际运行的cnnl接口名及kernel符号,裁剪出对应的CNNL动态库。裁剪流程分为两步:(1) 在CE3226或1V,使用cnnl_trace_tool运行用户可执行程序,生成含有cnnl api和kernel符号的cnnl trace文件; (2) 在编译服务器,使用cnnl_crop_tool,将cnnl trace文件作为输入,指定对应版本的cnnl静态库文件libcnnl.a和编译器路径,输出裁剪后的 libcnnl.so。
已修复问题¶
修复了cnnlBatchMatmulBCast算子在量化融合情况下比非融合情况性能差的问题。
修复了cnnlGather和cnnlScatter算子在输入的设备端地址非64对齐情况下计算错误的问题。
修复了cnnlIndexPut算子在部分规模下计算错误的问题。
修复了cnnlIndexFill对uint8类型tensor填充-1时计算错误的问题。
修复了cnnlInterp算子在部分规模下计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlMatrixDiag、cnnlComplexAbs在输入存在NaN/Inf时存在精度问题。
cnnlNlllossForward、cnnlNlllossBackward算子对于不在[0, C-1]范围内、但等于ignore_index的target_value存在限制和防呆。
v1.16.1¶
新增接口或弃用¶
无。
特性变更¶
算子cnnlRoialignForward优化了部分规模下性能。
算子cnnlIndexPut在MLU370平台上优化了部分规模下的性能。
算子cnnlRnntLoss优化了部分规模下的性能。
算子cnnlGatherNd在MLU590平台上支持维度乘积大于2G的功能。
已修复问题¶
修复了算子cnnlRandGenerateMultinomial在MLU590平台上维度乘积大于2G时的精度问题。
修复了算子cnnlUnsortedSegmentSum性能下降的问题。
修复了算子cnnlDiv在MLU300平台上性能下降的问题。
修复了算子cnnlBiasAddBackward_v2防呆报错问题。
修复了算子cnnlCopy精度异常问题。
修复了算子cnnlIndexPut在所有输入的shape都是1时的逻辑异常问题。
修复了算子cnnlAssignAdd和cnnlAssignSub在手册中对alpha和beta描述缺失的问题。
修复了算子cnnlRnntLoss当logit_lengths包含1时core dump的问题。
修复了算子cnnlNllLossForward不正确的防呆报错问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlStdVarMean存在NaN/Inf精度问题。
v1.16.0¶
新增接口或弃用¶
新增cnnlNumTrue_v3接口,不再需要计算非零元素的初始索引,cnnlNumTrue_v2接口待弃用。
新增cnnlGetSeqDataDescriptorPositionAndScale接口,用来获取数据块里面的量化参数。
新增cnnlSetTensorDescriptor_v2、cnnlSetGroupTensorDescriptors_v2、cnnlSetTensorDescriptorEx_v2、cnnlSetTensorDescriptorDim_v2、cnnlGetTensorDescriptor_v2、cnnlGetTensorDescriptorEx_v2、cnnlSetSeqDataDescriptor_v2、cnnlGetSeqDataDescriptor_v2、cnnlInitTensorSetMemberDescriptor_v2接口:对比原有的接口,dim单维度支持大于2G。
特性变更¶
新增算子cnnlRNNTLoss、cnnlCummin、cnnlCummax、cnnlPdistForward、cnnlPdistBackward、cnnlFractionalMaxPoolForward、cnnlFakeQuantizePerTensorAffine、cnnlExponential、cnnlFakeQuantizePerChannelAffine、cnnlSearchSorted、cnnlStdVarMean。
算子cnnlBatchMatMul支持Tensor Stride特性。
下面算子在部分规模下性能有提升:cnnlStrideBatchMatMul、cnnlRoiAlignForward、cnnlTranspose、cnnlDCNBackwardWeight、cnnlDCNForward、cnnlScatterNd、cnnlTopKTensor、cnnlBatchMatMulBCast、cnnlAdvancedIndex、cnnlConvolutionForward、cnnlDCNBackwardData、cnnlMatmul、cnnlSelect、cnnlNms、cnnlBitCompute_v2、cnnlIndexPut、cnnlInterpBackward、cnnlCopy、cnnlStridedSliceBp、cnnlSoftmaxForward、cnnlDiv、cnnlLrn、cnnlBatchnormForward、cnnlBatchnormBackward、cnnlMasked。
下面算子新增支持1V:cnnlAbs、cnnlAdvancedIndex、cnnlArange、cnnlAsStrided、cnnlAtan2、cnnlBatch2Space、cnnlBitComputeV2、cnnlCosineSimilarity、cnnlCropAndResize、cnnlCummax、cnnlCummin、cnnlDiag、cnnlDivnonan、cnnlEmbeddingForward、cnnlErf、cnnlExp、cnnlFloor、cnnlFloorDivTrunc、cnnlFloorMod、cnnlFloorModTrunc、cnnlFusedDropout、cnnlGatherNd、cnnlHardtanh、cnnlIm2Col、cnnlIndexFill、cnnlInverse、cnnlIsFinite、cnnlIsNan、cnnlKthValue、cnnlLayernormForward、cnnlLinspace、cnnlMasked、cnnlMaskzero、cnnlNeg、cnnlNormalize、cnnlRandGenerateMultinomial、cnnlRandomTruncatedNormal、cnnlRandomUniformInt、cnnlReflectionPad2D、cnnlScatter、cnnlScatterNd、cnnlSincos、cnnlSquare、cnnlStdForward、cnnlStdVarMean、cnnlTinShift、cnnlTinShiftBackward、cnnlTri、cnnlTrigon、cnnlVarForward、cnnlWhere。
下面算子在MLU590平台支持维度乘积大于2G的规模:cnnlEmbeddingBag、cnnlConj、cnnlCycleOp、cnnlCast、cnnlScatterNd、cnnlTranspose、cnnlMasked、cnnlOneHot、cnnlReduce、cnnlOpTensor、cnnlAngle、cnnlCopy、cnnlUnaryOp、cnnlBinaryOp、cnnlTensorStrideProcess、cnnlEmbeddingForward、cnnlIndexFill、cnnlShuffleChannel、cnnlTensorStrideProcess、cnnlUnsortedSegmentSum、cnnlApplyAdaGradV2、cnnlHardtanh、cnnlStrideBatchMatMul、cnnlSelect、cnnlMatrixBandPart、cnnlPow、cnnlActivationForward。
算子cnnlPoolingBackward在MLU370平台上,half类型下最大kernel规模为kh*kw=163838,float类型下最大kernel规模为kh*kw=81918。
算子cnnlUnique支持int64数据类型。
算子cnnlNegTensor输入支持int32数据类型。
算子cnnlDiv提升了部分规模的精度。
算子cnnlCumSum完善了整型支持。
算子cnnlExpand解除了规模限制。
算子cnnlAbs支持int32数据类型。
算子cnnlNllossForward对target中存在负数的场景增加了防呆。
已修复问题¶
修复了下面算子在MLU590平台上NaN/Inf输入下存在的问题:cnnlConvolutionBackwardFilter、cnnlActivation、cnnlGradientDescent、AdaptivePoolingForward、cnnlCropAndResize、cnnlActivationBackward。
修复了cnnlConvolutionBackwardFilter部分测例性能下降的问题。
修复了cnnlConvolutionForward部分测例性能下降的问题。
修复了cnnlDCNBackwardWeight防呆检查缺少逗号的问题。
修复了下面算子gencase生成错误的问题:cnnlInTopK、cnnlLog1p、cnnlCumProd、cnnlGatherTree、cnnlExecFFT、cnnlConvolutionForward、cnnlApplyProximalAdagrad、cnnlBatchnormBackward、cnnlFrozenBatchnormBackward、cnnlActivation、cnnlAdadelta、cnnlThreshold、cnnlThresholdBackward、cnnlReplicationPad2d、cnnlMatMul。
修复了cnnlMasked_v4 FILL_HOST模式Bool类型出错问题。
修复了cnnlAddcDiv性能下降和部分规模精度下降的问题。
修复了cnnlRNNforwardinference接口API描述不完整的问题。
修复了cnnlEmbeddingBagBackward缺少数据类型的防呆以及头文件相关描述不全的问题。
修复了cnnlScatterRef运行时timeout问题。
修复了cnnlBatchMatmul_v2对alpha和beta防呆报错问题。
修复了下面算子内存泄漏的问题:cnnlMasked、cnnlGru、cnnlExecFFT、cnnlIndexPut、cnnlConvolutionForward、cnnlRandGenerateMultinomial、cnnlFusedOpsExecute、cnnlPow、cnnlPown。
修复了下面算子core dump的问题:cnnlUnsortedSegmentSum、cnnlTopK、cnnlMatmul、cnnlPointsInBoxes、cnnlBatchMatMulBCast、cnnlTopK、cnnlNllLossForward、cnnlMasked、cnnlOneHot。
修复了cnnlGather_v2 地址类型错误的问题。
修复了下面算子部分规模下精度不达标的问题:cnnlRandom、cnnlConj、cnnlBatchnormBackward、cnnlCumSum、cnnlInstancenormForward、cnnlScatterNd、cnnlSyncBatchNormGatherStatsWithCounts、cnnlConvolutionForward、cnnlBiasAddBackward、cnnlGridSampleForward、cnnlConvolutionBackwardData、cnnlDeconvolution、cnnlErf、cnnlFloor、cnnlCast、cnnlOneHot。
修复了cnnlOpTensor性能下降的问题。
修复了cnnlUnique算子部分场景写越界且计算错误的问题。
修复了cnnlSoftmaxBackward输入half类型时,计算逻辑与框架不对齐的问题。
修复了cnnlAngle接口存在的同步问题。
修复了cnnlIndexPut在indice全空情况下零元素防呆不正确的问题。
修复了cnnlCTCLoss没有处理label为空的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。算子cnnlConvolutionForward在conv3d模式下,非对称量化有精度问题。
算子cnnlStdVarMean存在NaN/Inf精度问题。
v1.15.2¶
新增接口或弃用¶
无。
特性变更¶
算子 cnnlGridSampleForward、cnnlGridSampleBackward 支持 padding=reflection 及 bilinear 模式。
算子 cnnlSelect 支持 large tensor。
部分规模下一些算子的性能进行了提升:cnnlSelect、cnnlBatchNormForwardTraining_v2、cnnlBatchNormBackward、cnnlOpTensor、cnnlmasked、cnnlConvolutionForward、cnnlMatMul、cnnlStrideBatchMatMul。
已修复问题¶
修复 cnnlBatchNormForwardTraining_v2 使用 __sramset 指令后未同步导致的精度越界问题。
修复 cnnlClip 使用 GEN_CASE 模块时配参错误引入 GEN_CASE 结果错误的问题。
修复 cnnlConvolutionForward TF32模式支持不全面导致的精度问题。
修复 cnnlRound half输入类型计算错误问题。
修复 cnnlConvolutionForward 拆分逻辑修改导致的性能下降问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlLogicOp算子对NaN计算逻辑错误的问题。
cnnlDCNForward在NaN和Inf场景下core dump问题。
cnnlPointsInBoxes运行大测例发生core dump。
cnnlNlllossBackward在target包含负值时的core dump问题。
v1.15.1¶
新增接口或弃用¶
无。
特性变更¶
部分规模有性能提升的算子:cnnlConvolutionForward、cnnlBatchNormForward、cnnlBatchNormBackward。
cnnlUnique支持dim参数功能(Pytorch 框架功能)。
已修复问题¶
修复了cnnlMatMulEx因非融合场景处理策略错误导致的性能回退问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlLogicOp算子对NaN计算逻辑错误的问题。
TF32模式下部分算子精度问题。
cnnlDCNForward在NaN和Inf场景下core dump问题。
cnnlPointsInBoxes运行大测例发生core dump。
cnnlNlllossBackward在target包含负值时的core dump问题。
v1.15.0¶
新增接口或弃用¶
新增cnnlAdaptivePoolingForward_v2接口,支持更完备的功能,可取代cnnlAdaptivePoolingForward接口, cnnlAdaptivePoolingForward接口后续版本将被弃用。
特性变更¶
不再支持操作系统Kylin v10。
不再支持硬件MLU290。
新增硬件支持1V,部分算子支持在1V上运行并保证兼容性,如cnnlAddN、cnnlNms等。
新增算子cnnlLogAddExp、cnnlLogAddExp2、cnnlSlogDet、cnnlAngle。
新增以下算子支持large tensor:cnnlAbs、cnnlCast、cnnlCeil、cnnlRound、cnnlDiv、cnnlFilp、cnnlFloorMod、cnnlIsNan、cnnlLog1p、cnnlMaximum、cnnlminimum、cnnlOneHot、cnnlPrelu、cnnlSelect、cnnlcnnlSmoothL1LossForward、cnnlSquare、cnnlThresholdBackward、cnnlThreshold。
算子cnnlConvolutionForward 优化Co=128的情况。
算子cnnlScatterNd、cnnlTranspose、cnnlOpTensor、cnnlReduce、cnnlSelect 性能优化。
算子cnnlGroupnormBackwar解除N维度限制。
算子cnnlAdaptivePoolingForward_v2部分规模较cnnlAdaptivePoolingForward有性能提升。
已修复问题¶
修复了cnnlRandGenerateMultinomial_v2在部分规模下,精度越界问题。
修复了cnnlAddcmul、cnnlAddcdiv因int32_t越界导致的内存分配问题。
修复了cnnlGatherNd由内存踩踏导致的精度越界问题。
修复了cnnlNormalize多次申请空间问题。
修复了cnnlPoolingForward由内存划分错误导致的地址越界问题。
修复了cnnlTranspose性能下降问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlLogicOp算子对NaN计算逻辑错误的问题。
TF32模式下部分算子精度问题。
cnnlDCNForward在NaN和Inf场景下core dump问题。
cnnlPointsInBoxes运行大测例发生coredump。
cnnlNlllossBackward在target包含负值时的coredump问题。
v1.14.2¶
新增接口或弃用¶
无。
特性变更¶
部分规模有性能提升的算子:cnnlConvolutionBackwardFilter、cnnlConvolutionForward。
cnnlBatchMatMulBCast_v2支持输入包含0-element。
cnnlDCNBackwardData功能支持和mmcv框架一致。
cnnlMatMulEx支持TF32模式。
cnnlMatMulDescAttribute_t新增CNNL_MATMUL_CAST_MODE,允许用户显式指定量化模式。
已修复问题¶
修复了cnnlIm2Col算子在MLU370上的bug。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
cnnlRandGenerateTruncatedNormal、cnnlRandGenerateMultinomial_v2、cnnlRandGenerateNormal在MLU590存在偶现的精度越界。
cnnlLogicOp算子对NaN计算逻辑错误的问题。
v1.14.1¶
新增接口或弃用¶
新增cnnlUnique_v2接口,支持更优的性能,可取代cnnlUnique接口, cnnlUnique接口后续版本将被弃用。
特性变更¶
新增算子cnnlNanToNum。
部分规模有性能提升的算子:cnnlConvolutionBackwardFilter、cnnlInterp_v3、cnnlIndexPut、cnnlGatherNd、cnnlInterpBackward_v2、cnnlUnique_v2。
cnnlStrideBatchMatMul新增输入支持lda、ldb、ldc。
在MLU590平台,以下算子扩大了对输入tensor大小的限制,在之前版本,以下算子要求输入输出tensor size总大小小于2G,当前没有这个限制: cnnlexpand。
cnnlInterpBackward_v2增加防呆,当输入元素个数小于 \(2 ^{31} -1\) 报错。
cnnlGridSampleForward支持CNNL_INTERP_NEAREST模式。
cnnlGridSampleBackward支持CNNL_INTERP_NEAREST模式。
已修复问题¶
修复了590硬件上,以下算子1.14.0版本的性能退回问题:cnnlExecFFT、cnnlFloorDivTrunc、cnnlReduce、cnnlAdvancedIndex、cnnlConvolutionBackwardData、cnnlDeconvolution、cnnlCastDataType、cnnlLrnGrad、cnnlCTCLoss、cnnlMatMul_v2、cnnlGru_v2、cnnlSoftplusForward。
修复了cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
cnnlIm2Col算子在370上存在已知bug。
cnnlRandGenerateTruncatedNormal、cnnlRandGenerateMultinomial_v2、cnnlRandGenerateNormal在590存在偶现的精度越界。
cnnlLogicOp算子对NaN计算逻辑错误的问题。
v1.14.0¶
新增接口或弃用¶
新增cnnlEmbeddingBag_v2接口,支持更完备的功能,可取代cnnlEmbeddingBag接口, cnnlEmbeddingBag接口后续版本将被弃用。
特性变更¶
新增硬件支持MLU590。
新增算子cnnlCdistForward、cnnlCdistackward。cnnlEmbeddingBagBackward。
部分规模有性能提升的算子:cnnlBatchMatMulBCast、cnnlSelectV2、cnnlMatMul_v2、cnnlConvolutionBackwardDatacnnlScatter、cnnlAdvancedIndex、cnnlConvolutionBackward、cnnlInstanceNormInference、cnnlDeconvolution、cnnlTranpose_v2、cnnlLayerNormBackward_v2、cnnlBatchNormForwardTraining_v2、cnnlScatterRefi、cnnlCycleOp、cnnlConvolutionForward、cnnlMatMulEx、cnnlGather、cnnlSoftmaxForward_v2、cnnlConvolutionBackwardFilter、cnnlOpTensor、cnnlIndexPut、cnnlSoftplusForward、cnnlSoftmaxBackward、cnnlGru_v2、cnnlLayerNormForward、cnnlGridSampleForward、cnnlPrelu、cnnlShuffleChannel。
cnnlBitCompute_v2的cnnlBitComputeOp_t 新增CNNL_BLEFT_SHIFT_OP_V2和CNNL_BRIGHT_SHIFT_OP_V2,和pytorch1.9的模式对齐。
cnnlBatchMatMulBCast_v2 新增输入支持alpha!=1.0或者和beta!=0.0的情况。
在MLU590平台,以下算子扩大了对输入tensor大小的限制,在之前版本,以下算子要求输入输出tensor size总大小小于2G,当前没有这个限制: cnnlBatchNormForwardTraining_v2、cnnlBatchNormForwardInference、cnnlBatchNormBackward_v2、cnnlScatterRef、cnnlApplyAdaGrad。
cnnlNlllossForward和cnnlNlllossBackward新增支持filter为NULL。
cnnlMatMulEx支持输入k维度为零的输入。
cnnlStrideBatchMatMul支持TF32模式。
cnnlMasked_v4算子新增CNNL_MASKED_FILL_HOST模式,支持传入host端的填充值参数。
cnnlMatMulEx在TF32情况下性能优化。
cnnlStrideBatchMatMul防呆修改:修改stride_a、stride_b、stride_c参数的防呆,其中只要求stride_a和stride_b大于等于0即可,stride_c需要大于等于n维度;修改输入和输出tensor元素个数的防呆:A tensor的元素个数需要大于等于(batche_size-1)stride_a + lda(is_transa ? m : k),B tensor的元素个数需要大于等于(batche_size-1)stride_b + ldb(is_transb ? k : n),C tensor的元素个数需要大于等于(batche_size-1)*stride_c + ldc*m;增加lda、ldb和ldc的防呆, is_transa为true的时候,lda需要大于等于m,false的时候需要大于等于k;is_transb为true的时候,ldb需要大于等于k,false的时候需要大于等于n;ldc需要大于等于n。
cnnlBitCompute_v2新增防呆,CNNL_BLEFT/RIGHT_SHIFT_OP_V2操作不支持bool类型,CNNL_BLEFT/RIGHT_SHIFT_OP_V2操作支持half/float类型。
cnnlSmoothL1LossForward_v2新增防呆,仅支持输入参数x,target和输出参数y必须全部为CNNL_DTYPE_FLOAT和全部为CNNL_DTYPE_HALF数据类型。
cnnlSmoothL1LossBackward_v2新增防呆,仅支持输入参数x,target,dy和输出参数dx必须全部为CNNL_DTYPE_FLOAT和全部为CNNL_DTYPE_HALF数据类型。
cnnlMatMulEx增加防呆,支持通过cnnlMatMulCastMode_t设置量化模式,默认是CNNL_MATMUL_BYPASS_QUANTIZE(MatMulCastMode不使能),一旦使用该功能,必须遵循以下规则:
cnnlMatMulCastMode_t 枚举类型目前支持 CNNL_MATMUL_OFFLINE_SYMMETRIC_QUANTIZE / CNNL_MATMUL_OFFLINE_ASYMMETRIC_QUANTIZE / CNNL_MATMUL_NO_QUANTIZE 三种量化方式。
全浮点输入的情况下必须设置量化属性为 CNNL_MATMUL_NO_QUANTIZE,在定点输入情况下量化属性为CNNL_MATMUL_OFFLINE_SYMMETRIC_QUANTIZE或者CNNL_MATMUL_OFFLINE_ASYMMETRIC_QUANTIZE。
已修复问题¶
修复了在nan/inf输入下存在的功能问题:cnnlFloorDivTrunc、cnnlReduce。
修复了以下算子在之前版本中存在的性能下降问题:cnnlConvolutionBackwardFilter。
修复了cnnlGatherNd算子在特殊case的core dump问题。
修复了cnnlTopKTensor_v3算子在部分规模下,输入值全部相等时候的core dump问题。
修复了cnnlQR由于性能问题部分规模下超时的问题。
已知遗留问题¶
CNNL在MLU590平台相比于CNNLv1.13.2存在性能回退。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
cnnlIm2Col算子在370上存在已知bug。
cnnlRandGenerateTruncatedNormal、cnnlRandGenerateMultinomial_v2、cnnlRandGenerateNormal在590存在偶现的精度越界。
cnnlLogicOp算子对NaN计算逻辑错误的问题。
v1.13.2¶
新增接口或弃用¶
无。
特性变更¶
cnnlGrep算子解除参数防呆,解除输入输出不支持bool类型的防呆限制。
cnnlRNNBackwardWeights算子优化了部分规模的性能。
cnnlFusedOpsExecute算子优化了部分规模的性能。
已修复问题¶
修复了cnnlNlllossBackward算子在大batch下执行失败的问题。
修复了cnnlSmoothL1LossForward算子在部分规模下计算错误的问题。
修复了cnnlMasked_v4算子在输入为0元素时检查错误的问题。
修复了cnnlConvolutionForward算子在部分规模下因计算workspace大小错误出现运行失败的问题。
修复了cnnlConvolutionBackwardFilter算子在部分规模下运行失败的问题。
修复了cnnlConvolutionBackwardData算子在layout为NCHW模式下部分规模下计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
在不支持浮点conv的MLU平台上,cnnlConvolutionBackwardData算子的depthwise模式下存在部分纯浮点的规模不支持但未正确防呆,导致计算结果错误。
cnnlLogicOp算子对NaN计算逻辑错误的问题。
v1.13.1¶
新增接口或弃用¶
无。
特性变更¶
cnnlActivationforward算子新增CNNL_ACTIVATION_LOGSIGMOID模式。
cnnlActivationbackward算子新增CNNL_ACTIVATION_LOGSIGMOID模式, 以及CNNL_ACTIVATION_HARDSIGMOID模式新增支持diff_y和y做为输入。
cnnlSoftmaxforward算子新增支持输入数据类型为half、输出数据类型为float的组合。
cnnlOpTensor算子新增支持输入输出参数a-b-c-alpha-beta的7种数据类型组合,分别为float32-float16-float32-float32-float32、float16-float32-float32-float32-float32、float16-float32-float16-float32-float32、float32-int32-float32-float32-float32、int32-float32-float32-float32-float32、float16-int32-float16-float16-float16、int32-float16-float16-float16-float16。
cnnlConvolutionBackwardData算子新增支持depthwiseConv2d下dilation > 1的功能。
cnnlInterp算子新增优化了linear模式下部分规模的性能。
已修复问题¶
修复了cnnlOptensor算子使用workspace异常问题。
修复了cnnlSmoothL1LossForward_v2算子使用workspace异常问题。
修复了cnnlSmoothL1LossBackward_v2算子使用workspace异常问题。
修复了cnnlConvolutionForward算子depthwise下部分规模core dump问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
在不支持浮点conv的MLU平台上,cnnlConvolutionBackwardData算子的depthwise模式下存在部分纯浮点的规模不支持但未正确防呆,导致计算结果错误。
cnnlNlllossBackward算子在大batch下执行失败的问题。
cnnlSmoothL1LossForward算子在部分规模下计算错误的问题。
v1.13.0¶
新增接口或弃用¶
新增cnnlMatMulEx接口,支持前后转数的量化融合功能、后融合bias功能和后融合激活功能等,可取代cnnlMatmulInference_v2接口, cnnlMatmulInference_v2接口后续版本将被弃用。
新增cnnlMasked_v4接口,相比于cnnlMasked_v3接口增加scale参数,对应新增CNNL_MASKED_SCALE模式。对应torch框架的masked_scale算子。
新增cnnlSetNmsDescriptor_v5接口,相比于cnnlSetNmsDescriptor_v4接口增加pad_to_max_output_size参数,支持输出是否需要补0至max_output_size功能。cnnlSetNmsDescriptor、cnnlSetNmsDescriptor_v2、cnnlSetNmsDescriptor_v3、cnnlSetNmsDescriptor_v4接口后续版本将被弃用。
新增cnnlSmoothL1LossForward_v2接口,相比于cnnlSmoothL1LossForkward接口增加beta和workspace、workspace_size参数。用户先调用cnnlGetSmoothL1LossForwardWorkspaceSize接口获取workspace、workspace_size。cnnlSmoothL1LossForward接口后续版本将被弃用。
新增cnnlSmoothL1LossBackward_v2接口,相比于cnnlSmoothL1LossBackward接口增加beta和workspace、workspace_size参数。用户先调用cnnlGetSmoothL1LossBackwardWorkspaceSize接口获取workspace、workspace_size。cnnlSmoothL1LossBackward接口后续版本将被弃用。
特性变更¶
支持新的操作系统Kylin v10。
cnnlBatchMatMulBCast_v2算子新增支持前后转数的量化融合功能。
cnnlCTCLoss算子新增支持norm_mode-reduce_mode-zero_infinity为CNNL_NONE_NORMALIZATION-CNNL_REDUCE_NONE-CNNL_ZERO_INFINITY的模式组合,对应支持paddlepaddle框架中warpctc算子。
cnnlLogicOp算子新增支持int32-float-bool、float-int32-bool的2种输入输出类型组合。
cnnlGroupNormBackward算子新增支持MLU200系列平台。
cnnlReduce算子新增支持indices为int32的数据类型。
cnnlIndexCopy算子新增index为int32的数据类型。
cnnlSoftmaxBackward算子新增支持输入数据类型为float、输出数据类型为half的组合。
cnnlConvolutionForward算子新增支持depthwiseConv2d下dilation > 1的功能。
cnnlConvolutionBackwardFilter算子新增支持输入layout为NHWC和权值layout为NCHW的交叉摆数。
cnnlOpTensor算子新增支持输入输出参数a-b-c-alpha-beta的7种数据类型组合,分别为float32-float16-float32-float32-float32、float16-float32-float32-float32-float32、float16-float32-float16-float32-float32、float32-int32-float32-float32-float32、int32-float32-float32-float32-float32、float16-int32-float16-float16-float16、int32-float16-float16-float16-float16.
cnnlOpTensor算子优化了部分规模下的性能。
cnnlEmbeddingForward算子优化了部分规模下的性能。
cnnlRNNForwardInference算子优化了部分规模下的性能。
cnnlConvolutionForward算子新增优化了部分规模下的性能。
cnnlConvolutionBackwardFilter算子优化了部分规模下的性能。
cnnlConvolutionBackwardData算子优化了部分规模下的性能。
cnnlMatMulInference算子优化了部分规模下的性能。
cnnlSoftmaxForward、cnnlSoftmaxForward_v2优化了half类型batch size为1场景下CNNL_SOFTMAX_MODE_LOW_DIMENSION模式下部分规模的性能。
cnnlMatMul、cnnlMatMul_v2算子优化了部分规模下的性能,cnnlMatMul_v2算子优化了alpha不为1,或beta不为0时部分规模下的性能。
cnnlIm2Col算子删除输入参数ci不大于65535的限制。
cnnlSmoothL1LossForward算子和cnnlSmoothL1LossBackward算子新增参数beta为非负的防呆。
cnnlQuantizeV1算子将输入参数scale的支持范围由(0,2)扩充到了(0,2)和(-2, 0)。
已修复问题¶
修复了cnnlMatmulInference_v2部分数据类型组合不支持的问题。
修复了cnnlGridSampleForward算子在输入数据类型为half时存在精度不足的问题。
修复了cnnlOpTensor算子在部分规模下出现的计算超时问题。
修复了cnnlConvolutionBackwardData算子在部分规模下出现的计算错误问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
在不支持浮点conv的MLU平台上,cnnlConvolutionBackwardData算子的depthwise模式下存在部分纯浮点的规模不支持但未正确防呆,导致计算结果错误。
v1.12.2¶
新增接口或弃用¶
弃用cnnlBatchMatMul接口,建议使用cnnlBatchMatMulBCast_v2替换。
特性变更¶
cnnlRNNForwardInference算子在部分规模下有性能提升。
cnnlReduce算子在CNNL_REDUCE_ADD模式下支持alpha参数不等于1或beta参数不等于0的情况。
已修复问题¶
修复cnnlConvolutionBackwardData以及cnnlDeconvolution算子在部分规模下计算错误的问题。
修复cnnlRandomUniform算子在部分规模下随机出现精度不足的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatmulInference_v2部分数据类型组合暂不支持,在后续的版本支持。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
cnnlGridSampleForward算子在输入数据类型为half时存在精度不足的问题。
v1.12.1¶
新增接口或弃用¶
新增算子cnnlGroupNormBackward。该算子当前版本仅支持MLU370平台,并且x_desc存在规模限制:batch维度与channel维度的乘积要求小于40960,并且height维度与width维度的乘积要求小于40960。
特性变更¶
cnnlReduce算子在CNNL_REDUCE_AVG、CNNL_REDUCE_NORM1、CNNL_REDUCE_NORM2、CNNL_REDUCE_NORMP、CNNL_REDUCE_MUL模式下支持alpha参数不等于1或beta参数不等于0的情况。
cnnlGru_v2增加参数防呆,当cnnlGruDescriptor_t中的linear_before_reset参数为false时,filter_desc只支持为float或half数据类型。
cnnlExecFFT算子解除了输入或输出stride参数等于0的限制。
已修复问题¶
修复cnnlGridSampleForward算子在grid中元素为Inf时计算错误的问题,修复后对应output为0。
修复cnnlMatrixBandPart在输入为NaN/INF时的精度问题。
修复cnnlTranspose算子在部分规模下计算错误的问题。
修复cnnlExecFFT算子在half数据类型下精度较低的问题。
修复cnnlConvolutionBackwardFilter算子在CNNL_LAYOUT_NDHWC模式,且N、D、H维度都等于1时计算错误的问题。
修复cnnlConvolutionForward在部分规模下计算错误的问题。
修复cnnlTopKTensor算子在输入数据类型为half且输入数据中存在大于65472或小于-65472时出现计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatmulInference_v2部分数据类型组合暂不支持,在后续的版本支持。
cnnlTopKTensor算子在输入数据类型为half且输入数据中存在大于65472或小于-65472时出现计算错误。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
v1.12.0¶
新增接口或弃用¶
新增算子cnnlCumprod、cnnlGridSampleBackward、cnnlCol2Im。
新增cnnlSetGrepDescriptor_v3接口,相比于cnnlSetGrepDescriptor_v2接口直接保存host指针的方式内存安全性更高。cnnlSetGrepDescriptor_v2接口后续版本将被弃用。
新增cnnlGetBatchMatMulAlgoHeuristic接口,用于确定batch matmul算法、计算workspace大小,并保存在cnnlMatMulHeuristicResult_t结构体中。
新增cnnlGetBatchMatMulHeuristicResult接口,用于获取保存在cnnlMatMulHeuristicResult_t结构体里的算法、workspace大小信息。用户先调用cnnlGetBatchMatMulAlgoHeuristic接口,再调用cnnlGetBatchMatMulHeuristicResult接口,可代替原有cnnlGetBatchMatMulBCastWorkspaceSize接口的作用,即获取workspace大小给cnnlBatchMatMulBCast算子使用。cnnlGetBatchMatMulBCastWorkspaceSize接口后续版本将被弃用。
cnnlMatMul、cnnlGetMatMulWorkspaceSize接口后续版本将被弃用,可使用cnnlGetMatMulAlgoHeuristic、cnnlGetMatMulHeuristicResult、cnnlMatMul_v2接口替换,部分规模下性能更好。
特性变更¶
cnnlReduce算子在CNNL_REDUCE_NORM1和CNNL_REDUCE_NORM2模式下新增支持了alpha不为1,或beta不为0的情况。
cnnlInterp算子新增支持cnnlInterpCoordinateTransformationMode_t为CNNL_INTERP_COORDINATE_TRANSFORMATION_ALGO5、CNNL_INTERP_COORDINATE_TRANSFORMATION_ALGO6类型,分别对应TensorFlow框架中[align_corners, align_center]为[false, true]、[true, false]的情况。相比于CNNL_INTERP_COORDINATE_TRANSFORMATION_ALGO0、CNNL_INTERP_COORDINATE_TRANSFORMATION_ALGO2(即PyTorch框架1.6版本对应[align_corners, align_center]为[false, true]、[true, false]的情况),在output_size等于1时的计算方法不同。
cnnlGru_v2算子新增支持clip、linear_before_reset参数、activation_zr参数可选,可通过cnnlSetGruDescriptor_v2接口进行设置,具体参数含义和限制可参考《Cambricon CNNL Developer Guide》中的接口描述。
cnnlUnpoolBackward算子将grad的规模限制从 grad_size == (output_size - 1) * stride + kernel - padding * 2 扩展为 (output_size - 1) * stride + kernel - padding * 2 - stride < grad_size < (output_size - 1) * stride + kernel - padding * 2 + stride,在原限制上放宽了±stride。该算子的index参数从cnnlPoolingForwardWithIndex中得到,使用时需要保证该算子的grad参数和cnnlPoolingForwardWithIndex算子的input规模一致。
cnnlUnpoolForward算子将output的规模限制从 output_size = (input_size - 1) * stride + kernel - 2 * padding 扩展为 (input_size - 1) * stride + kernel - 2 * padding - stride < output_size < (input_size - 1) * stride + kernel - 2 * padding + stride,在原限制上放宽了±stride。该算子的index参数从cnnlPoolingForwardWithIndex中得到,使用时需要保证该算子的output参数和cnnlPoolingForwardWithIndex算子的input规模一致。
cnnlFFTPlan算子在参数n为2的幂次方时支持输入输出为half数据类型。
cnnlMatMul、cnnlMatMul_v2算子优化了alpha不为1,或beta不为0时部分规模下的性能。
cnnlConvolutionBackwardFilter算子优化了部分规模下的性能。
cnnlConvolutionForward算子优化了部分规模下的性能。
cnnlConvolutionBackwardData算子优化了部分规模下的性能。
cnnlSoftmaxForward算子优化了部分规模下的性能。
cnnlNlllossBackward算子优化了CNNL_REDUCTION_NONE模式下的性能。
cnnlCast算子优化了CNNL_CAST_HALF_TO_FLOAT_INF模式下的性能。
cnnlGrep算子优化了部分规模下的性能。
cnnlInterpBackward算子优化了CNNL_INTERP_BILINEAR模式部分规模下的性能。
cnnlGrep算子新增对输入输出数据类型的防呆检查,当前支持uint8、int8、uint16、int16、uint32、int32、half、float数据类型。
cnnlShuffleChannel算子新增对输入输出数据类型的防呆检查,当前支持bool、uint8、int8、uint16、int16、uint32、int32、half、float数据类型。新增对输入规模防呆检查,group参数对应输入维度大小与数据类型位宽的乘积不能超过限定值。
已修复问题¶
修复了cnnlTopKTensor_v3算子在输入数据中包含NaN或Inf时出现计算超时的问题。
修复了cnnlFill算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
修复了cnnlConvolutionBackwardFilter算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
修复了cnnlReduce算子在CNNL_REDUCE_NORM2模式下相比于CNNL V1.10.5版本出现精度下降的问题。
修复了cnnlCeil算子当输入中存在大于-1小于0的数时输出为+0而非-0的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF时可能存在精度问题。
cnnlMatmulInference_v2部分数据类型组合暂不支持,在后续的版本支持。
cnnlTopKTensor算子在输入数据类型为half且输入数据中存在大于65472或小于-65472时出现计算错误。
cnnlBatchMatmul算子在输入维度乘积大于 \(2 ^{31}\) 时出现计算错误的问题。
cnnlNormalize算子在输入数据类型为half情况下有精度较差问题。
v1.11.1¶
新增接口或弃用¶
无
特性变更¶
cnnlTranspose部分场景下性能提升。
已修复问题¶
修复了cnnlBatchNormForward、cnnlBatchNormBackward和cnnlFrozenBatchNormBackward运行大输入规模出错问题。
修复了cnnlDivNoNan Nan/Inf计算出错问题。
修复了cnnlHistc部分规模精度越界问题。
修复了cnnlReplicationPad2d地址偏移异常问题。
修复了cnnlMatmulInference_v2部分规模和数据类型组合不支持问题。
修复了cnnlActivationForward在CNNL_ACTIVATION_GELU模式下计算出错问题。
修复了cnnlNms使用workspace异常问题。
修复了cnnlMultiHeadAttnBackwardData算子精度越界的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF时可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果和pytorch对齐,与tensorflow CPU结果不一致。
v1.11.0¶
新增接口或弃用¶
新增算子cnnlIsInf、cnnlIm2Col。
新增cnnlIsInfMode_t数据类型和cnnlGetIsinfWorkspaceSize接口,作为cnnlIsInf的前置接口配合使用,详细使用方法参考《Cambricon CNNL Developer Guide》中cnnlIsInf小节。
新增cnnlClip_v2接口,相比cnnlClip支持通过pointer_mode参数设置host端或者device端指针的最大值或者最小值。
新增cnnlMatMul_v2接口,相比cnnlMatmul支持使用workspace size,通过algo传递算法信息,通过matmul_desc传递CNNL_MATMUL_DESC_TRANSA等参数。
新增cnnlLayerNormBackward_v2接口,相比cnnlLayerNormBackward需要用户分配一些额外的workspace作为输入参数。
新增cnnlSyncBatchNormStats_v2接口,相比cnnlSyncBatchNormStats需要用户分配一些额外的workspace作为输入参数。
新增cnnlBatchNormBackward_v2接口,相比cnnlBatchNormBackward融合了add操作和relu操作。
新增cnnlSyncBatchnormBackwardReduce_v2接口,相比cnnlSyncBatchnormBackwardReduce允许用户分配一些workspace作为输入参数。
新增cnnlFrozenBatchNormBackward_v2接口,相比cnnlFrozenBatchNormBackward融合了add操作和relu操作。
新增cnnlBatchMatMulBCast_v2接口,相比cnnlBatchMatMulBCast支持通过bmm_bcast_desc传递CNNL_MATMUL_DESC_TRANSA等参数。
新增cnnlBiasAddBackward_v2接口,相比cnnlBiasAddBackward需要用户分配一些workspace作为输入参数。
新增cnnlGroupNormForward_v2接口,相比cnnlGroupNormForward需要用户分配一些workspace作为输入参数。
新增cnnlMSELoss_v2接口,相比cnnlMSELoss需要用户分配一些workspace作为输入参数。
新增cnnlBatchNormForwardTraining_v2接口,相比cnnlBatchNormForwardTraining在activation_desc不为空且执行完batch归一化操作后,允许用户选择是否执行加法操作和激活操作。
新增cnnlGetMatMulWorkspaceSize接口,用于MatMul算子获取所需的额外内存。
新增cnnlCreateMatMulHeuristicResult、cnnlGetMatMulHeuristicResult和cnnlDestroyMatMulHeuristicResult接口,分别用于创建、获取和销毁MatMul算子需要的内存。
新增cnnlGetMatMulAlgoHeuristic接口,用于MatMul算子获取矩阵乘操作中可用的算法。
新增cnnlCreateMatMulInferHeuristicResult、cnnlGetMatMulInferHeuristicResult和cnnlDestroyMatMulInferHeuristicResult接口,分别用于创建、获取和销毁MatMulInference算子需要的额外内存。
新增cnnlCreateMatMulInferenceAlgo和cnnlDestroyMatMulInferenceAlgo接口,分别用于MatMulInference算子创建和获取矩阵乘算法。
新增cnnlMatMulInferGetAlgoHeuristic接口,用于MatMulInference算子获取矩阵乘操作中可用的算法。
新增cnnlSetMatMulEpilogueBias接口,用于设置MatMulInference算子支持加bias的信息。
新增cnnlSetEpilogueBiasScaleBNActive接口,用于设置MatMulInference算子支持按照处理bias、scale、batch normalization和activation顺序的信息。
新增cnnlGetLayerNormBackwardWorkspaceSize接口,用于LayerNorm算子获取所需的额外内存。
新增cnnlGetBatchNormForwardWorkspaceSize接口,用于BatchNorm算子获取所需的额外内存。
新增cnnlGetSyncBatchNormStatsWorkspaceSize接口,用于SyncBatchNormStats算子获取所需的额外内存。
新增cnnlGetSyncBatchnormBackwardReduceWorkspaceSize接口,用于SyncBatchnormBackwardReduce算子获取所需的额外内存。
新增cnnlGetBiasAddBackwardWorkspaceSize接口,用于BiasAdd算子获取所需的额外内存。
新增cnnlGetGroupNormForwardWorkspaceSize接口,用于GroupNorm算子获取所需的额外内存。
新增cnnlGetIsinfWorkspaceSize接口,用于Isinf算子获取所需的额外内存。
新增cnnlGetMSELossWorkspaceSize接口,用于MSELoss算子获取所需的额外内存。
新增cnnlSetActivationDescriptor_v6接口,用于Activation算子支持approximate参数传递。
新增cnnlGetActivationDescriptor接口,用于获取激活操作的参数。
特性变更¶
支持新的操作系统debian10。
不再支持操作系统debian9。
cnnlBatchNormBackwardV2接口,将形参名workSpaceSizeInBytes、reserveSpace和reserveSpaceSizeInBytes分别修改成workspace_size、reservespace和reservespace_size。
cnnlActivationMode_t新增枚举变量CNNL_ACTIVATION_ELU_V2,用于Activation算子支持新的ELU功能。
cnnlActivationForward新增CNNL_ACTIVATION_ELU_V2的特性支持。
cnnlMatMulEpilogueType_t新增枚举常量CNNL_MATMUL_EPI_BIAS_SCALE_BN_ACTIVATION,用于MatMul算子支持融合bias、scale、batch normalization和activation的操作。
cnnlAsStride将0元素检查放到最后,新增输入输出tensor维度小于等于CNNL_DIM_MAX的检查。
cnnlGridSampleForward支持align_corners为true的功能。
cnnlDCNBackwardData添加mask、mask_des、grad_mask和grad_mask_desc这四个参数全为空或全不为空的检查。
cnnlNms在NMS3D模式下confidenc_desc和confidence必须为空,output_mode=0时,添加output_desc->dim=1 && output_desc→dims[0]>=max_output_size的检查。
cnnlSqrt增加输入参数prefer的防呆检查,即不支持ULTRAHIGH_PRECISION模式。
cnnlConvolutionBackwardData部分场景下性能提升。
cnnlPointsInBoxes支持0元素。
cnnlActivationForward通过approximate参数提升GELU的精度。
cnnlMaskedIm2colForward增加kernel_h>0、kernel_w>0和workspace_size大于0时对workspace指针为空的检查。
cnnlIndexPut优化了部分规模的性能。
cnnlLayerNormBackward优化了部分规模的性能。
cnnlIndexSelect优化了部分规模的性能。
cnnlConvolutionForward优化了部分规模的性能。
cnnlNms优化了batched nms模式下的性能。
cnnlSplit优化了部分规模的性能。
cnnlSqrt支持输入数据类型是int32的场景。
cnnlRoiAlignRotatedForward添加参数x、y、w和h与spatial_scale的乘积值不能超过参数类型可表示范围的描述。
cnnlExecFFT解除了fft维度限制。
cnnlReorg提升了部分规模的精度和性能。
已修复问题¶
修复了cnnlSvd性能异常问题。
修复了cnnlConvolutionBackwardData多线程运行时segment fault问题。
修复了cnnlConvolutionBackwardFilter部分规模的timeout、精度和core dump问题。
修复了cnnlSmoothL1LossBackward在half模式下部分规模的精度问题。
修复了cnnlReduce部分规模的精度问题。
修复了cnnlDeformRoiPoolBackward Nan/Inf计算出错问题。
修复了cnnlSqrt和cnnlSqrt_v2数据类型组合描述不清问题。
修复了cnnlDCNBackwardData在dcn_desc的group值为2时的报错问题。
修复了cnnlFusedOpsExecute部分场景计算错误问题。
修复了cnnlNms部分规模core dump问题。
修复了cnnlApplyFtrlV2部分规模精度和数据类型防呆指代不清问题。
修复了cnnlCycleOp Nan/Inf计算出错问题。
修复了cnnlFloorDivTrunc Nan/Inf计算出错问题。
修复了cnnlConvolutionForward算子性能回退问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF时可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果和pytorch对齐,与tensorflow CPU结果不一致。
cnnlMatmulInference_v2部分规模和数据类型组合暂不支持,在后续的版本支持。
v1.10.5¶
新增接口或弃用¶
无。
特性变更¶
无。
已修复问题¶
修复cnnlTranpose_v2在部分规模下的精度问题。
修复cnnlGru_v2在量化模式下的精度问题。
修复cnnlUnique在部分规模下的精度问题。
修复cnnlConvolutionForward在部分规模下的精度问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会报错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF时可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果和pytorch对齐,与tensorflow CPU结果不一致。
cnnlConvolutionForward算子性能回退,导致MLU365-D2 yolov3推理存在性能下降6%,会在后续版本进行修复。
v1.10.4¶
新增接口或弃用¶
新增算子cnnlHistc。
新增接口cnnlGetGruExtraInputSize和cnnlInitGruExtraInput, 作为cnnlGru_v2的前置接口配合使用,详细使用方法参考《Cambricon CNNL Developer Guide》中cnnlGru_v2小节。
特性变更¶
部分规模有性能提升的算子:cnnlUnpoolBackward和cnnlEmbeddingBackward。
cnnlScatter新增防呆,src和index的shape必须保持一致。
cnnlScatter_nd index新增支持uint32/uint64数据类型。
cnnlConvolutionForward,cnnlMatmul,cnnlSplit,cnnlConcat,cnnlCopy,cnnlExpand,cnnlMaximum,cnnlMinimum,cnnlActivationForward,cnnlRsqrt,cnnlNegTensor,cnnlCastDataType,cnnlReduce,cnnlInstanceNormInference在tensor总大小大于支持上限会防呆报错,之前版本只有tensor num大于2G的时候,cnnlSetTensorDescriptor会防呆报warning。
已修复问题¶
修复cnnlTrigonForward在acosh模式下的精度问题。
修复cnnlConvolutionForward在部分规模下的精度问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF时可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果和pytorch对齐,与tensorflow CPU结果不一致。
cnnlConvolutionForward算子性能回退,导致MLU365-D2 yolov3推理存在性能下降6%,会在后续版本进行修复。
v1.10.3¶
新增接口或弃用¶
新增算子cnnlUnpoolBackward、cnnlReplicationPadBackward、cnnlCopySign、cnnlApplyFtrlV2。
新增cnnlTopKTensor_v3接口,相比cnnlTopKTensor_v2增加了workspace,但是提升了部分规模下的性能。
即将废弃接口cnnlTopKTensor_v2。CNNL接口弃用策略,以及当前版本中所有被弃用接口和建议替换接口在《Cambricon CNNL Developer Guide》中“Deprecated Data”章节统一说明,请用户及时替换。
cnnlNms_v2修改防呆:将原有要求max_output_boxes必须大于0的防呆,修改为max_output_boxes大于等于0。
cnnlCTCLoss支持更多的模式,支持reduce mode = mean & zero infinity = false的功能。
特性变更¶
部分规模有性能提升的算子:cnnlRNNForwardInference、cnnlConvolutionBackwardFilter、cnnlMatMulcnnlScatter、cnnlPreluBackward、cnnlReduce。
提升cnnlActivationForward在CNNL_ACTIVATION_SIGMOID fast模式下的性能。
已修复问题¶
修复cnnlRoiAlignRotatedForward在输入为NaN/INF 精度问题。
修复cnnlAdvancedIndex在输入地址非64Bytes对齐情况下的功能问题。
修复cnnlConvolutionForward在group_count 等于输入tensor的channel维度模式下,存在的精度问题。
修复cnnlTranpose在之前版本出现的性能回退问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart在输入为NaN/INF 可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果与tensorflow cpu结果不一致。
部分算子存在性能回退,导致MLU365-D2 yolov3推理存在性能下降6%,会在后续版本进行修复。
v1.10.2¶
新增接口或弃用¶
新增算子cnnlBoxOverlapBev、cnnlPreluBackward、cnnlPointsInBoxes。
新增cnnlNumTrue_v2接口,相比cnnlNumTrue省去了无用的index输出,对用户更加友好。
新增cnnlWhere_v2接口,相比cnnlWhere性能更好,但是需要增加workspace。
新增cnnlEmbeddingForward_v2接口,相比cnnlEmbeddingForward支持更完备的功能,可以设定padding_idx来初始化value对应位置的filter为0。
新增cnnlBatchNormBackwardV2接口,相比cnnlBatchNormBackward新增支持后融合功能。
新增cnnlFrozenBatchNormBackwardV2接口,相比cnnlFrozenBatchNormBackward新增支持后融合功能。
即将废弃接口cnnlNumTrue、cnnlWhere、cnnlEmbeddingForward、cnnlFrozenBatchNormBackward。CNNL接口弃用策略,以及当前版本中所有被弃用接口和建议替换接口在《Cambricon CNNL Developer Guide》中“Deprecated Data”章节统一说明,请用户及时替换。
特性变更¶
部分规模有性能提升的算子:cnnlIndexCopy、cnnlNlllossBackward、cnnlConvolutionBackwardFilter、cnnlTranpose。
提升cnnlActivationBackward在silu模式下的性能。
提升cnnlConvolutionForward在bias模式的性能。
已修复问题¶
无。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart和cnnlRoiAlignRotatedForward在输入为nan/inf 可能存在精度问题。
cnnlInterp算子在output_size=1时,计算结果与tensorflow cpu结果不一致。
cnnlTranspose在shuffleNet网络规模下存在性能下降。
v1.10.1¶
新增接口或弃用¶
无。
特性变更¶
部分规模有性能提升的算子:cnnlBatchMatMul、cnnlScatter、cnnlAdvancedIndex、cnnlConvolutionBackward、cnnlPoolingBackward、cnnlTranpose。
cnnlBitCompute_v2新增CNNL_BLEFT_OP和CNNL_BRIGHT_OP左移右移模式。
cnnlFloormodPro即将废弃,建议使用cnnlFloorMod。
cnnlGetNmsWorkspaceSize和cnnlGetNmsWorkspaceSize_v2即将废弃, 建议使用cnnlGetNmsWorkspaceSize_v3。
cnnlNms_v2修改防呆:
解开输入box为[spatial_dimension,7]和[7,spatial_dimension]的防呆。
解开输入box为[spatial_dimension,7]和[7,spatial_dimension]情况下除了input_layout和iou_threshold的其他参数防呆(此时其他参数无效)。
增加输入box为[spatial_dimension,7]和[7,spatial_dimension]时输出类型为int32或uint32的防呆。
增加输入box为[spatial_dimension,7]和[7,spatial_dimension]时,输出维度总数大于输入box数量的防呆。
cnnlBitCompute增加optype不支持BLEFT_SHIFT_OP和BRIGHT_SHIFT_OP的防呆。
cnnlBitCompute_v2解开输入数据类型不支持uint16,uint32,half和float的防呆, 增加bool类型不支持移位运算的防呆, 增加half和float类型不支持and/or/not/xor的防呆。
已修复问题¶
修复了cnnlNms_v2 在特定case下的精度问题。
修复了cnnlNormalize_v2在输入规模较大情况下的溢出问题。
修复了cnnlConvolutionForward在group_count 等于输入tensor的channel维度模式下,使用非对称量化功能时存在精度问题。
修复了cnnlConvolutionBackwardFilter算子在MLU370平台上CNNL_LAYOUT_NDHWC模式下部分规模存在coredump的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlMatrixBandPart,cnnlRoiAlignRotatedForward在输入为nan/inf 可能存在精度问题。
cnnlInterp算子在output_size=1时计算结果与tensorflow cpu结果不一致。
cnnlOpTensor和cnnlTransform在shuffleNet网络规模下存在性能下降。
v1.10.0¶
新增接口或弃用¶
新增新算子cnnlCosineSimilarity、cnnlUnfold、cnnlLerp、cnnlConj、cnnlAtan2、cnnlBorderAlignForward、cnnlTrunc、cnnlDeformRoiPoolForward、cnnlDeformRoiPoolBackward、cnnlApplyProximalAdagrad、cnnlEmbeddingBag、cnnlBoxIouRotated。
新增cnnlApplyAdaGradV2接口,相比cnnlApplyAdaGrad可以避免除0的风险。
新增cnnlBatchGatherV2_v2接口,相比cnnlBatchGatherV2提升了性能并且支持了uint32/64数据类型。
新增cnnlTopKTensor_v2接口,相比cnnlTopKTensor提供了稳定性排序新功能。
特性变更¶
支持新的操作系统centos8以及ubuntu20.04。
不再支持操作系统debian10。
cnnlBatchNormForwardInference支持side_input和relu融合。
cnnlRNNForwardInference支持onnx sequence_lens mask模式。
cnnlActivationForward支持Hardsigmoid和Hardswish模式。
cnnlActivationBackward支持elu,Hardsigmoid和Hardswish模式。
cnnlConvolutionForward 3d模式下,客户可以通过设置compute_type=CNNL_DTYPE_FLOAT来进行高精度计算。
cnnlNormalize_v2支持非连续轴归一化功能。
cnnlGru_v2相比cnnlGru,新增支持direction = {forward,reverse,bidirectional},多层,layer_num可配置,TNC和NTC可配置,linear_before_reset参数,支持seq_lens 输入,激活函数可选 ,滤波排布顺序可选,pack模式,浮点滤波,clip,支持CE3226。
cnnlIndexCopy解除规模限制,支持input和index更大的输入。
cnnlRandGenerateUniform解除INT32类型下输入范围限制。
cnnlNms支持nan/inf 特殊值。
cnnlLSTM支持packed模式。
部分规模有性能提升的算子:cnnlTopKTensor_v2、cnnlTranpose、cnnlConvolutionForward、cnnlStridedSliceBackward、cnnlRoiAlign、cnnlAxpy、cnnlAxpby、cnnlDiagPart、cnnlScatter、cnnlInterp、cnnlNlllossForward、cnnlBatchMatMulBCast、cnnlNms、cnnlTranspose_v2、cnnlSign、cnnlConvolutionBackwardData、cnnlDeconvolution。
cnnlGetBceLossWorkspaceSize防呆修改:删除 handle!=NULL 检查;增加 size!=NULL 检查。
cnnlBceLoss防呆增加:desc_output!=NULL;desc_input->dim=desc_target→dim, desc_input→dims[i]=desc_target->dims[i], desc_input->dims[i]>=0;reduction=CNNL_BCE_LOSS_NONE时, desc_input->dim=desc_output→dim,否则desc_output→dim=1;desc_input->dtype=desc_target->dtype=desc_output→dtype,如果desc_filter!=NULL, desc_filter->dtype=desc_input→dtype;dtype只支持float/half;desc_filter不为NULL时,filter!=NULL;不为0元素时,output!=NULL。
cnnlNumTrue防呆修改:增加handle!=NULL。
cnnlCreateFusedOpsPlan,cnnlCreateFusedOpsConstParamPack,cnnlCreateFusedOpsVirantParamPack新增对于三个接口中cnnlFusedOps_t的参数的防呆:fusion_type != CNNL_CONV_SCALE_BN_PRELU,此参数在头文件注释中描述的是不支持。
cnnlMakeFFTPlanMany增加防呆:handle!=NULL;reservespace_size不为空;workspace_size不为空;
cnnlLrn增加输入输出维度一致性检查。
cnnlMaskZero增加防呆:判断input,output和lable的数据类型一致;input的第一维和lable的第一维度相等;output的维度不小于4。
cnnlGru防呆修改:getworkspacesize中增加对 handle, input_desc,state_desc,gru_des, size不为空防呆;增加 gru接口输入滤波filter之间数据类型一致的防呆。
cnnlGru_v2防呆修改:增加 getworkspacesize_v2中增加对 *size不为空防呆;增加 gru_v2接口输入滤波filter之间数据类型一致的防呆;增加 setgruDescriptor_v2中 algo=CNNL_GRU_ALGO_V1时 direction!=CNNL_GRU_BACKWARD的防呆。
cnnlVarForward增加对数据类型防呆,防止用户输入float/half之外的不支持的数据类型。
cnnlStdForward增加对数据类型防呆,防止用户输入float/half之外的不支持的数据类型。
cnnlStdBackward增加对数据类型防呆,防止用户输入float/half之外的不支持的数据类型,增加对维度数量的检查,所有tensor的维度数量相等,增加对mask的数据类型只能为uint8的防呆。
cnnlFusedDropout增加对mask的数据类型只能为uint8的防呆;增对dim检查防呆。
cnnlSpace2Batch/cnnlBatch2Space增加布局限制,只支持nhwc/nchw/hwcn三种布局;约束数据类型不可以为invalid类型。
cnnlSpace2BatchNd/cnnlBatch2SpaceNd约束数据类型不可以为invalid类型。
cnnlStridedSlice增加对数据位宽的防呆,数据位宽只能为1, 2, 4, 8B。
cnnlReduce修改防呆:补全tensor_indices的防呆;增加nan_prop参数(保留参数,目前reduce未使用)的防呆;在flattened_indices和only_indices模式下,补全indices_type的防呆;增加多轴模式的防呆;增加输入输出数据类型应一致的防呆;增加归约轴维度不能超过输入维度的防呆log;cnnlGetReduceOpWorkspaceSize接口中增加对于workspace_size_inbytes为空的防呆。
已修复问题¶
修复了cnnlQuantizeMatMu,cnnlConvolutionBackwardData量化position 8bit溢出。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类前向算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlConvolutionForward在group_count 等于输入tensor的channel维度模式下,使用非对称量化功能时候存在精度问题。
cnnlConvolutionBackwardFilter算子在MLU370平台上CNNL_LAYOUT_NDHWC模式下部分规模存在coredump。
cnnlMatrixBandPart,cnnlRoiAlignRotatedForward在输入为nan/inf 可能存在精度问题。
cnnlInterp算子在output_size=1时计算结果与tensorflow cpu结果不一致。
cnnlOpTensor和cnnlTransform在shuffleNet网络规模下存在性能下降。
v1.9.6¶
新增接口或弃用¶
无。
特性变更¶
部分规模下有性能提升的算子:cnnlTranspose。
已修复问题¶
修复了量化类算子position溢出时计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波器进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波器进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlConvolutionForward算子在部分规模下计算错误。
cnnlUnique算子在部分规模下计算错误。
cnnlWhere算子在部分规模下计算错误。
v1.9.5¶
新增接口或弃用¶
无。
特性变更¶
部分规模下有性能提升的算子:cnnlScatter。
已修复问题¶
修复cnnlQuantizeConvolutionForward在量化position溢出时计算错误的问题。
修复cnnlQuantizeConvolutionBackwardData在量化position溢出时计算错误的问题。
修复cnnlQuantizeConvolutionBackwardFilter在量化position溢出时计算错误的问题。
修复cnnlQuantizeMatmul在量化position溢出时计算错误的问题。
修复cnnlConvolutionBackwardFilter算子在部分规模下计算错误的问题。
修复cnnlBatchNormBackward在输入数据含有NAN/INF数据时计算错误的问题。
修复cnnlBatchMatMulBCast在部分输入规模workspace size计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
v1.9.4¶
新增接口或弃用¶
无。
特性变更¶
无。
已修复问题¶
修复cnnlReduce算子CNNL_REDUCE_MUL模式下输入数据为half类型时部分规模下计算精度低的问题。
修复cnnlTranspose算子在部分规模下相比之前版本性能下降的问题。
修复cnnlConvolutionForward算子在部分规模下相比之前版本性能下降的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
v1.9.3¶
新增接口或弃用¶
新增算子:cnnlRoiAlignRotatedForward。
特性变更¶
cnnlRNNForwardInference算子新增支持MLU370平台;支持多层双向;input和filter支持浮点输入,组合为float/float, half/half;输入参数input_size, hidden_size等无限制,但需符合cnnl的large tensor(2GB)限制。
新增接口cnnlBatchNormForwardTrainingV2,相较于cnnlBatchNormForwardTraining,新增支持后融合功能。
新增接口cnnlBatchNormForwardInferenceV2,相较于cnnlBatchNormForwardInference,新增支持后融合功能。
新增接口cnnlGetSizeOfDataType,可以获取每种cnnlDataType_t类型字节数。
cnnlLrnGrad算子删除参数alpha大于0的防呆限制。
cnnlRNNForwardTraining、cnnlRNNBackwardData、cnnlRNNBackwardWeights算子新增packed模式。
cnnlTranspose算子新增对输入描述符进行判空检查。
cnnlLrn算子新增LRN_WITHIN_CHANNEL模式。
新增接口cnnlScatterNd_v2,相较于cnnlScatterNd,新接口新增支持CNNL_SCATTERND_UPDATE 、CNNL_SCATTERND_ADD两种模式
cnnlActivationForward算子新增对描述符进行判空检查。
cnnlCastDataType算子新增CNNL_CAST_INT64_TO_FLOAT、CNNL_CAST_INT64_TO_HALF、CNNL_CAST_FLOAT_TO_INT64计算模式。
cnnlExpand算子新增对输入维度不大于CNNL_DIM_MAX的防呆。
cnnlTile算子新增对输入维度不大于CNNL_DIM_MAX的防呆。
cnnlGridSampleForward算子新增支持stride特性。
cnnlStdForward算子新增输入输出规约维之外的维度一致防呆检查。
cnnlVarForward算子新增输入输出规约维之外的维度一致防呆检查。
部分规模下有性能提升的算子:cnnlDCNForward、cnnlTranspose、cnnlRoiAlignForward、cnnlPoolingForwardWithIndex、cnnlReflectionPad2d。
已修复问题¶
修复cnnlConvolutionBackwardFilter算子部分规模下计算错误的问题。
修复cnnlConvolutionForward算子部分规模下计算错误的问题。
修复cnnlConvolutionBackwardData算子部分规模下计算错误的问题。
修复cnnlScatterRef算子在输入indices为异常值时的内存越界的问题。
修复cnnlRNNForwardInference在部分场景下计算错误的问题。
修复cnnlFill算子部分规模下写越界的问题。
修复cnnlConvolutionBackwardData在部分场景下计算错误的问题。
修复cnnlNms算子在部分规模下计算错误的问题。
修复cnnlReduce算子对输出不为空防呆的逻辑问题。
修复cnnlStridedSlice在部分规模下计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
v1.9.2¶
新增接口或弃用¶
新增算子:cnnlRepeatInterleave、cnnlGridSampleForward、cnnlExecFFT、cnnlReflectionPadBackward、cnnlVarForward、cnnlDiagPart。
特性变更¶
cnnlRNNForwardInference算子新增支持MLU370平台;支持多层双向;input和filter支持浮点输入,组合为float/float, half/half;输入参数input_size, hidden_size等无限制,但需符合cnnl的large tensor(2GB)限制。
cnnlActivationBackward算子新增CNNL_ACTIVATION_GLU模式。
cnnlTranspose_v2算子新增支持complex类型。
cnnlReduce算子新增CNNL_REDUCE_ASUM和CNNL_REDUCE_SUMSQ两种计算模式。
cnnlActivationForward算子CNNL_ACTIVATION_SELU模式新增支持支持alpha和gamma可设置。
cnnlInterpBackward算子新增CNNL_INTERP_BACKWARD_BICUBIC计算模式。
cnnlCTCLoss算子Forward和Backward和输入labels新增支持[N, S]形状布局。
cnnlExpand算子新增支持输入为complex数据类型。
新增接口cnnlAddN_v2,相比于cnnlAddN接口,支持输入广播功能。
新增接口cnnlBceWithLogits_v2,相比于cnnlBceWithLogits接口,可以进行高精度和高性能模式选择。
cnnlConvolutionForward算子在输入为half类型,计算为float类型是,新增bias需为half类型的防呆检查。
cnnlSoftsignGrad算子新增检查输入和输出shape的dim是否相等。
cnnlMatMulInference_v2算子新增workspace size不为0的情况下对workspace指针需要不为空的防呆检查。
cnnlDiagonal算子新增输入张量各维度上长度必须相等的防呆。
cnnlRNNForwardInference删除MLU370平台(除CE3226以外)不支持浮点运算的防呆;增加滤波摆放顺序类型CNNL_LSTM_IOFG。
部分规模下有性能提升的算子:cnnlBatchMatMulBCast、cnnlBceWithLogits、cnnlConvolutionForward。
已修复问题¶
修复cnnlMultiHeadAttnForward算子部分规模下计算错误的问题。
修复cnnlConvolutionBackwardFilter算子部分规模下计算错误的问题。
修复cnnlConvolutionForward算子在前序版本引入的编译包变大的问题。
修复cnnlFusedOp算子同时设置CNNL_CONV_SCALE_BN_ACTIVATION和CNNL_NO_QUANTIZE防呆报错问题。
修复cnnlQuantizeStrategy算子gamma参数的输入范围描述错误问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
v1.9.1¶
新增接口或弃用¶
新增算子:cnnlComplexAbs
特性变更¶
cnnlMaximum、cnnlMinimum、cnnlCycleOp、cnnlRoiAlignForward算子新增支持NAN/INF输入,且对齐IEEE754标准。
cnnlStridedSlice、cnnlCopy算子新增支持complex类型。
部分规模下有性能提升的算子:cnnlConvolutionForward、cnnlMatmul、cnnlCast。
cnnlDiagonal算子新增输入张量各维度上长度必须相等的防呆。
已修复问题¶
修复cnnlNlllossBackward算子输入滤波存在负数时的计算错误问题。
修复cnnlReduce算子cnnlReduceOp_t为CNNL_REDUCE_AND模式时,部分规模出现计算错误的问题。
修复cnnlBitCompute_v2算子部分规模下计算错误的问题。
修复cnnlLinspace算子在输入规模小于64的时候计算错误的问题。
修复cnnlOpTensor算子在输入参数alpha1为0的时候的计算错误问题。
修复cnnlScale算子在alpha缺省,beta不缺省的时候计算错误的问题。
修复cnnlFusedOp算子在非对称量化情景下部分规模计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlConvolutionBackwardFilter算子在部分规模下计算错误。
cnnlConvolutionBackwardData算子在部分规模下计算错误。
cnnlMultiHeadAttnForward算子在需要进行片上量化时的部分规模下计算错误。
v1.9.0¶
新增接口或弃用¶
新增算子:cnnlDiagonal、cnnlIndexCopy、cnnlFloorModTrunc、cnnlSoftsignGrad、cnnlSoftsignForward、cnnlSoftsignGrad、cnnlLrnGrad、cnnlRoll、cnnlClipGradNorm、cnnlApplyAddSign、cnnlLinspace。
新增接口cnnlSoftmaxForward_v2,相比于cnnlSoftmaxForward接口,新增prefer参数可以指定精度模式。
新增接口cnnlFill_v3,相比于cnnlFill_v2接口,输入value支持device端传入和host端传参。
新增接口cnnlMasked_v2,相比于cnnlMasked接口,支持输入广播功能。
新增接口cnnlTransform_v2,相比于cnnlTransform接口,支持device端传入和host端传参。
新增接口cnnlMatmulInference_v2,相比于cnnlMatmulInference接口,支持cnnlMatmulInference_v2后融合bias功能。
新增接口cnnlInterp_v3,相比于cnnlInterp_v2接口,支持pad功能。
新增接口cnnlSelectV2,相比于cnnlSelect算子,功能与onnx与pytorch的中的where算子一致。
新增接口cnnlRandGenerateMultinomial_v2,相比于cnnlRandGenerateMultinomial算子,支持输入为负数。
弃用接口:CNNL接口弃用策略,以及当前版本中所有被弃用接口和建议替换接口在《Cambricon CNNL Developer Guide》中“Deprecated Data”章节统一说明,请用户及时替换。
特性变更¶
部分规模有性能提升的算子:cnnlUnsortedSegmentSum、cnnlSplit、cnnlLayerNormForward、cnnlLrn、cnnlStridedSliceBackward、cnnlMaximum、cnnlMinimum、cnnlCast、cnnlLSTMGatesForward、cnnlScale、cnnlCTCLoss、cnnlTranspose、cnnlReduce、cnnlInterp、cnnlMatmul、cnnlPoolingForward、cnnlPoolingForwardWithIndex、cnnlGroupNormForward、cnnlUnique、cnnlPoolingForwardWithIndex、cnnlDCNForward、cnnlFocalLossSigmoidForward、cnnlConvolutionForward、cnnlConvolutionBackwardData、cnnlConvolutionBackwardFilter、cnnlRoiAlignForward、cnnlRoiAlignBackward、cnnlFusedDropout、cnnlExpand、cnnlRoiAlignForward、cnnlActivationForward。
cnnlInterp算子新增CNNL_INTERP_BICUBIC模式。
cnnlPow算子提升了部分数据范围时的精度。
cnnlTopKTensor算子新增输入支持int8、 uint8、 int16、 int32数据类型,输入参数index 新增支持uint16和uint32数据类型。
cnnlActivation算子在tanh模式提升了部分数据范围时的精度。
cnnlNms算子新增输入box形状为[batch_num, spatial_dimension, 4], confidence形状为[batch_num,class_num,spatial_dimension]的输入。
cnnlMasked算子新增CNNL_MASKED_SELECT模式,集成了cnnlUnarySelect的全部功能,支持input和mask之间广播。
cnnlConvolutionForward算子group conv 模式新增支持 filter 形状布局为(kh, kw, ci, cm)的 depthwise conv的规模。
cnnlActivationForward算子新增CNNL_ACTIVATION_SILU模式。
cnnlActivationBackward算子新增CNNL_ACTIVATION_SILU模式。
cnnlScale算子新增支持alpha、beta参数缺省时的计算。
cnnlReduce算子新增支持stride模式;新增CNNL_REDUCE_NORMP。
cnnlEmbeddingForward index解除维度限制。
cnnlReorg算子新增支持reverse=True模式。
cnnlCTCLoss算子Forward模式新增支持shape为[batch_size]的loss、Backward模式新增支持对应reduce模式的grads。
cnnlTrigon算子asin/acos/atan 接口新增支持高精度实现。
cnnlBatchNormForwardInference算子新增支持uint8数据类型的输入。
cnnlgatherNd算子新增支持index为负数的输入。
cnnlReplicationPad2d算子新增支持pad为负数的输入。
cnnlLayerNormForward算子新增支持bias和filter为空的输入。
cnnlGatherV2算子新增支持index为负数的输入。
cnnlBatchNormForwardInference算子支持filter或bias为nullptr;新增uint8数据类型支持。
cnnlSoftmaxForward算子新增支持原位操作。
cnnlAdvancedIndex算子新增stride特性支持。
cnnlIndexPut算子新增支持index为负数的输入。
cnnlReflectionPad2d算子增加输入输出dims大小一致的防呆检查;删除了对paddings参数全非负的防呆检查;把要求输入(wo>=1)&&(ho>=1)的防呆检查修改为(wo>=1)||(ho>=1)。
cnnlRNNForwardInference算子由只支持LSTM、LSTM_TANH增加为支持RNN_RELU、RNN_TANH、LSTM、LSTM_TANH;零元素防呆由不支持含零元素改为满足维度约束的前提下,支持零元素输入。
cnnlReorg算子修正了关于layout的防呆,解除了对NTC和NC的防呆;新增NTC和NC时reorghw的stride参数为1,且T维度为1的防呆;移除了参数上reverse不能为true的防呆;将C维度参数的防呆换为地址不越界的逻辑,解除了输出C维度为输入C维度经过推导的固定值的限制;完善了其他维度的防呆如输入输出batch数相同。
cnnlLrn算子增加onchip_dtype的防呆,370仅支持片上浮点所以只能设置为和输入相同或者不设置(INVALID);增加200和ce3226上int8/int16输入的片上类型检查:不设置或者与输入类型相同。
cnnlMaskZero增加数据类型检查,只支持float和half。
cnnlEmbeddingForward算子删除关于layout一致的检查;将indices的数据类型检查从int32放宽至int32和int64(layout=NHWC保持和原来一样);增加了input、indices和output的维度防呆检查。
cnnlPad算子删除关于layout一致的检查;dtype增加了INT31的防呆。
cnnlApplyCenterRMSProp算子之前对于所有张量的形状要求是元素个数一致,现调整为张量shape完全一致; 之前未对张量的数据类型防呆,事实上算子仅支持half、float,现加入了对数据类型的防呆。
cnnlPoolingForwardWithIndex算子将kh * kw < 3070的防呆限制修改为 kh * kw < 1535。
cnnlConvolutionForward算子DEPTHWISE_CONV模式增加bias的防呆:layout只能为NHWC或ARRAY且数据个数必须和co相同。
cnnlNms算子新增防呆:允许box维度为3和confidence维度为3的输入;增加输入box的形状与输入confidence纬度组合只能为(2,1)或者(3,3);增加box与confidence的都为3维度时,两者batch数相同且,且box number相同的放呆;增加当输入的box mode为1时,输入box的纬度应该为3;增加输入method mode应该为0,1,2的防呆;增加输入method mode不为0的防呆并提示功能暂未实现,未来版本会增加功能实现;增加输入box为3维,且输出模式不为3时,输入的batch num 和 class num 为 1 的防呆;增加输出模式为0和3时,输出类型为float和half的防呆
cnnlSplit算子新增对于outputs[i]数据大小不为0,outputs[i]空指针防呆;workspace_size大小不为0,增加workspace空指针防呆。
cnnlConcat算子取消对layout的防呆。
cnnlTopKTensor算子更新了部分数据类型的防呆;增加index为uint16_t数据类型下,input排序维度大小不得大于65535的防呆,增加index为uint32数据类型下,input排序维度不得大于4294967295的防呆。
cnnlReduce算子增加int64类型数据的防呆;修改reduce max/min last index模式对indices模式的防呆表述错误。
cnnlLogicOp算子增加对数据类型检查的防呆,仅支持bool/int8/uint8/int16/int32/float16/float32。
cnnlGru算子增加对输入输出数据类型检查的防呆,input仅支持HALF和FLOAT,其他输入和输出除了filters外,和input数据类型相同,filters输入数据类型为INT8或INT16;增加输入filters和bias的维度防呆,增加input维度大于0的防呆。
cnnlDiagonal算子新增防呆:输入输出数据类型一致;输入张量维度至少为2输出张量维度比输入少1;除求对角线的平面外,其余维度长度输入输出必须相同;dim1和dim2要小于输入张量维度数N,并大于-N-1;dim1和dim2不能为同一维度。
cnnlArange_v2算子增加start/step/end的 inf和nan输入的防呆;改变int类型支持数据范围的防呆,从2*22 变成在MLU200上223 在 MLU300上2*24。
已修复问题¶
无。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlOpTensor算子在输入参数alpha1为0的时候,部分规模下计算错误,将在下个版本修复。
cnnlConvolutionBackwardFilter算子在部分规模下计算错误。
cnnlConvolutionBackwardData算子在部分规模下计算错误。
cnnlMultiHeadAttnForward算子在部分规模下计算错误。
cnnlActivationForward算子部分激活模式默认不传播NAN,当前控制NAN是否传播的参数未使能。
cnnlLinspace算子在部分规模下计算错误,将在下个版本修复。
v1.8.4¶
新增接口或弃用¶
新增cnnlSoftmaxForward_v2接口,相比于cnnlSoftmaxForward,新增(cnnlComputationPreference_t)mode参数供用户配置。当mode为CNNL_COMPUTATION_FAST时,部分规模下相比于mode为CNNL_COMPUTATION_HIGH_PRECISION时性能可能更好但精度略低。
从本版本开始不再发布cnnl-round-half-up交付包,将在cnnl v1.9.0版本提供参数设置的方式支持相应功能。
特性变更¶
cnnlGatherNd、cnnlBatchGatherV2算子indices参数新增支持为负数的情况。
部分规模下有提升的算子:cnnlRoiAlign、cnnlConvolutionForward、cnnlQuantizeConvolutionForward、cnnlMatMulInference。
已修复问题¶
修复cnnlConvolutionForward算子在ci/group=1(即depthwise)情况下部分规模的计算错误问题。
修复cnnlDeconvolution算子在filter_desc的w或h维度为1,且ci和co较小时可能出现的计算错误问题。
修复cnnlAdvancedIndex算子在部分规模下的计算错误问题。
修复cnnlRoiAlign算子在选框超出图片范围时出现的计算错误问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlConvolutionBackwardFilter算子在输入layout为NDHWC模式的部分规模下因为计算时间过长导致coredump。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
cnnlSoftmaxForward_v2算子,当mode为CNNL_COMPUTATION_FAST时,部分规模下性能相比mode为CNNL_COMPUTATION_HIGH_PRECISION时差,将在后续版本进行优化。
cnnlRandGenerateMultinomial算子不支持输入为负数的情况。
v1.8.3¶
新增接口或弃用¶
新增算子cnnlClipGradNorm。
新增接口cnnlGetClipGradNormWorkspaceSize,获取cnnlClipGradNorm算子所需临时空间大小。
新增接口cnnlFusedDropout_v2,用户可通过参数来设置随机数生成器类型。
新增接口cnnlSetAtomicsMode,用于将cnnlAtomicsMode_t设置到cnnlHandle_t中,部分支持的算子可根据此参数控制是否使用atomic模式计算。将cnnlAtomicsMode_t设置为CNNL_ATOMICS_NOT_ALLOWED可以使特定输入下的计算结果唯一,但可能导致算子性能下降。目前仅有cnnlMatMul算子支持cnnlAtomicsMode_t,其他算子不受cnnlAtomicsMode_t参数影响。
新增接口cnnlGetAtomicsMode,用来获取cnnlHandle_t中的cnnlAtomicsMode_t参数信息。
特性变更¶
部分规模或模式下有性能提升的算子:cnnlExpand、cnnlConvolutionBackwardFilter、cnnlActivationBackward、cnnlCTCLoss、cnnlTranspose、cnnlTransfrom、cnnlMatMul、cnnlConvolutionBackwardData、cnnlCastDataType、cnnlStridedSliceBackward、cnnlMinimum、cnnlMaximum、cnnlActivationForward。
cnnlMatMul算子新增数据类型cnnlAtomicsMode_t,用来控制算子内部是否使用atomic模式计算。
cnnlCastDataType算子新增CNNL_CAST_INT8_TO_INT16、CNNL_CAST_HALF_TO_FLOAT_INF、CNNL_CAST_FLOAT_TO_HALF_IEEE754计算模式。
cnnlCTCLoss算子新增CNNL_NONE_ZERO_INFINITY_PROBS_GRADS模式,输出dims是[batch_size]的模式。
cnnlBatchNormForwardInference算子支持uint8输入,float和half输出数据类型。
cnnlCumsum算子对uint8数据类型增加了防呆。
已修复问题¶
修复cnnlConvolutionBackwardFilter算子在部分规模下计算错误的问题。
修复cnnlStridedSliceBackward算子在部分规模下计算错误的问题。
修复cnnlReduce算子reduce_max功能在部分规模下计算错误的问题。
修复cnnlWhere算子在部分规模下性能下降的问题。
修复cnnlMSELoss算子在部分规模下计算错误的问题。
修复cnnlTranspose算子在部分规模下计算错误的问题。
修复cnnlScatterRef算子在mode为CNNL_SCATTERREF_UPDATE的部分规模下因为计算时间过长导致coredump的问题。
修复cnnlBatch2spaceNd算子内存泄漏问题。
修复cnnlGetDivWorkspaceSize接口在部分规模下计算错误,导致cnnlDiv算子计算错误的问题。
修复cnnlBceLoss算子在部分规模下计算错误的问题。
修复cnnlRandGenerateUniform、cnnlFusedDropout算子在部分规模下因为质量较差导致网络训练精度或收敛受影响的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlConvolutionBackwardFilter算子在输入layout为NDHWC模式的部分规模下因为计算时间过长导致coredump。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
v1.8.2¶
新增接口或弃用¶
新增cnnlSetTensorDescriptorDim接口,可以单独设置张量描述符的维度信息,不改变其他参数。
新增cnnlTransform_v2接口,可通过设置pointer_mode参数来选择alpha和beta参数的指针类型。
新增cnnlMasked_v2接口,相比于cnnlMasked接口,当masked_op参数等于CNNL_MASKED_FILL时,input_desc和masked_desc支持广播。
新增算子支持:cnnlLSTMGatesForward、cnnlLSTMGatesBackward、cnnlUnpoolForward、cnnlStrideBatchMatMul。
特性变更¶
部分规模或模式下有性能提升的算子:cnnlFusedOp、cnnlRoiAlign、nnlConvolutionForward、cnnlConvolutionBackwardData、cnnlDeconvolution、cnnlConvolutionBackeardFilter、cnnlWhere、cnnlActivationForward、cnnlMatmul、cnnlMatMulInference、cnnlReduce、cnnlAdvancedIndex、cnnlTranspose、cnnlCast、cnnlIndexPut、cnnlStridedSlice、cnnlRandGenerateUniform、cnnlLayerNormForward、cnnlSoftmaxForward、cnnlTopk。
cnnlReduce算子新增支持CNNL_REDUCE_MAX_LAST_INDEX和CNNL_REDUCE_MIN_LAST_INDEX模式。
cnnlAdvacedIndex算子的input_desc和indices_desc支持stride不全为1的情况。
cnnlMultiHeadAttnForward算子支持CE3226设备。
cnnlConvolutionForward算子支持了depthwise情况下layout为NHWC模式。
cnnlQuantiedConvolutionForward算子支持了输入layout为CNNL_LAYOUT_NDHWC时,片外数据类型为浮点且片上数据类型为INT31的情况。
允许用户不调用cnnlSetQueue,使用默认queue的方式。
cnnlPow算子x_desc支持stride不全为1的情况。
cnnlMasked_v2算子x_desc支持stride不全为1的情况,并当masked_op参数等于CNNL_MASKED_FILL时,新增支持bool、int8、int16、int32数据类型。
cnnlExpand算子新增支持int64、uint8、uint16、uint32、uint64数据类型。
cnnlTile算子新增支持int64、uint8、uint16、uint32、uint64数据类型。
已修复问题¶
修复cnnlRoiAlign算子在部分规模下计算错误的问题。
修复cnnlGatherV2算子在部分规模下计算错误的问题。
修复cnnlInstancenormForward算子在部分规模计算错误的问题。
修复cnnlPow算子在 x = 2,y = 0 特定输入情况下精度下降的问题。
修复cnnlPow算子在 y = 0.5 特定参数情况下精度低的问题。
修复cnnlNormalize_v2算子在scale参数为nullptr时的计算错误问题。
修复cnnlConvolutionBackwardFilter算子在输入layout为NDHWC,片外数据类型为定点,且未设置片上计算数据类型时的计算错误问题。
修复cnnlMatmulInference算子在workspace_size大于需要的大小时误防呆报错的问题。
修复cnnlDeconvolution算子在片外数据类型为浮点,片上计算数据类型为定点时的计算错误问题。
修复cnnlClip算子在输入存在Nan时计算错误的问题。
修复cnnlConvolutionBackwardData算子输入和输出layout为CNNL_LAYOUT_HWCN或CNNL_LAYOUT_NCHW,且kernel_size=1、pad=0、stride=1、dilation=1情况下计算错误的问题。
修复cnnlConvolutionForward在部分规模下计算错误的问题。
修复cnnlFusedOp算子在部分规模下计算错误的问题。
修复算子在输入或输出为零元素时的问题:cnnlSpace2batchNd_v2、cnnlBatch2spaceNd_v2、cnnlMSELossBackward、cnnlSyncBatchNormStats、cnnlSyncBatchNormGatherStatsWithCounts。
修复cnnlFusedDropout算子生成uint8数据类型随机数时出现截断到127的问题。
修复cnnlRandGenerateUniformInt算子在最大值和最小值附近质量不好的问题。
修复cnnlRoiAlignBackward算子在输入存在Nan或Inf时计算错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlConvolutionBackwardFilter算子在输入layout为NDHWC模式的部分规模下因为计算时间过长导致coredump。
cnnlScatterRef算子在mode为CNNL_SCATTERREF_UPDATE的部分规模下因为计算时间过长导致coredump。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
v1.8.1¶
特性变更¶
cnnlTranspose_v2接口的性能大于等于cnnlTranspose接口的性能,并且cnnlTranspose接口将被弃用,在网络配置时,推荐使用cnnlTranspose_v2接口。
已修复问题¶
无。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlScatterRef算子在大规模下可能因为运行时间过长出现core dump。
cnnlConvolutionForward算子在部分规模下出现计算错误。
cnnlConvolutionBackwardData算子在部分规模下出现计算错误。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
v1.8.0¶
特性变更¶
新增算子:cnnlLog1p、cnnlFusedDropout、cnnlGatherTree、cnnlTinShiftForward、cnnlTinShiftBackward、cnnlPsamaskForward、cnnlPsamaskBackward。
新增接口cnnlGetDevice,用于获取cnnlHandle_t中的设备描述符CNdev。
新增接口cnnlGetContextParam用于获取cnnlHandle_t中设备相关信息,目前支持的type为CN_CTX_CONFIG_UNION_LIMIT 和 CN_CTX_CONFIG_VISIBLE_CLUSTER_NUM。
新增接口cnnlGetReservedMemSize用于获取cnnl需要预留的设备内存大小。
新增接口cnnlGetQuantizeConvolutionForwardWorkspaceSize,用于配合cnnlQuantizeConvolutionForward算子接口使用。
新增接口cnnlGetConvolutionForwardInferenceWorkspaceSize,用于配合cnnlGetConvolutionForwardInference算子接口使用。
新增接口cnnlFill_v2,相比于cnnlFill接口,value为设备端指针类型。
新增接口cnnlSetRNNComputationPreference,配合cnnlRNNForwardInference算子使用,默认为CNNL_COMPUTATION_FAST模式。
新增接口cnnlRoiAlignBackward_v2,相比cnnlRoiAlignBackward接口pool_mode增加支持max_pool类型,需配合cnnlSetRoiAlignDescriptor_v2接口使用。
新增接口cnnlRoiAlign_v2,相比cnnlRoiAlign接口pool_mode增加支持max_pool类型,需配合cnnlSetRoiAlignDescriptor_v2接口使用。
新增cnnlRandGenerateDescreteUniform算子接口,相比于cnnlRandGenerateUniformInt接口,增加datatype参数支持设置float、half、int数据类型。
部分规模有性能提升的算子:cnnlConvolutionForward、cnnlRsqrtBackward、cnnlRandGenerateMultinomial、cnnlConvolutionBackwardData、cnnlReduce、cnnlInstanceNormInference、cnnlMatMulInference、cnnlSquare、cnnlBatchNormForwardTraining、cnnlBatchNormBackward、cnnlTranspose、cnnlRoiAlignBackward、cnnlFocalLossSigmoidBackward、cnnlIndexPut、cnnlSoftmaxBackward、cnnlSoftmaxForward、cnnlMatMul、cnnlTopKTensor、cnnlOpTensor、cnnlScale、cnnlPow、cnnlGatherNd、cnnlDiv、cnnlCopy、cnnlInterp、cnnlClip、cnnlRNNForwardTraining、cnnlBatchMatMul、cnnlAddN、cnnlSoftmaxCrossEntropyWithLogits、cnnlExpand、cnnlLayerNormForward。
cnnlActivationForward算子新增CNNL_ACTIVATION_CAFFE_RELU6、CNNL_ACTIVATION_SWISH模式。
cnnlActivationForward算子新增GLU模式,需要配合cnnlSetActivationDescriptor_v3接口使用。
cnnlCastDataType算子新增类型转换支持:CNNL_CAST_UINT8_TO_INT64、CNNL_CAST_UINT64_TO_UINT32、CNNL_CAST_INT64_TO_UINT32、CNNL_CAST_UINT32_TO_INT64、CNNL_CAST_UINT32_TO_UINT64。
cnnlConvolutionBackwardFilter算子在输入和滤波的layout为CNNL_LAYOUT_NDHWC模式下,在MLU300系列上支持片上浮点计算类型。
cnnlConvolutionBackwardData算子在输入和滤波的layout为CNNL_LAYOUT_NDHWC模式下,在MLU300系列上支持片上浮点计算类型。
cnnlScatter算子支持输入维度大于4维的情况。
cnnlBatchMatMul算子支持非对称量化。
cnnlBatchMatMulBCast算子支持非对称量化。
cnnlLrn算子支持当片上计算类型为INT31时可以不设置量化参数,算子内部做在线量化。
cnnlReduce算子sum和avg模式支持int类型。
cnnlAdaptivePoolingBackward解除规模限制((dx_h / y_h + 2) * (dx_w / y_w + 2) should be no greater than 3582)。
cnnlRsqrtBackward算子整体精度提升。
cnnlIndexPut算子解除indices为int32时input规模不能超过 \(2 ^{23}\) 的限制。
cnnlIndexPut算子indices支持nullptr。
cnnlIndexSelect算子input、output参数新增支持int8、uint8、int64数据类型,index参数新增支持int64数据类型
cnnlFusedOpsExecute算子maskzero功能,支持float与half数据类型的滤波输入。
cnnlEmbeddingForward算子支持1维输入。
cnnlEmbeddingBackward算子支持1维输入。
cnnlInterpBackward算子nearest模式支持1维插值。
cnnlBatchNormForwardInference算子支持filter或bias为nullptr。
cnnlDiv_v2 接口中的 prefer 参数值为 CNNL_COMPUTATION_HIGH_PRECISION 时,MLU200 系列上的精度提升至 1e-5,性能下降。
cnnlErf 接口中的 prefer 参数值为 CNNL_COMPUTATION_HIGH_PRECISION 时,MLU200 系列上的精度提升至 1e-5,性能下降。
已修复问题¶
无。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。CNNL当前支持的position范围是[-128, 127],当position参数的值超过该范围时,其结果是未定义的。在卷积类算子中,量化后的激活值和滤波进行乘累加操作,两者的position会进行累加,当累加后的position不在该范围时,行为是未定义的。如遇到该问题,可尝试对激活值和滤波进行缩放,避免position超过上述范围。
cnnlScatterRef算子在大规模下可能因为运行时间过长出现core dump。
cnnlConvolutionForward算子在部分规模下出现计算错误。
cnnlConvolutionBackwardData算子在部分规模下出现计算错误。
cnnlSin_v2和cnnlCos_v2算子在输入数据很大时误差较大。
v1.7.3¶
特性变更¶
以下算子在部分规模下有性能提升:cnnlReduce、cnnlInstanceNormInference、cnnlConvolutionBackwardData、cnnlConvolutionForward、cnnlGaterNd、cnnlMatMul、cnnlOpTensor、cnnlDiv。
cnnlReduce算子进一步提升在输入规模较小时的性能, 并在SUM和MEAN模式支持输入int32数据类型。
cnnlInstanceNormInference算子提升了在部分场景下的性能。
cnnlExp_v2算子在MLU220、MLU270、MLU290上支持float高精度计算模式。
cnnlConvolutionBackwardData算子提升了在部分场景下单batch规模下的性能,并支持custer间H方向和W方向的拆分。
cnnlConvolutionForward算子在部分场景下提升了性能。
cnnlTranspose算子进一步提升在输入规模较小时的性能, 并提升了在部分场景下的性能。
cnnlGaterNd算子在部分场景下提升了性能。
cnnlMatMul算子在部分场景下提升了性能。
cnnlDiv算子提升了在小规模广播场景下的性能。
已修复问题¶
修复了cnnlReduce算子在某些很小规模下会发生core dump的问题。
修复了cnnlStridedSliceBackward算子非必要防呆的问题。
修复了cnnlQuantizeParam算子和cnnlQuantizeStrategy算子关于int31量化问题。
修复了cnnlLrn算子内存开辟策略与使用方式不匹配导致的拷贝溢出问题。
修复了cnnlReduce算子MAX模式下全规约测试精度错误的问题。
修复了cnnlMultiHeadAttnBackwardData算子在MLU370上精度越界的问题。
修复了cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights算子不适配MLUCE3226平台的防呆问题。
修复了cnnlSoftmaxForward算子当计算维度为1且输入数据含有NAN/inf但输出不为NAN的问题。
修复了cnnlUnarySelect算子在MLU370上五级流水改为四级流水性能下降的问题。
修复了cnnlCast算子在MLU370上计算精度错误的问题。
修复了cnnlEmbeddingBackward算子和cnnlEmbeddingForward算子防呆不完备的问题。
修复了cnnlConvolutionBackwardData算子在某些规模下不支持MLUCE3226平台防呆问题。
修复了cnnlSoftplusForward算子对于NAN/INF计算错误的问题。
修复了cnnlConvolutionBackwardFilter算子在MLU270上计算精度错误的问题。
修复了cnnlRNNForwardInference算子在MLU220上计算精度错误的问题。
修复了cnnlIndexPut算子对于0元素检查防呆位置不当的问题。
修复了cnnlConvolutionBackwardFilter算子空指针防呆位置不当的问题。
修复了cnnlMatMul算子在部分规模下性能下降的问题。
修复了cnnlSoftmaxBackward算子在MLU370上精度错误以及防呆缺陷问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlReduce算子在大规模下可能因为运行时间过长出现core dump。
cnnlSoftplusForward算子在200系列上由于激活表的原因导致输入数据小于-7.75时精度错误。
v1.7.2¶
特性变更¶
以下算子在部分规模下有性能提升:cnnlOpTensor、cnnlIndexPut、cnnlInterp_v2、cnnlDiv、cnnlMatMul、cnnlClip、cnnlTranspose、cnnlReduce。
cnnlIndexPut算子提升了在indices是int32并且输入的元素个数超过 \(2 ^{23}\) 次方时的性能。
cnnlInterp_v2算子提升了在cnnlInterpMode_t是CNNL_INTERP_BILINEAR并且ci方向比较小时的性能。
cnnlDiv算子提升了在输入规模较小时的性能。
cnnlMatMul算子提升了在输入规模较小时的性能。
cnnlClip算子提升了在输入规模较小时的性能。
cnnlTranspose算子提升了在输入规模较小时的性能。
cnnlReduce算子提升了在输入规模较小时的性能。
已修复问题¶
修复了cnnlLayerNormForward算子当方差数据存在NaN时,算子结果是NaN而不是0的问题。
修复了cnnlReduce算子在某些很小规模下会发生core dump的问题。
修复了cnnlInterp_v2算子在某些规模下出现core dump的问题。
修复了cnnlLrn算子在MLU270平台出现精度错误的问题。
修复了cnnlCast算子half/float转为uint8发生数据溢出时会导致精度错误的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlReduce算子在大规模下可能因为运行时间过长出现core dump。
cnnlSoftplusForward算子在输入数据小于-7.75时精度错误。
v1.7.1¶
特性变更¶
cnnlIndexPut算子对indices支持传nullptr,并且解除当indices为int32时,intput规模不能超过 \(2 ^{23}\) 的限制。
cnnlInterpBackward算子在CNNL_INTERP_NEAREST模式下,支持输入的cnnlTensorLayout_t是CNNL_LAYOUT_NLC时,对L维度的插值。
cnnlBatchNormForwardInference算子支持了filter或bias其中之一缺省时的计算。
cnnlFusedOpsExecute算子支持了融合batchnorm的filter或bias其中之一缺省时的计算,支持了融合scale的alpha或beta其中之一缺省时的计算。
以下算子在部分规模下有性能提升:cnnlSquare、cnnlConvolutionForward、cnnlConvolutionForwardInference、cnnlConvolutionBackwardData、cnnlBatchNormForwardInference、cnnlBatchNormForwardTraining、cnnlBatchNormBackward、cnnlTranspose、cnnlMatMul、cnnlMatMulInference、cnnlQuantizeMatMul、cnnlBatchMatMul、cnnlAddN、cnnlSoftmaxCrossEntropyWithLogits、cnnlSoftmaxCrossEntropyWithLogits_v2、cnnlReduce、cnnlSoftmaxForward、cnnlExpand、cnnlLayerNormForward。
已修复问题¶
修复了cnnlOpTensor算子计算类型是half时出现计算溢出的问题。
修复了cnnlTopKTensor算子在输入数据中存在NaN或Inf时出现core dump的问题。
修复了cnnlReduce算子部分规模计算错误的问题。
修复了cnnlRNNBackwardData算子部分规模精度错误的问题。
修复了cnnlBatchMatMul算子部分规模在CE3226上计算错误的问题。
修复了cnnlReduce算子输入数据类型为half时计算错误的问题。
修复了cnnlMatMul算子部分规模精度错误的问题。
修复了cnnlConvolutionForward算子depthwise规模下防呆不恰当的问题。
修复了cnnlRNNBackwardWeights算子部分规模在CE3226上精度错误的问题。
修复了cnnlCumsum算子部分规模在CE3226上发生core dump的问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlReduce算子在大规模下可能因为运行时间过长出现core dump。
cnnlSoftplusForward算子在输入数据小于-7.75时精度错误。
cnnlCast算子half/float转为uint8发生数据溢出时会导致精度错误。
v1.7.0¶
特性变更¶
新增算子如下:cnnlSyncBatchnormBackwardReduce、cnnlSyncBatchNormBackwardElemt、cnnlRoiPoolingForward、cnnlRoiPoolingBackward、cnnlFocalLossSigmoidBackward。
新增cnnlInterpBackward_v2接口,相比于cnnlInterpBackward接口新增了scale_factors参数和recompute_scale_factor参数,用于传递缩放系数。
cnnlInterpBackward_v2和cnnlInterpBackward接口参数中的cnnlInterpBackwardMode_t类型新增CNNL_INTERP_BACKWARD_LINEAR和CNNL_INTERP_BACKWARD_TRILINEAR这两种模式。
以下算子在部分规模下有性能提升:cnnlBatchMatMul、cnnlConvolutionBackwardFilter、cnnlConvolutionBackwardData、cnnlMatMul、cnnlTranspose、cnnlPad、cnnlBatchNormForwardInference、cnnlDet、cnnlAdvancedIndex。
cnnlFusedOpsExecute算子对于CNNL_CONV_SCALE_BN_ACTIVATION融合场景支持leakyrelu模式。
cnnlQuantizeMatMul算子支持当输入片上数据类型为int31时,输出片上数据类型为half。
cnnlInterp算子新增在CNNL_INTERP_NEAREST模式下,支持输入的cnnlTensorLayout_t是CNNL_LAYOUT_NLC时,对L维度的插值。
已修复问题¶
修复了cnnlConvolutionBackwardFilter中dilation_h > 1或dilation_w > 1时计算错误的问题。
修复了cnnlBboxOverlaps算子对于输入的第一个维度为0时没有防呆的问题。
修复了cnnlLogicOp算子在输入输出非连续时精度错误的问题。
修复了cnnlFusedOpsExecute算子部分规模精度错误的问题。
修复了cnnlRNNBackwardWeights算子部分规模精度错误的问题。
修复了cnnlRNNBackwardData算子部分规模精度错误的问题。
修复了cnnlReduce算子防呆出错的问题。
修复了cnnlCarafeBackward算子防呆出错的问题。
修复了cnnlStdForward算子在输入值有NAN或INF时计算错误的问题。
修复了cnnlBatchMatMul算子在输入值有NAN或INF时精度错误的问题。
修复了cnnlSoftmaxBackward算子部分规模出现core dump的问题。
修复了cnnlPoolingForward算子部分规模随机精度错误的问题。
修复了cnnlRandGenerateTruncatedNormal算子部分规模精度不达标的问题。
修复了cnnlBatchNormForwardInference算子在输入estimated_var超出1e6时精度不达标的问题。
修复了cnnlConvolutionBackwardFilter算子部分规模出现core dump的问题。
修复了cnnlDynamicStitch算子在输入数据类型为half时计算错误的问题。
修复了cnnlActivationForward算子在cnnlActivationMode_t为CNNL_ACTIVATION_LEAKYRELU时计算错误的问题。
修复了cnnlConvolutionForwardInference算子在输入和滤波的片外数据类型都是float或half,并且没有设置片上数据类型或者片上数据类型设置和片外相同时,部分规模计算错误的问题。
修复了在cnnlConvolutionForwardInference算子和cnnlHostReorderConvData算子配合使用时,部分规模计算出错的问题。两个算子的配合使用具体可参考《寒武纪CNNL用户手册》摆数模块部分。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform算子在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
cnnlLrn算子在MLU270平台部分规模计算错误。
cnnlRNNForwardInference算子在w_desc数据类型为int8的时精度表现比较差。
cnnlFloorMod算子在部分输入值下,精度不达标。
cnnlUnique算子在输入规模较大时,因运行时间过长会导致core dump。
v1.6.1¶
特性变更¶
无。
已修复问题¶
修复了cnnlMatMulInference算子在CE3226上不支持输出为非对称量化模化式的问题。
修复了cnnlFusedOpsExecute算子在CE3226上部分规模下,当CNNL_WDESC为1*1,即矩阵乘模式时不支持输出为非对称量化模式的问题。
修复了cnnlConvolutionBackwardFilter算子的部分规模出现coredump的问题。
修复了cnnlPoolingForward算子在CE3226上五维张量计算错误的问题。
修复了cnnlBatchNormForwardInference算子在输入estimated_var超出1e6的时精度不达标的问题。
修复cnnlConvolutionBackwardData算子在ci/group=1(即depthwise)规模下,缩放系数scale不等于1时的精度问题和滤波片上计算类型为定点时精度越界的问题。
修复了cnnlTrigonForward算子精度异常的问题。
修复了cnnlRNNBackwardData算子在hidden_size值远大于input_size值时精度不达标的问题。
修复了cnnlRandGenerateTruncatedNormal算子精度越界的问题。
修复了cnnlPoolingBackward算子的防呆问题和0元素支持问题。
修复了cnnlPoolingForwardWithIndex算子防呆的问题。
修复了cnnlBatchGatherV2算子的防呆问题。
修复了cnnlPoolingIndex算子的防呆问题。
已知遗留问题¶
cnnlRNNForwardInference算子在w_desc数据类型为int8的时精度表现比较差。
cnnlRNNForwardTraining算在x_desc规模较大时获取的reserve_size错误。
cnnlGetRNNWeightParams接口获取bias_ptr值错误。
cnnlLogicOp算子当输入为离散访存张量时计算错误。
cnnlDynamicStitch算子在输入数据类型为half时计算错误。
cnnlLrn算子在MLU270平台部分规模计算错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform算子在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
cnnlFloorDiv_v2、cnnlFloorDivTrunc算子在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod算子在部分输入值下,精度不达标。
cnnlUnique算子在输入规模较大时,因运行时间过长会导致core dump。
cnnlMatMul算子在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
v1.6.0¶
特性变更¶
新增算子:cnnlSyncBatchNormStats、cnnlSyncBatchNormGatherStatsWithCounts、cnnlSyncBatchNormElemt、cnnlFocalLossSigmoidForward、cnnlInstanceNormBackward、cnnlInstanceNormForward、cnnlCarafeForward、cnnlCarafeBackward、cnnlBboxOverlaps。
cnnlRNNForwardInference特性变更:
新增cnnlSetRNNMathPrec接口来设置计算类型。
新增cnnlGetRNNMathPrec接口来获取计算类型。
新增cnnlSetRNNWeightOrder接口设置多个滤波的顺序。
新增cnnlGetRNNWeightOrder接口获取多个滤波的顺序。
cnnlRNNMaskMode_t新增CNNL_LSTM_MASK_CONST来增加对有const参数的功能支持。
cnnlDataType_t新增CNNL_DTYPE_INT64数据类型:
cnnlScatter、cnnlScatterNd、cnnlScatterRef、cnnlGather、cnnlGatherNd、cnnlGatherV2和cnnlBatchGatherV2的indices支持int64。
cnnlSplit、cnnlConcat、cnnlExpand、cnnlFilll、cnnlCopy、cnnlCast、cnnlPad、cnnlStridedSlice和cnnlStridedSliceBackward的卷积输入支持int64。
以下算子在部分规模下有提升性能:cnnlInterp、cnnlConcat、cnnlSoftmaxForward、cnnlPoolingForward、cnnlMatmulInference、cnnlMatmul、cnnlConvolutionForward、cnnlFusedOpsExecute、cnnlConvolutionForwardInference。
cnnlFusedOpsExecute算子支持convolution操作是depthwise的模式。
在CE3226平台上,cnnlConvolutionForward、cnnlFusedOpsExecute、cnnlConvolutionForwardInference和cnnlPoolingForward支持3-D模式,即支持5维张量操作。
cnnlDeviceType_t新增CNNL_MLU_365_D2、CNNL_MLU_370_X8和CNNL_MLU_370_M8三种板卡的描述。
cnnlInterp接口参数中的cnnlInterpMode_t类型新增CNNL_INTERP_LINEAR和CNNL_INTERP_TRILINEAR这2种模式。
cnnlCast接口参数中的cnnlCastDataType_t类型新增CNNL_CAST_UINT8_TO_INT32、CNNL_CAST_INT32_TO_INT64、CNNL_CAST_INT64_TO_INT32和CNNL_CAST_INT32_TO_BOOL这四种模式。
新增cnnlCreateGroupTensorDescriptors、cnnlSetGroupTensorDescriptors、cnnlDestroyGroupTensorDescriptors:分别用来一次创建、设置和销毁多个tensor的操作。
已修复问题¶
修复了cnnlQuantizeMatMul算子在输入数据类型为float,片上量化类型为int31,且输入张量a和输入张量b均不转置时,部分场景下运行出现core dump的问题。
修复了cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误的问题。
修复了cnnlRNNForwardTraining在部分规模下计算错误的问题。
已知遗留问题¶
cnnlMatMulInference算子在CE3226上不支持输出为非对称量化模式,预计在下个版本修复。
cnnlFusedOpsExecute算子在CE3226上部分规模下(CNNL_WDESC为1*1退化为矩阵乘模式)不支持输出为非对称量化模式,预计在下个版本修复。
cnnlRNNForwardInference算子在w_desc数据类型为int8的时精度表现比较差。
cnnlPoolingForward算子在CE3226上五维张量计算错误,预计在下个版本修复。
cnnlBatchNormForwardInference算子在输入estimated_var超出1e6的时精度不达标。
cnnlRNNForwardTraining接口在x_desc规模较大时获取的reserve_size异常。
cnnlConvolutionBackwardFilter算子的部分规模出现coredump,预计在下个版本修复。
cnnlGetRNNWeightParams接口获取bias_ptr错误。
cnnlLogicOp算子当输入为离散访存张量时计算错误。
cnnlRandGenerateTruncatedNormal算子在部分规模下精度不达标。
cnnlPoolingBackward算子未对stride=0进行防呆,并且在输入或输出张量维度包含0元素时计算错误。
cnnlDynamicStitch算子在输入数据类型为half时计算错误。
cnnlRNNBackwardData算子在hidden_size远大于input_size时精度不达标。
cnnlLrn算子在MLU270平台部分规模计算错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform算子在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
cnnlFloorDiv_v2、cnnlFloorDivTrunc算子在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod算子在部分输入值下,精度不达标。
cnnlUnique算子在输入规模较大时,因运行时间过长会导致core dump。
cnnlMatMul算子在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
v1.5.6¶
已修复问题¶
修复cnnlQuantizeConvolutionForward在量化position溢出时计算错误的问题。
已知遗留问题¶
cnnlRNNForwardInference在w_desc数据类型为int8的时精度表现比较差。
cnnlGetRNNTempSizes在x_desc规模较大时获取的reserve_size值错误。
cnnlGetRNNWeightParams接口在部分场景下获取的bias_ptr值错误。
cnnlLogicOp在输入为离散访存张量时计算错误。
cnnlLrn在MLU270平台部分规模下计算错误。
cnnlFloorDiv_v2、cnnlFloorDivTrunc接口在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod在部分输入值下,精度不达标。
cnnlUnique在输入规模较大时,因运行时间过长会导致core dump。
cnnlAttention在部分规模下,因运行时间过长会导致core dump。
cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlConvolutionForward、cnnlCumsum、cnnlDeconvolution、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
v1.5.5¶
已修复问题¶
修复cnnlQuantizeConvolutionBackwardData在量化position溢出时计算错误的问题。
修复cnnlQuantizeConvolutionBackwardFilter在量化position溢出时计算错误的问题。
修复cnnlQuantizeMatmul在量化position溢出时计算错误的问题。
已知遗留问题¶
cnnlRNNForwardInference在w_desc数据类型为int8的时精度表现比较差。
cnnlGetRNNTempSizes在x_desc规模较大时获取的reserve_size值错误。
cnnlGetRNNWeightParams接口在部分场景下获取的bias_ptr值错误。
cnnlLogicOp在输入为离散访存张量时计算错误。
cnnlLrn在MLU270平台部分规模下计算错误。
cnnlFloorDiv_v2、cnnlFloorDivTrunc接口在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod在部分输入值下,精度不达标。
cnnlUnique在输入规模较大时,因运行时间过长会导致core dump。
cnnlAttention在部分规模下,因运行时间过长会导致core dump。
cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlConvolutionForward、cnnlCumsum、cnnlDeconvolution、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
v1.5.4¶
特性变更¶
优化cnnlConvolutionBackwardFilter在depthwise模式下的性能。
优化cnnlActivationForward在输入规模较小时的性能。
优化cnnlBatchMatmul在输入张量a转置模式下的性能。
优化cnnlMatMul在部分场景下的性能。
优化cnnlSplit在部分场景下的性能。
优化cnnlPoolingForwardWithIndex在部分场景下的性能。
优化cnnlConvolutionBackwardData在部分场景下的性能。
优化cnnlTranspose在输入参数permute为021时的性能。
优化cnnlHardtanhBackward在部分场景下的性能。
优化cnnlRandMakeMTGP32KernelState接口的性能。
已修复问题¶
修复cnnlFloorDivTrunc在输入为half数据类型下计算错误的问题。
修复cnnlBatchNormBackward在部分场景下计算错误的问题。
修复cnnlStdForward在部分输入值下精度溢出的问题。
修复cnnlQuantizeMatmul在输入数据类型为float,片上量化类型为int31,且输入张量a和输入张量b均不转置时,部分场景下运行出现core dump的问题。
修复cnnlActivationForward在leaky relu模式下,输入参数coef为0时,计算错误的问题。
修复cnnlCast在int32_to_int8模式下精度不达标的问题。
修复cnnlLrn在部分规模下运行出现core dump的问题。
修复cnnlTrigonForward在部分输入值下精度不达标的问题。
修复cnnlDynamicStitch在输入数据类型为half时,计算错误的问题。
修复cnnlBatchNormForwardTraining、cnnlBatchNormForwardInference在MLU290上部分输入值下精度不达标的问题。
修复cnnlRNNBackwardData在部分规模下计算错误的问题。
修复cnnlConcat在部分规模下性能下降的问题。
修复cnnlPoolingForward在CE3226平台,输入张量x的layout为NDHWC时部分规模下计算错误的问题。
修复cnnlActivationForward在GELU模式下,部分输入值精度不达标的问题。
已知遗留问题¶
cnnlRNNForwardInference在w_desc数据类型为int8的时精度表现比较差。
cnnlGetRNNTempSizes在x_desc规模较大时获取的reserve_size值错误。
cnnlGetRNNWeightParams接口在部分场景下获取的bias_ptr值错误。
cnnlLogicOp在输入为离散访存张量时计算错误。
cnnlLrn在MLU270平台部分规模下计算错误。
cnnlFloorDiv_v2、cnnlFloorDivTrunc接口在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod在部分输入值下,精度不达标。
cnnlUnique在输入规模较大时,因运行时间过长会导致core dump。
cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
v1.5.3¶
特性变更¶
无。
已修复问题¶
修复cnnlMaximum、cnnlMinimum在广播模式的部分场景下计算错误的问题。
修复cnnlBatchNormForwardTraining在MLU290上部分输入值导致精度不达标的问题。
已知遗留问题¶
cnnlQuantizeMatmul在输入数据类型为float,片上量化类型为int31,且输入张量a和输入张量b均不转置时,部分场景下运行出现core dump。
cnnlFloorDiv_v2、cnnlFloorDivTrunc接口在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod在部分输入值下,精度不达标。
cnnlUnique在输入规模较大时,因运行时间过长会导致core dump。
cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
cnnlRNNForwardTraining在部分规模下计算错误。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
v1.5.2¶
特性变更¶
优化cnnlConvolutionBackwardData在stride参数等于1时部分场景下的性能。
优化cnnlConvolutionBackwardFilter在输入张量batch维度较大时的性能。
优化cnnlMatmul在部分场景下的性能。
优化cnnlBatchMatmul在部分场景下的性能。
优化cnnlFill在输入规模较大时的性能。
优化cnnlSoftmaxForward在MEDIUM_DIMENSION和LOW_DIMENSION模式下的性能。
优化cnnlSoftmaxBackward在LOW_DIMENSION模式下的性能。
优化cnnlReduce在NORM1和NORM2模式下的性能。
优化cnnlMomentum在输入规模较小时的性能。
优化cnnlRandGenerateUniform在MTGP32模式下的性能。
新增cnnlRandMakeMTGP32Constants、 cnnlRandMakeMTGP32KernelState、cnnlRandGetMTGP32KernelParamSize和cnnlRandGetMTGP32HostParam接口用于实现在host端初始化MTGP32状态并将状态拷贝到device上。
cnnlRandGenerateUniform支持在device端初始化状态参数。参数state设置为NULL即是默认在device端初始化状态参数,否则需要调用cnnlRandMakeMTGP32KernelState接口在host端初始化状态参数并拷贝到device上。
提升cnnlTrigonForward算子在部分区间的精度。
新增cnnlSetNmsDescriptor_v3接口,相比于v2接口增加cnnlNmsAlgo_t和offset参数,用以支持Mask RCNN和Faster RCNN网络。
新增cnnlMulN算子。
已修复问题¶
修复cnnlTopKTensor在输入值有重复数据时,运行时出现RuntimeError的问题。
修复cnnlMasked在fill模式下,mask为0且value为-INF时,计算错误的问题。
修复cnnlExp在MLU220、MLU270、MLU290上输入值为负数时,精度不达标的问题。
修复cnnlOpTensor在广播模式下使用stride特性时,计算错误的问题。
修复cnnlConvolutionForward在非对称量化模式下,部分场景计算错误的问题。
修复cnnlConvolutionForward在MLU370上浮点输入时,随机计算错误的问题。
修复cnnlDeconvolution在部分场景下计算错误的问题。
修复cnnlNms在MLU370上iou_threshold参数为0时,计算错误的问题。
修复cnnlMatmul在浮点输入下且输入左矩阵不转置时,部分场景计算错误的问题。
修复cnnlFloorDivTrunc在输入值有-NAN时,计算错误的问题。
修复cnnlStdForward、cnnlSmoothL1LossBackward、cnnlFloorDiv在输入值有NAN或INF时计算错误的问题。
修复cnnlRNNForwardInference在部分场景下计算错误的问题。
修复cnnlConvolutionBackwardFilter在部分场景下随机错误的问题。
修复cnnlReciprocal在输入值为负数时,计算错误的问题。
修复cnnlStridedSlice在部分规模下计算错误的问题。
修复cnnlPoolingBackward在输入张量diff_y的维度大于张量diff_x的维度时,异常报错的问题。
修复cnnlRandGenerateUniform随机数质量问题。
已知遗留问题¶
cnnlFloorDiv_v2、cnnlFloorDivTrunc接口在fast模式下,对部分输入值精度误差较大。如对精度有高需求,建议使用high_precision模式。
cnnlFloorMod在部分输入值下,精度不达标。
cnnlUnique在输入规模较大时,因运行时间过长会导致core dump。
cnnlMatMul在MLU370上,输入为量化类型时,部分场景下会出现随机错误。
cnnlRNNForwardTraining在部分规模下计算错误。
cnnlFusedOpsExecute在convolution融合BatchNorm模式下,部分测例精度不达标。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlRandGenerateUniform在MLU200系列MTGP32模式下存在性能问题,在MLU300系列Fast模式下存在性能问题。
v1.5.1¶
特性变更¶
cnnlIndexPut支持accumulate参数等于true,该模式下输入张量values会累加到输出张量output上。
新增cnnlUpdateContextInformation接口,配合CNDrv中的cnSetCtxConfigParam接口使用,用于更新cnnlHandle中设备信息相关参数。
优化cnnlAssignTo、cnnlConcat在小规模下的性能。
优化cnnlPoolingForwardWithIndex在ResNet网络中的性能。
优化cnnlMatmul在MLU370上的性能。
优化cnnlSoftmaxForward在部分规模下的性能。
提升cnnlExp在MLU220、MLU270、MLU290上的精度。
cnnlTopKTensor解除k参数的规模限制。
已修复问题¶
修复cnnlDeconvolution、cnnlConvolutionForward在部分规模下计算错误的问题。
修复cnnlRNNForwardInference不支持hidden_size参数等于256的问题。
修复cnnlSign在输入数据为0时输出错误的问题。
修复cnnlScatter不支持dim参数为负数的问题。
修复cnnlSoftmaxBackward在输入值小于0场景下,精度异常的问题。
修复cnnlMatmulInference、cnnlTopKTensor在ubuntu18、debian9、debian10操作系统上计算错误的问题。
修复cnnlSmoothL1LossForward在输入值存在NAN或者INF时计算错误的问题。
修复cnnlCreate随机初始化失败的问题。
修复cnnlConvolutionForward在group等于1的合法输入下报错的问题。
修复cnnlCropAndResize在部分场景下计算错误的问题。
修复cnnlSparseSoftmaxCrossEntropyWithLogits在输入非法label时,输出错误的问题。
修复cnnlPoolingForward在NCHW layout下部分场景计算错误的问题。
修复samples/opTensor_sample路径下cnnlOpTensor的开发样例,在输入为half数据类型时,计算错误的问题。
修复cnnlFloorDivTrunc在输入为int32数据类型且除数为0时,或输入值有INF时,计算错误的问题。
修复cnnlSmoothL1LossForward在输入值有NAN或者INF时,计算错误的问题。
修复cnnlRNNForwardTraining在MLU220上计算结果错误的问题。
修复cnnlConvolutionBackwardData在MLU370上部分规模随机计算错误的问题。
已知遗留问题¶
随机数算子在MLU370上质量较低。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。下面算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum、cnnlFloorDiv、cnnlStdForward、cnnlSmoothL1LossBackward。
cnnlFloorDivTrunc在输入值有-NAN时,计算错误。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt。
cnnlOpTensor在广播模式下,使用stride特性时,计算错误。
v1.5.0¶
特性变更¶
CNNL支持CE3226平台。
新增cnnlOpTensor开发样例代码, 代码路径见samples/opTensor_sample。
下面算子新增非对称量化支持:cnnlPoolingForward、cnnlMatmulInference、cnnlMatmul、cnnlConvolutionForward、cnnlFusedOpsExecute、cnnlConvolutionForwardInference、cnnlDeconvolutionInference、cnnlDeconvolution,具体可参考《寒武纪CNNL用户手册》中“定点量化”章节。
新增算子:cnnlL1LossBackward、cnnlRNNForwardTraining、cnnlRNNBackwardData、cnnlRNNBackwardWeights、cnnlDCNForward、cnnlDCNBackwardData、cnnlDCNBackwardWeight、cnnlPow、cnnlIsNan、cnnlMSELoss、cnnlMSELossBackward、cnnlFloorDivTrunc、cnnlCeil。
下面算子支持NDHWC layout:cnnlConvolutionBackwardFilter、cnnlQuantizeConvolutionBackwardFilter、cnnlAdaptivePoolingForward在average模式下、cnnlAdaptivePoolingBackward、cnnlPoolingForwardWithIndex、cnnlPoolingBackward、cnnlConvolutionBackwardData、cnnlQuantizeConvolutionBackwardData、cnnlDeconvolutionInference、cnnlQuantizeDeconvolution、cnnlQuantizeConvolutionForward。
cnnlDeconvolution接口解除在NDHWC layout下group = 1的限制。
cnnlConvolutionForward、cnnlConvolutionForwardInference接口解除在NDHWC layout下group = 1的限制,并且支持int31输入数据类型。
cnnlPoolingForwardWithIndex、cnnlPoolingBackward、cnnlPoolingForward接口在NDHWC layout下新增ceil_mode模式支持, ceil_mode可通过cnnlSetPoolingNdDescriptor_v2接口设置。
新增cnnlBatchGatherV2接口替代cnnlGatherV2,相较于cnnlGatherV2增加了batch_dims参数,可通过batch_dims参数指定gather操作的batch维度大小。
新增cnnlResetTensorDescriptor接口,用于恢复tensor descriptor为默认值。
cnnlRNNForwardInference新增CNNL_LSTM_TANH模式。
cnnlMatMulInference新增支持CNNL_MATMUL_DESC_BIAS_POINTER模式。
cnnlTransform新增支持int32数据类型。
cnnlIndexPut新增indices广播支持,并且indices支持uint8数据类型。
cnnlReduce的AND和OR模式新增支持uint8数据类型。
cnnlAdvancedIndex接口支持indices为负数, indices为int数据类型时,新增slice功能支持。
cnnlConvolutionForward和cnnlQuantizeConvolutionForward接口bias支持ARRARY layout。
cnnlBatchNormForwardTraining算子提升了精度。
已修复问题¶
修复cnnlMatmul算子在部分规模下相比CNNL v1.4.3有精度下降问题。
修复cnnlInTopK算子在输入值有NAN或者INF时计算错误的问题。
修复cnnlSelect算子在部分规模下core dump的问题。
修复cnnlNms、cnnlNms_v2算子在部分输入值下计算错误的问题。
已知遗留问题¶
随机数算子在MLU370上质量较低。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。部分算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum、cnnlPoolingForwardWithIndex。
cnnlSparseSoftmaxCrossEntropyWithLogits算子在输入非法label时,输出错误。
cnnlBceWithLogits算子部分规模在MLU220 EDGE平台下计算错误。
下面算子在CE3226平台上有遗留问题:cnnlBatchMatmulBCast、cnnlBceLoss、cnnlBceWithLogits、cnnlBceWithLogitsBackward、cnnlConvolutionBackwardFilter、cnnlCumsum、cnnlEmbeddingBackward、cnnlLayerNormBackward、cnnlMedian、cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights、cnnlNms、cnnlQuantizeMatmulBcast、cnnlRandGeneratorUniform、cnnlRandGeneratorUniformInt、cnnlPoolingForwardWithIndex。
v1.4.4¶
特性变更¶
无。
已修复问题¶
修改cnnlNms_v2算子实现,提升在Pytorch YOLOv5场景下的网络精度。
修复cnnlRoiAlignForward算子在部分规模下计算错误的问题。
修复支持stride特性的算子在部分stride参数下计算错误的问题。
修复cnnlSelect算子在输入规模较小时的计算错误问题。
修复cnnlInTopK算子在输入数据中有NAN时的计算错误问题。
已知遗留问题¶
cnnlMatmul算子在部分规模下相比CNNL v1.4.3有精度下降问题。
随机数算子在MLU370上质量较低。
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。部分算子在输入值有NAN或者INF时计算错误:cnnlMaximum、cnnlMinimum、cnnlPoolingForwardWithIndex。
cnnlBceWithLogits算子部分规模在MLU220 EDGE平台下计算错误。
v1.4.3¶
特性变更¶
优化算子在部分规模下的性能:cnnlConvolutionForward、cnnlTranspose。
已修复问题¶
修复cnnlOpTensor算子在beta参数值为NAN情况下计算得到NAN的问题。修复后,当beta等于NAN时等效为0不参与计算。
修复cnnlConvolutionBackwardFilter算子在MLU370平台上且group!=1或depthwise的情况下,不支持输入和滤波为浮点的问题。
修复cnnlMatmulInference、cnnlQuantizeMatmul、cnnlMatmul算子误报“do not need to allocate extra workspace” warning打印的问题。
修复在MLU220‑EDGE平台上运行出现cnModuleGetKernel相关错误信息的问题。
修复cnnlSelect算子在输入值有NAN或者INF时计算错误的问题。
修复cnnlQuantizeConvolutionForward算子在部分规模下,且输入和滤波数据类型为定点时的计算错误问题。
修复cnnlNumTrue算子在输入规模较大时出现的计算错误问题。
修复cnnlBceWithLogits算子在输入值范围较大时的精度问题。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。部分算子在输入值有NAN或者INF时计算错误:cnnlInTopK、cnnlMaximum、cnnlMinimum。
cnnlBceWithLogits算子部分规模在MLU220-EDGE平台下计算错误。
v1.4.2¶
特性变更¶
优化算子在部分规模下的性能:cnnlSoftmaxForward。
已修复问题¶
无。
已知遗留问题¶
在链接静态库libcnnl.a时,需要添加编译参数–whole-archive(
-Wl,--whole-archive libcnnl.a -Wl,--no-whole-archive),否则cnnlMatMulInference、cnnlConvolutionBackwardData、cnnlQuantizeMatMul算子运行会出错。在MLU220-EDGE平台上运行会报cnModuleGetKernel相关错误信息,但不影响计算结果。
cnnlConvolutionBackwardFilter算子在MLU370平台上且group!=1或depthwise的情况下,暂不支持输入和滤波为浮点的情况。
cnnlQuantizeConvolutionForward算子暂不支持输入和滤波为定点的情况。
部分算子对输入数据中存在INF或NAN的情况出现计算错误:cnnlSelect、cnnlMaximum、cnnlMinimum、cnnlFill、cnnlOpTensor。
v1.4.1¶
特性变更¶
优化算子在部分规模下的性能:cnnlSoftmaxForward、cnnlTranspose、cnnlStridedSlice、cnnlQuantizeMatmul、cnnlQuantizeBatchMatmul。
优化cnnlConvolutionForward算子在MLU370上且输入输出为浮点数据类型时的性能。
cnnlConvolutionForward算子新增支持bias_desc为一维的情况。
新增cnnlResetTensorDescriptor接口可用于重置张量描述符中的参数值成初始默认值。
已修复问题¶
修复cnnlBceWithLogits算子在输入值较大时的精度问题。
修复cnnlConvolutionForward算子在部分规模下的计算错误问题。
修复cnnlSetTensorDescriptor接口会将tensor描述符中所有参数值重置的问题。
已知遗留问题¶
无。
v1.4.0¶
特性变更¶
新增支持MLU370平台。
新增支持round-half-up模式发布包,具体可参考《寒武纪CNNL用户手册》软件包发布信息部分。
新增算子:cnnlRoiAlignForward、cnnlRoiAlignBackward、cnnlAdvancedIndex、cnnlIndexPut、cnnlKthValue、cnnlRandGenerateMultinomial。
cnnlQuantizeConvolutionForward、cnnlQuantizeConvolutionBackwardData、cnnlQuantizeConvolutionBackwardFilter、cnnlQuantizeMatmul、cnnlQuantizeBatchMatmul、cnnlQuantizeBatchMatmulBCast接口新增支持定点输入数据类型,具体可参考《寒武纪CNNL开发者手册》。
部分算子支持stride非连续的情况:cnnlAbs, cnnlActivationForward, cnnlAddcdiv, cnnlAddcmul, cnnlCast, cnnlClip, cnnlCopy, cnnlCos, cnnlDiv, cnnlErf, cnnlExp, cnnlFill, cnnlFloor, cnnlIndexFill, cnnlLog, cnnlLogicOp, cnnlMasked, cnnlNegTensor, cnnlOpTensor, cnnlPowN, cnnlRound, cnnlScatter, cnnlSign, cnnlSin, cnnlSqrt, cnnlTri。
cnnlConvolutionForward、cnnlConvolutionBackwardData、cnnlConvolutionBackwardFilter、cnnlMatmul、cnnlBatchMatmul、cnnlBatchMatmulBCast、cnnlDeconvolution接口在MLU370平台上新增支持浮点数据类型,具体可参考《寒武纪CNNL开发者手册》。
cnnlScatter算子新增支持数据类型:bool、uint8、uint32、int16、int8。
新增摆数模块,推荐在推理场景中,在每一个卷积类算子计算之前都使用摆数模块对滤波或偏置进行预处理。目前,该功能支持Convolution和Deconvolution算子。新增接口包括:cnnlSetConvolutionDescriptorReorderType、cnnlGetConvolutionDescriptorReorderType、cnnlGetReorderConvDataSize、cnnlHostReorderConvData、cnnlSetDeconvolutionDescriptorReorderType、cnnlGetDeconvolutionDescriptorReorderType、cnnlGetReorderDeconvolutionDataSize、cnnlHostReorderDeconvolutionData,具体可参考《寒武纪CNNL用户手册》摆数模块部分。
新增cnnlSparseSoftmaxCrossEntropyWithLogits_v2接口,可选择高精度或高性能模式。
cnnlUnarySelect算子输入输出新增int8、int16、int32数据类型支持,index新增bool数据类型支持。
cnnlPoolingForward算子新增int8数据类型支持。
cnnlFusedOp中CNNL_ACTIVATION_CONV_BN_ACTIVATION_MASKZERO模式下,新增对输入和输出为float数据类型的支持。
新增cnnlSetGenCaseMode函数,用于设置抓取算子调试信息工具的功能等级。
已修复问题¶
无。
已知遗留问题¶
cnnlBceWithLogits算子在部分规模和参数下出现计算错误问题。
cnnlStridedSlice算子在部分规模和参数下出现计算错误问题。
cnnlSetTensorDescriptor接口会将tensor描述符中所有参数重置,包括onchip_datatype以及量化参数position和scale,需要请用户注意接口调用顺序或不要对相同的tensorDesc多次调用cnnlSetTensorDescriptor接口。
v1.3.3¶
特性变更¶
无。
已修复问题¶
修复cnnlReduce算子cnnlReduceOp_t为CNNL_REDUCE_ADD模式时,部分规模出现计算错误的问题。
修复cnnlNumTrue算子在部分规模出现计算错误的问题。
已知遗留问题¶
无。
v1.3.2¶
特性变更¶
优化以下算子在部分规模下的性能,主要提升了Fairseq网络性能:cnnlQuantizeMatmul、cnnlQuantizeBatchMatmul、cnnlScatter、cnnlTranspose、cnnlSoftmaxForward、cnnlSoftmaxBackward、cnnlPad、cnnlAdvanceIndex、cnnlGather、cnnlReduce、cnnlLayerNormForward、
部分算子支持tensor stride不连续的情况。
已修复问题¶
修复cnnlSoftmaxForward算子在LOW模式且输入数据中有-inf下的精度问题。
修复cnnlBceWithLogits算子在输入值较大情况下的精度问题。
已知遗留问题¶
无。
v1.3.1¶
特性变更¶
新增算子:cnnlBceLoss、cnnlBceLossBackward。
将cnnlLog算子在支持的float数据类型输入范围从[1e-8, 2e5]扩大到[1e-20, 2e5]。
将cnnlExp算子支持的float数据类型输入范围从[-15.0, 15.0]扩大到[-90.0, 50.0]。
将cnnlDiv算子支持的float数据类型输入范围从[-1e10,-1e-10][1e-10,1e10]扩大到[-1e10,-1e-20][1e-20,1e10], 支持的half数据类型输入范围从[-500,-1e-4][1e-4,500]扩大到[-65504,-1e-4][1e-4,65504]。
提升了cnnlLayerNormForward算子在half数据类型下的精度。
新增cnnlSetGenCaseMode接口用于在运行时控制GEN_CASE功能的启停。
已修复问题¶
修复cnnlConvolutionForward算子在部分规模下出现计算错误的问题。
修复cnnlConvolutionBackwardData算子在部分规模下出现计算错误的问题。
修复cnnlSoftmaxCrossEntropyWithLogits算子在部分规模下精度不达标的问题。
修复cnnlQuanizeMatmul和cnnlQuanizeBatchMatmul算子在部分规模下出现计算错误的问题。
修复cnnlPoolingForwardWithIndex算子在windows大小为1时出现的计算错误问题。
修复cnnlPowR和cnnlPowN算子在输入为0时的精度不达标的问题。
修复cnnlSoftmax算子在部分规模和输入范围下出现的性能下降问题。
修复aarch64发布包下的samples/cnnl/build.sh不支持交叉编译的问题。
已知遗留问题¶
无。
v1.3.0¶
特性变更¶
新增算子:cnnlScatterNd、cnnlAdaptivePoolingBackward、cnnlAdaptivePoolingForward、cnnlFusedOpsExecute、cnnlInTopK、cnnlIndexAdd、cnnlCTCLoss、cnnlQR、cnnlReciprocal、cnnlSvd、cnnlRNNForwardInference、cnnlInverse、cnnlThreshold。
新增cnnlBitCompute_v2接口,为BitCompute操作添加了对广播形状的支持。
新增cnnlFrozenBatchNormBackward算子,可用于F-RCNN等网络fine-tuning阶段的反向传播,对应的前向算子是cnnlBatchNormForwardInference。
cnnlClip算子新增INT32数据类型支持。
新增cnnlGetDynamicStitchWorkspaceSize接口。
新增cnnlConvolutionForwardInference算子,输入和输出张量支持定点数据类型。
新增cnnlMatmulInference算子,输入和输出张量支持定点数据类型。
新增cnnlFusedOpsExecute融合算子。
cnnlConvolutionForward算子增加group功能,即支持group不等于1或ci的情况。
cnnlConvolutionBackwardData算子增加group功能,即支持group不等于1或ci的情况
cnnlConvolutionBackwardFilter算子增加group功能,即支持group不等于1或ci的情况。
cnnlPoolingForward输入输出张量新增支持定点数据类型。
新增cnnlSpace2batchNd_v2、cnnlBatch2spaceNd_v2算子接口。
cnnlMultiHeadAttnForward、cnnlMultiHeadAttnBackwardData、cnnlMultiHeadAttnBackwardWeights算子重构并修改接口,支持dropout和mask功能。
新增cnnlInterp_v2接口,支持scale_factors和recompute_scale_factor参数输入。
cnnlBatchNormForwardTraining、cnnlBatchNormForwardInference、cnnlBatchNormBackward算子输入张量增加NLC layout支持。
cnnlTri算子支持多维输入。
cnnlGatherNd算子支持bool数据类型输入。
cnnlPad支持负数Pad,支持INT32、INT16、INT8、BOOL数据类型。
cnnlDeconvolution算子输入输出张量支持定点数据类型。
cnnlTranspose在bert网络的部分cases性能提升40%~90%,mobileNet网络部分cases,性能提升70%~90%。
cnnlTranspose针对大规模四维以上规模进行优化,部分场景下性能提升70%左右。
优化了cnnlConvolutionForward算子在部分规模下的性能。
优化了cnnlConvolutionBackwardData算子在部分规模下的性能。
优化了cnnlMatmul算子在部分规模下的性能,在bert网络场景下部分规模性能提升10%以上。
优化了cnnlDynamicStitch算子Host侧性能,host端性能提升约200%。
优化了cnnlSplit算子性能,在MaskRCNN场景下部分规模性能优化了100倍左右。
cnnlPad针对四维Tensor对前三维都补pad的情况下进行了性能优化。
cnnlReduce算子中仅仅CNNL_REDUCE_ADD、CNNL_REDUCE_AVG模式支持用户通过设置reduce_desc->tensor_type的数据类型来选择高精度或高性能模式,相比较1.2.x版本高性能模式精度有一定下降。cnnlReduce算子其他模式不支持该功能。
新增下列算子接口供用户选择高精度或高性能模式:
cnnlSoftmaxCrossEntropyWithLogits_v2
cnnlArange_v2
cnnlSetActivationDescriptor_v2
cnnlDiv_v2
cnnlDivNoNan_v2
cnnlFloorDiv_v2
cnnlPowR_v2
cnnlPowN_v2
cnnlExp_v2
cnnlLog_v2
cnnlSin_v2
cnnlCos_v2
cnnlSqrt_v2
cnnlRsqrt_v2
cnnlErf_v2
已修复问题¶
无。
已知遗留问题¶
CNNL该版本x86发布包不支持在MLU220 M.2设备上运行。
CNNL该版本aarch64发布包下的samples/cnnl/build.sh不支持交叉编译。
CNNL该版本的.a发布件将在后续版本删除,不建议用户使用。
v1.2.3¶
特性变更¶
将cnnlDiv算子在float数据类型下的输入y的数据范围扩大到 [1e-10, 1e10]。
将cnnlSqrt算子在float数据类型下的输入x的数据范围扩大到 [1e-10, 1e10]。
将cnnlActivationForward算子在CNNL_ACTIVATION_SIGMOID模式下float数据类型的输入x的数据范围扩大到 [-60, 1e20]。
已修复问题¶
下面问题已修复:
修复cnnlQuantizeBatchMatmul和cnnlQuantizeBatchMatmulBcast算子在scale参数不等于1时的精度问题。
修复cnnlDynamicStitch算子在输入为零元素时的计算错误问题。
修复cnnlBceWithLogits算子在输入filter和输入pos_filter需要广播时的计算错误问题。
修复cnnlConvolutionForward算子在部分规模下的计算错误问题。
已知遗留问题¶
cnnlMultiHeadAttn系列算子目前接口和功能存在问题,建议暂时不要使用该系列算子。
v1.2.2¶
特性变更¶
新增cnnlGetNmsWorkspaceSize_v2接口。
已修复问题¶
下面问题已修复:
修复cnnlPoolingForward算子在输入为零元素情况下计算错误问题。
修复cnnlConvolutionBackwardFilter在ci/group=1(即depthwise)的部分规模下出现计算错误的问题。
修复cnnlNms_v2算子在部分情况下精度不达标的问题。
修复cnnlBatchNormForwardTraining算子在moving_mean和moving_var为NULL时出现coredump的问题。
修复cnnlNlllossForward和cnnlNlllossBackward算子在ignore_index参数大于输入C维度的值,以及输入C维度取值较大的情况下出现计算错误的问题。
修复cnnlPoolingForward在pool3d模式的部分场景下的计算错误问题,并对大于5维的输入增加防呆。
修复cnnlBitCompute_v2算子在optype为CNNL_BNOT_OP时,且两个输入的size都为1时报错的问题。
修复cnnlQuantizeConvolutionForward算子在某些规模下出现的计算错误问题。
修复cnnlOpTensor算子alpha1、alpha2、beta系数不为1、1、0时候的精度问题。
修复cnnlPowR算子在输入x维度为1、数据类型为half,且输入y为1.0时出现的计算错误问题。
修复cnnlPoolingForward算子在kx和ky为1并且pad不为0情况下的计算错误问题。
修复cnnlBecWithLogits算子在输入数据范围超出[-7,7]时的精度问题,目前可支持[-103, 16]的数据范围支持。
修复cnnlNms_v2算子在计算过程可能修改confidence值的问题,并增加使用了workspace参数。
已知遗留问题¶
cnnlMultiHeadAttn系列算子目前接口和功能存在问题,建议暂时不要使用该系列算子。
v1.2.1¶
特性变更¶
cnnlQuantizeMatmul算子性能优化,在 gepb 模式case性能最高提升30 %。
cnnlTranspose算子性能优化,对于bert网络的部分cases性能最高能提升90%。
cnnlConvolutionBackwardFilter接口algo为CNNL_CONVOLUTION_BWD_FILTER_ALGO_GEMM时部分规模性能最高提升50%。
cnnlConvolutionBackwardFilter算子在group_count=ci时的数据类型支持int31/half/float。
新增cnnlBitCompute_v2接口,支持广播。
新增cnnlNms_v2和cnnlSetNmsDescriptor_v2接口。
已修复问题¶
下面问题已修复:
修复cnnlBceWithLogits算子使用输入的内存空间存储中间计算结果时,导致修改用户内存中的数据的问题。
修复cnnlBatchNormBackward算子混合精度以及half类型输入 saved_mean为NULL时计算错误问题。
修复cnnlConvolutionForward在某些场景下计算错误的问题。
修复cnnlConcat 支持int31 数据类型防呆不全的问题。
修复cnnlConvolutionBackwardData在某些规模下当输出diff_x的layout是HWCN时输出结果错误的问题。
修复cnnlArange 在 int32数据类型下,非法拦截 (end - start) < step 情况的问题。
修复cnnlOpTensor在特定规模下出现的 Check failed: workspace != NULL的问题。
添加cnnlConvolutionForward算子防呆,拦截tensor维度不等于4或5的场景。
添加cnnlPoolingForward算子防呆,防止池化核尺寸超出规模限制。
添加cnnlConvolutionForward中conv3d规模防呆。
修复cnnlBitCompute算子不支持广播输入的问题,需要使用cnnlBitCompute_v2接口,原cnnlBitCompute接口不建议使用。
修复cnnlNms存在D2H异步拷贝以及修改张量描述符的行为,需要使用cnnlNms_v2和cnnlSetNmsDescriptor_v2接口,原cnnlNms接口不建议使用。
修复cnnlConvolutionBackwardData在ci/group=1(即depthwise)规模下,不允许输入类型是浮点数的问题。
修复cnnlQuantizeMatmul算子在scale!=1时case精度不达标的问题。
修复cnnlBatchNormBackward算子在特定规模下得计算错误问题。
将cnnlConvolutionBackwardFilter算子在特定规模下使用的LocalMem大小减少为3M,不超过驱动默认大小。
已知遗留问题¶
cnnlNlllossForward和cnnlNlllossBackward算子目前不支持ignore_index参数大于输入C维度的值,以及输入C维度取值较大的情况。
cnnlBatNormForward算子在moving_mean和moving_var都为NULL,且输入C维度不为64对齐时,在MLU290平台上出现coredump。
cnnlBitCompute_v2算子在optype=CNNL_BNOT_OP时,且两个输入的size都为1时报错。
cnnlMultiHeadAttn系列算子目前接口和功能存在问题,建议暂时不要使用该系列算子。
v1.2.0¶
特性变更¶
cnnlStatus_t新增CNNL_STATUS_NUMERICAL_OVERFLOW类型。
新增cnnlGetVersion接口用于获取CNNL当前版本号。
tensor_desc新增onchip_dtype。
新增算子如下:
cnnlQuantizeParam
cnnlQuantizeMatMul
cnnlQuantizeBatchMatMulBCast
cnnlQuantizeBatchMatMul
cnnlQuantizeConvolutionForward
cnnlQuantizeConvolutionBackwardData
cnnlQuantizeConvolutionBackwardFilter
cnnlMultiHeadAttnForward
cnnlMultiHeadAttnBackwardData
cnnlMultiHeadAttnBackwardWeights
cnnlCropAndResize
cnnlCropAndResizeBackwardBoxes
cnnlCropAndResizeBackwardImage
cnnlSpace2batchNd
cnnlBatch2spaceNd
cnnlNanInf
cnnlNormalize
cnnlApplyCenterRMSProp
cnnlApplyAdaMax
cnnlPoolingForwardWithIndex
cnnlDeconvolution
下面接口做如下变更,变更后与CNNL v1.1.x不兼容:
cnnlNms 接口增加 nms_desc 参数。
cnnlEmbeddingBackward 接口增加 workspace 和 workspace_size 参数。
cnnlSetConvolutionDescriptor 接口增加 compute_type 参数。
cnnlGetConvolutionForwardWorkspaceSize 接口增加 bias 参数。
cnnlSoftplusForward 接口增加 beta 和 threshold 参数。
cnnlGetUniqueWorkSpace 接口增加 unique_desc 和 input_sesc 参数,size 类型从 int 修改为 size_t。
cnnlUniqueGetOutLen 接口 gsh_data 类型从 float*修改为 void*。
cnnlUnique 接口 gsh_data 类型从 float* 修改为 void*,增加 output_counts参数。
cnnlPad 接口删除 workspace 和 workspace_size 参数。
cnnlGaterNd 接口删除 workspace 和 workspace_size 参数。
枚举类型 cnnlQuantifyStrategyMode_t 变更为 cnnlQuantizeStrategyMode_t。
枚举类型 cnnlQuantifyStrategyMaxBitwidth_t 变更为 cnnlQuantizeStrategyMaxBitwidth_t。
结构体类型 cnnlQuantifyStrategyParam_t 变更为 cnnlQuantizeStrategyParam_t。
接口名 cnnlGetQuantifyStragyWorkspaceSize 变更为 cnnlGetQuantizeStragyWorkspaceSize。
接口名 cnnlQuantifyStrategy 变更为 cnnlQuantizeStrategy。
接口名 cnnlQuantifyOffline 变更为 cnnlQuantizeV1,且接口增加 mode 参数。
接口名 cnnlQuantifyOnlineline 变更为 cnnlQauntizeV2,且接口增加 mode、offset 参数,删除 workspace、 workspace_size、 compute_scale 参数。
由于功能变更,下列接口已废弃并不再支持:
cnnlGetPadWorkspace
cnnlGetGatherNdWorkspaceSize
cnnlGetQuantifyOnlineWorkspaceSize
cnnlAsStride
算子新增模式或限制解除:
cnnlActivationBackward新增gelu_backward模式。
cnnlBceWithLogitsBackward支持grad和input维度expand。
cnnlBitCompute新增bnot模式并且新增bool、uint8数据类型支持。
cnnlGatherNd支持indice中存在0元素特性。
cnnlQuantizeParam新增asymmetrical量化模式。
cnnlReduce算子在L1L2Norm模式下,解除多轴规约规模限制。
cnnlUnique新增sorted、return_counts功能,新增unsort_recerse模式。
Convolution新增conv3d支持。
Pooling Forward新增pool3d支持。
Mtrix-to-Matrix Multiplication新增gepp、gepb、gemm等模式, 并支持gemm ux和bias融合。
cnnlConvolutionForward新增位宽提升支持。
cnnlBiasAdd新增int32数据类型支持。
cnnlClip新增int32数据类型支持。
cnnlTranspose新增uint8数据类型支持。
cnnlReduce算子在sum模式下,支持输入float类型和输出half类型。
cnnlBatchNormForwardInference新增混合精度支持。
cnnlBatchNormForwardTraining、cnnlBatchNormBackward新增输入混合数据类型支持。
下列算子进行了workspace优化:
cnnlOpTensor
cnnlPad
cnnlUnsortedSegmentSum
cnnlBiasAdd
cnnlGatherNd
下列算子优化了half数据类型下的精度:
cnnlActivationForward
cnnlActivationBackward
cnnlAddN
cnnlBatchNormForwardInference
cnnlBatchNormForwardTraining
cnnlBatchNormBackward
cnnlDiv
cnnlDivNoNan
cnnlExp
cnnlEmbeddingBackward
cnnlNlllossForward
cnnlPowR
cnnlReduce
cnnlRMSProp
cnnlRsqrt
cnnlSoftmaxForward
cnnlSoftmaxBackward
cnnlSoftmaxCrossEntropyWithLogits
cnnlSqrt
cnnlActivationForward算子Tanh模式
cnnlUnsortedSegmentSum
提升下列算子的性能:
cnnlFill:规模较大场景下,算子性能提升最高30%。
cnnlOpTensor:BERT场景下,算子性能提升最高7%,低维和中间维度需要broadcast场景下,算子性能提升40%~90%。
cnnlTranspose:BERT场景下提升最高75%。
cnnlSquaredDifference:BERT场景下,算子性能提升最高45%。
cnnlDiv:BERT场景下,算子性能提升最高46%。
cnnlExpand:低维需要broadcast场景下,算子性能提升40%~90%。
cnnlTile:低维需要broadcast场景下,算子性能提升40%~90%。
cnnlMatMul:gepp模式下,算子性能提升30%~50%。GEMM_U4模式下,算子性能提升20~50%。
cnnlBatchMatMul:gepb模式下,算子性能提升最高30%。
cnnlPowR:BERT场景下,算子性能提升最高80%。
cnnlActivationForward算子Tanh模式:BERT场景下,算子性能提升最高24%。
cnnlBatchNormBackward:ResNet50 128batch场景下,算子性能提升最高9%。
cnnlBatchNormForwardInference:ResNet50 128batch场景下,算子性能提升最高20%。
cnnlSplit:最低维度拆分场景下,算子性能提升最高85%。
cnnlUnsortedSegmentSum:BERT场景下,某单一规模情况下,算子性能提升最高90%。
cnnlSqrt:BERT场景下,算子性能提升最高6%。
cnnlSquare:BERT场景下,算子性能提升最高20%。
cnnlStridedSlice:ResNet50网络12batch场景下,算子性能提升最高12%。
cnnlPoolingBackward:ResNet50 256batch场景下,并且kernel=1时,算子性能提升最高46%。
cnnlCycleOp:低维为1时,算子性能提升最高50%。
cnnlSoftmaxForward:低维模式小规模、非对齐场景下,算子性能提升最高90%。中高维度规约场景下,算子性能提升最高95%。
cnnlRsqrt:算子性能提升最高5%。
cnnlGrep:低维很小场景下,算子性能提升最高85%。
cnnlAddN:Tensor个数大于4的场景下,算子性能提升最高25%。
cnnlBiasAdd:Bias与input1输入悬殊的场景下,算子性能提升最高50%。
cnnlConvolutionForward:算子性能提升10%~40%。
cnnlConvolutionBackwardData:ResNet50场景下,算子性能提升最高20%。
cnnlConvolutionBackwardFilter:ResNet50网络中,所有convolutionbackwardfilter算子的总体性能提升最高20%,并且在特定规模下,单个convolutionbackwardfilter算子的性能提升最高50%。
cnnlCropAndResize:boxes坐标不在[0,1]范围时,算子性能提升70~90%。
cnnlCumsum:分布式network场景下,算子性能提升最高95%。
cnnlActivationForward:算子性能提升最高20%。
已知遗留问题¶
cnnlMultiHeadAttnForward算子设置为某些规模时,在多线程场景下出现计算错误。
当cnnlBatchNormBackward算子的saved_mean参数设为NULL时,返回错误信息。
现象:
如果cnnlBatchNormBackward算子的saved_mean参数设为NULL时,无法完成计算。
原因:
cnnlBatchNormBackward算子不支持saved_mean参数为NULL。
影响:
无法将cnnlBatchNormBackward算子的saved_mean参数设为NULL。
规避措施:
cnnlBatchNormBackward算子的saved_mean参数不要设为NULL。
v1.1.1¶
特性变更¶
在cnnlCreate函数中增加了对cntoolkit版本的兼容性检查。
已修复问题¶
下面问题已修复:
修复cnnlNlllossForward和cnnlNlllossBackward算子在输入最高维大于130448时出现cnrtError的问题。
修复cnnlReduce算子在CNNL_REDUCE_MAX和CNNL_REDUCE_FLATTENED_INDICES模式下且输入1维1个元素的tensor、规约轴传0时出现core dump的问题。
修复cnnlConvolutionBackwardFilter算子在int31数据类型下计算出现cnrtGetMemorySize函数报错的问题。
修复cnnlArange算子在某些规模和数据分布下精度越界问题。
修复cnnlUnsortedSegmentSum算子规模防呆错误问题。
修复cnnlPooling算子在特定规模下出现Error occurred in cnrtSyncQueue的问题。
修复cnnlUnsortedSegmentSum算子在segment_ids为负数或大于真实索引最大值时的精度越界问题。
修复matmul算子在gepb模式下出现的精度越界问题。
修复cnnlSoftmaxCrossEntropyWithLogits在输入元素个数为1时的精度越界问题。
修复cnnlReduce算子在CNNL_REDUCE_MIN模式和int32数据类型下出现的计算错误问题。
已知遗留问题¶
cnnlBceWithLogitsBackward算子增加限制,当前只支持CNNL_BCE_WITH_LOGITS_NONE模式。
v1.1.0¶
特性变更¶
不再支持Tril算子,功能被Tri算子替代。
不再支持Zeros Like算子,功能被Fill算子替代。
Clip算子接口修改,min和max参数从float类型修改为(void*)host_ptr。
下面算子名称修改:
cnnlStridedSliceGrad变更为cnnlStridedSliceBackward
cnnlRsqrtGradOp变更为cnnlRsqrtBackward
cnnlSqrtGrad变更为cnnlSqrtBackward
cnnlSGD变更为cnnlGradientDescent
不再支持cnnlBiasAddBackwardGetWorkspaceSize接口和cnnlBiasAddBackward接口中的work_space参数。
ApplyAdadelta算子接口修改,lr、rho、epsilon参数类型从float修改为 (void*)device_ptr。
cnnlRandMakeMTGP32State接口新增handle参数。
cnnlSoftplusForward算子新增beta和threshold参数。
新增算子:Random Normal、Flip、Round、Replication pad2d、Smooth L1 Loss Forward、BCE with Logits、Gelu、Apply Adagrad、Binary cross Entropy with Logits Backward、Reflection Pad2d、Interp Backward、As Strided Backward、Random Uniform Int、Smooth L1 Loss Backward、Softplus Backward、Layernorm Backward、As Strided、Adadelta、Median、Diag、Std Backward、Nozero。
优化算子性能:Conv Forward、Biasadd Backward、Layer Norm Forward、Layer Norm Backward、Matmul、Quantify Strategy、L2 Loss、Op Tensor、AddN、Assigandd、Assignsub、Biasadd、Index Fill、Transform、Quantify Offline、Concat。
Reduce L1l2、Reduce Pord、Reduce Max、Reduce Min、Reduce And、Reduce Or支持多轴。
Adam新增use_nesterov参数。
Activation算子增加TF_LEAKY_RELU模式。
Expand、Tile、Logic算子支持uint8数据类型输入。
新增cnnlGetOpTensorWorkspaceSize_v2接口,减少OpTensor算子在部分情况下的内存占用。
新增cnnlGetLibVersion接口用于获取CNNL当前版本号。
Transpose算子增加uint8数据类型支持。
Select算子解除p_then!=p_else的参数限制。
Maximum和Minimum算子增加原位计算支持。
已知遗留问题¶
部分算子不支持零元素。
现象:
不支持零元素的算子在输入张量的shape有0值时会报错。
原因:
当输入张量的shape有0值时,用户传入相应的device ptr一般为nullptr,在算子内部检查报错。
影响:
部分算子在零元素情况下报错。
规避措施
用户传入非空的device ptr。
Gelu算子在部分输入范围下不满足3e-3精度标准。
现象:
Gelu算子输入为部分负数区间和0时,输出会出现精度问题。
原因:
Gelu算子精度不足。
影响:
Gelu算子在部分输入下出现精度越界。
规避措施
框架暂不使用该算子。
Layernorm Backward算子防呆检查错误。
现象:
Layernorm Backward对于输入张量形状不满足算子限制的情况,在算子内发生coredump。
原因:
缺失防呆检查。
影响:
无法拦截invalid case。
规避措施
暂时由用户保证输入形状正确性。
v1.0.2¶
特性变更¶
expand, tile, logic_op算子支持uint8数据类型输入;
reduce_and, reduce_or支持了多轴模式;
已修复问题¶
下面问题已修复:
修复pad算子在一维下出现的写溢出问题。
修复了batchnorm_forward算子对零元素处理的问题。
修复了transpose算子在部分case下计算错误问题。
修复了conv forward算子在mlu220上HWCN layout的计算错误问题。
将pad算子接口中的pad_value参数从device ptr更正为host ptr。
更新cntoolkit v1.4.4,修复conv类算子rounding mode与CPU/GPU不一致的问题。
已知遗留问题¶
下面为遗留问题:
部分算子不支持零元素。
现象:
不支持零元素的算子在输入张量的shape有0值时会报错。
原因:
当输入张量的shape有0值时,用户传入相应的device ptr一般为nullptr,在算子内部检查报错。
影响:
部分算子在零元素情况下报错。
规避措施
用户传入非空的device ptr。
v1.0.1¶
特性变更¶
无。
已修复问题¶
下面问题已修复:
修复示例编译失败和运行失败的问题。
修复Conv Forward算子在大ci时的计算错误。
修复Batch Mat Mul Broadcasting算子在第一个维度为vector时并且is_transb为true时出现的计算错误。
修复Depthwise Conv算子在kw!=kh时的计算错误。
修复Poolbp算子在某个场景下出现的内存越界。
修复GRU算子在某个场景下出现的随机计算错误。
修复了Depthwise Conv算子在batch不是cluster倍数时的计算错误。
修复多轴Reduce Sum和Reduce Mean算子在half数据类型下的精度问题。
修复多轴Reduce Sum、Reduce Mea、Reduce Prod、Reduce Max算子不支持两轴以上的问题。
已知遗留问题¶
下面为遗留问题:
Conv Forward算子在filter张量为HWCN时,在EDGE平台上出现core dump。
Transpose算子某些场景下,在EDGE平台上出现core dump,导致Reduce等算子使用了Transpose的算子也可能在某些场景下出现core dump。
v1.0.0¶
特性变更¶
本版本包含下面新增功能和功能变更:
新增算子如下:
Activiation算子支持Leakyrelu Backward, Leakyrelu Forward, Sigmoid Backward
Div No Nan
Sparse Softmax Cross Entropy With Logits
Sqrt Grad
Pooling Backward
提升下面算子精度:
Trigon
Activation Forward
Erf
Instance Norm Inference
Convolution Backward Filter算子支持深度卷积计算。
Convolution Backward Data和Convolution算子解除multiplier限制。
Convolution Forward算子支持filter张量数据布局为HWCN。
Cumsum算子支持reverse和exclusive模式。
Unsorted Segment Sum算子支持segment_ids值为负数。
Activation算子支持elu模式。
Squared Difference算子支持广播。
Argmax和OpTensor算子支持INT32数据类型。
Mtrix-to-Matrix Multiplication算子接口增加alpha和beta参数。
下面算子新增alpha和beta参数,但目前alpha和beta功能暂不可用:
Activation Forward & Backward
Batch Norm Forward & Backward
Batch Norm Inference
Convolution Forward
Convolution Backward Data
Convolution Backward Filter
Pooling Forward & Backward
Reduce
Softmax Forward & Backward
RMSprop、SGD、Momentum, Apply Adam算子将部分标量参数的含义从host ptr修改为了dev ptr。
Momentum算子增加use_nesterov参数。
Hardtanh Backward算子增加输入tensor x。
Layer Norm Forward, Layernorm Backward算子接口不再需要工作空间来申请额外内存空间用于算子计算的优化。相关接口已废弃。
由于功能变,下面算子接口参数已修改:
Batch Norm Forward & Backward
Reduce
Floor Div
Floor Mod
cnnlGetXXWorkspaceSize接口一律添加handle参数, cnnlXX算子接口添加size_t类型的workspace_size参数。
powr算子需额外设置工作空间来申请额外内存空间用于算子计算的优化。
由于功能变更,不再支持Prenet算子。
已知遗留问题¶
无。
v0.3.1¶
特性变更¶
本版本包含下面新增功能和功能变更:
下面算子支持广播:
Div
Floor Div
Floor Mod
Maximum
Minimum
新增tri算子。
提高了arange算子在start和step差距大时的精度。
已修复问题¶
下面问题已修复:
修复Nllloss Forward算子在MLU290平台上的计算错误。
修复LSTM算子运行时出现内存溢出问题。
修复Pooling Backward算子导致Pytorch inceptionv3运行错误问题。
解决Convbpfilter算子在MLU290平台上的多核计算问题。
解决Pytorch inceptionv3中MLU未完成问题。
解决Nllloss Forward算子在部分规模下误差大的问题。
解决cnnlSetTensorDescriptor接口无法重复调用的问题。
v0.3.0¶
特性变更¶
本版本包含下面新增功能和功能变更:
新增算子如下。相关算子详情,请查看《寒武纪CNNL用户手册》。相关算子接口详情,请查看《寒武纪CNNL开发者手册》。
Weight Norm
Unary Select
Trigon
Tri
TDNN
Squared Difference
Softplus
Shuffle Channel
ScatterRef
Scaled Tanh
Scale
Reorg
Prenet
PReLU
Nms
Mask Zero
Masked
LRN
IsFinite
Interp
Instance Norm Inference
Index Fill
Hardtanh
GRU
Group Norm
Grep
Floor Mod Pro
Fill
Erf
Customized Active
Cumsum
Caxpby
Bit Compute
Batch Mat Mul Broadcasting
Axpy
Axpby
Ax
Attention
AsStride
解除部分算子限制。
优化部分算子性能。
由于功能变更,下面算子已不再支持,并删除:
Sum To Size
Real Div
已知遗留问题¶
无。