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

NPUGetFloatStatus

产品支持情况

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

功能说明

  • 算子功能:读取NPU硬件浮点溢出状态寄存器,并在检测到溢出时将溢出标志写回输入addr(side effect),输出data固定为全零。该算子常与NPUAllocFloatStatus配合使用,用于混合精度训练中loss scaling溢出状态的读取场景。本仓交付Ascend 950PR/Ascend 950DT实现(暂未支持溢出探测的空实现):不修改输入addr,输出data固定全零;其余支持产品的实现由canndev仓交付。
  • 计算公式:

    data=zeros(8,dtype=float32)\text{data} = \text{zeros}(8, \text{dtype}=\text{float32})

    当检测到溢出(status != 0)时,同时执行写回:

    addr=ones(8,dtype=float32)\text{addr} = \text{ones}(8, \text{dtype}=\text{float32})

    Ascend 950上暂未支持溢出探测,status恒为0,故addr不被修改,data恒为全零。

  • 示例:

    输入addr:
    tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float32)
    输出data:
    tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float32)
    

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
addr 输入 接收溢出标志写回的Tensor,固定shape为(8,)。检测到溢出时被写为全1(Ascend 950空实现中恒不写回)。 FLOAT ND
data 输出 NPU浮点状态Tensor,固定shape为(8,),包含8个float32零值,不承载状态信息。 FLOAT ND

约束说明

  • 该算子有一个输入addr、一个输出data,无属性。
  • 输入addr的shape固定为(8,),dtype仅支持float32,format仅支持ND。
  • 输出data的shape固定为(8,),不可变更。8个元素对应NPU硬件的溢出状态标志位(共32字节)。
  • 输出data的dtype仅支持float32,不支持其他数据类型。
  • 输出data的format仅支持ND。
  • 输出data的值始终为全零(8个float32零值),不承载状态信息;溢出状态通过side effect写回输入addr。
  • 在Ascend 950上为空实现:overflowStatus固定为0,不修改输入addr,输出固定全零,无并行归约,天然确定性。

调用说明

调用方式 调用样例 说明
图模式调用 test_geir_npu_get_float_status 参见算子调用完成算子编译和验证。