文件最后提交记录最后更新时间
30 天前
30 天前
30 天前
30 天前
30 天前
30 天前
22 天前
README

KLDiv

产品支持情况

产品 是否支持
Ascend 950PR&950DT系列产品 √
Atlas A3系列产品 √
Atlas A2系列产品 √
Atlas 200I/500 A2推理产品 ×
Atlas推理系列产品 √
Atlas训练系列产品 √

功能说明

  • 算子功能:计算KL散度损失(Kullback-Leibler Divergence)。

  • 壳算子定位:KLDiv为壳路由算子,注册名KLDiv与旧GE图的op type精确匹配,用于旧图迁移兼容。如有新计算需求,请使用KLDivV2代替;本算子计算内核纯转发KLDivV2的log_target=False DAG,恒按log_target=False语义计算。

  • 计算公式(恒log_target=False):

lossi={0if targeti=0NaNif targeti<0targeti×(log⁡(targeti)−xi)elseloss_i=\begin{cases} 0 & \text{if } target_i=0 \\ NaN & \text{if } target_i<0 \\ target_i \times \left(\log(target_i)-x_i\right) & \text{else} \end{cases}

  • 输出y由reduction决定:

y={lossif reduction="none"∑ilossiif reduction="sum"∑ilossinumelif reduction="mean"∑ilossidim0if reduction="batchmean"y=\begin{cases} loss & \text{if } reduction=\text{"none"} \\ \sum_i loss_i & \text{if } reduction=\text{"sum"} \\ \frac{\sum_i loss_i}{numel} & \text{if } reduction=\text{"mean"} \\ \frac{\sum_i loss_i}{dim_0} & \text{if } reduction=\text{"batchmean"} \end{cases}

  • reduction="none"时y与x同shape;reduction为"mean"、"sum"、"batchmean"时y为标量(shape为空)。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 公式中的输入张量x(log概率)。 FLOAT、FLOAT16、BFLOAT16 ND
target 输入 公式中的输入张量target(概率),与x同shape同dtype。 FLOAT、FLOAT16、BFLOAT16 ND
reduction 必选属性
  • 指定输出的归约方式。
  • 取值仅支持none、mean、sum、batchmean。
  • 无默认值,构造图时必须显式设置。
STRING -
y 输出 公式中的输出张量y。reduction="none"时与x同shape,其余取值时为标量。 FLOAT、FLOAT16、BFLOAT16 ND
  • 本算子原型未声明log_target属性(v1原型即无此属性),恒按log_target=False语义计算;旧图中携带的log_target属性会被作为未知属性忽略。

约束说明

  • x与target必须同shape、同dtype。
  • reduction为必选属性,取值仅支持none、mean、sum、batchmean。
  • 原型纸面声明支持DT_DOUBLE,但tiling阶段dtype白名单拒绝double,实际不支持DT_DOUBLE。
  • target等于0的位置对应输出为0;target小于0的位置输出为NaN(值域约束,tiling/infershape不校验,调用方需自行保证输入语义合法)。
  • FLOAT16、BFLOAT16输入在kernel内部提升为FLOAT32计算,结果按round-to-nearest-even回落原dtype。
  • 输出shape:reduction="none"时y与x同shape;reduction为"mean"、"sum"、"batchmean"时y为标量。
  • 本算子为壳路由算子,无aclnn接口:旧图迁移走atc图编译路径;PyTorch适配请使用ops-math kl_div_v2目录的aclnnKlDiv接口。

调用说明

调用方式 调用样例 说明
图模式调用 test_geir_kl_div 参见算子调用完成算子编译和验证。
  • 图模式示例通过算子IR以op::KLDiv构图方式调用本算子。