news 2026/5/9 17:54:38

CANN/pypto cast数据类型转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/pypto cast数据类型转换

# pypto.cast

【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto

产品支持情况

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

功能说明

根据源操作数和目的操作数Tensor的数据类型进行精度转换,如果目的操作数是整型且源操作数的数值超过整型的数据表示范围进行精度转换结果为目的操作数的最大值或者最小值。

注意事项

  • PyPTO Tensor 不支持.to()方法:PyPTO Tensor 没有.to(dtype)方法,必须使用pypto.cast(tensor, dtype)进行数据类型转换

在了解精度转换规则之前,需要先了解浮点数的表示方式和二进制的舍入规则:

  • 浮点数的表示方式

    • DT_FP16共16bit,包括1bit符号位(S),5bit指数位(E)和10bit尾数位(M)。

      当E不全为0或不全为1时,表示的结果为:

      (-1)S* 2E - 15* (1 + M)

      当E全为0时,表示的结果为:

      (-1)S* 2-14* M

      当E全为1时,若M全为0,表示的结果为±inf(取决于符号位);若M不全为0,表示的结果为nan。

      上图中S=0,E=15,M = 2-1+ 2-2,表示的结果为1.75。

    • DT_FP32共32bit,包括1bit符号位(S),8bit指数位(E)和23bit尾数位(M)。

      当E不全为0或不全为1时,表示的结果为:

      (-1)S* 2E - 127* (1 + M)

      当E全为0时,表示的结果为:

      (-1)S* 2-126* M

      当E全为1时,若M全为0,表示的结果为±inf(取决于符号位);若M不全为0,表示的结果为nan。

      上图中S = 0,E = 127,M = 2-1+ 2-2,最终表示的结果为1.75 。

    • DT_BF16共16bit,包括1bit符号位(S),8bit指数位(E)和7bit尾数位(M)。

      当E不全为0或不全为1时,表示的结果为:

      (-1)S* 2E - 127* (1 + M)

      当E全为0时,表示的结果为:

      (-1)S* 2-126* M

      当E全为1时,若M全为0,表示的结果为±inf(取决于符号位);若M不全为0,表示的结果为nan。

      上图中S = 0,E = 127,M = 2-1+ 2-2,最终表示的结果为1.75。

  • 二进制的舍入规则和十进制类似,具体如下:

    • CAST_RINT模式下,若待舍入部分的第一位为0,则不进位;若第一位为1且后续位不全为0,则进位;若第一位为1且后续位全为0,当M的最后一位为0则不进位,当M的最后一位为1则进位。

    • CAST_FLOOR模式下,若S为0,则不进位;若S为1,当待舍入部分全为0则不进位,否则,进位。

    • CAST_CEIL模式下,若S为1,则不进位;若S为0,当待舍入部分全为0则不进位;否则,进位。

    • CAST_ROUND模式下,若待舍入部分的第一位为0,则不进位;否则,进位。

    • CAST_TRUNC模式下,总是不进位。

    • CAST_ODD模式下,若待舍入部分全为0,则不进位;若待舍入部分不全为0,当M的最后一位为1则不进位,当M的最后一位为0则进位。

函数原型

cast(input: Tensor, dtype: DataType, mode: CastMode = CastMode.CAST_NONE, satmode: SaturationMode = SaturationMode.OFF) -> Tensor

参数说明

参数名输入/输出说明
input输入源操作数。
支持的类型为:Tensor。
Tensor支持的数据类型为:DT_FP32,DT_FP16,DT_BF16,DT_INT8,DT_UINT8,DT_INT16,DT_INT32,DT_INT64,DT_INT4,DT_FP8E4M3,DT_FP8E5M2,DT_HF8。
不支持空Tensor;Shape仅支持1-4维;Shape Size不大于2147483647(即INT32_MAX)。
dtype输入精度转换后的数据类型。
支持的数据类型为:DT_FP32,DT_FP16,DT_BF16,DT_INT8,DT_UINT8,DT_INT16,DT_INT32,DT_INT64,DT_INT4,DT_FP8E4M3,DT_FP8E5M2,DT_HF8。
CastMode输入源操作数枚举类型,用以控制精度转换处理模式,具体定义为:CastMode 。
默认为 CAST_NONE,常见类型之间的转换,框架会自动转换,与torch对齐,详见约束说明。
SaturationMode输入饱和模式枚举类型,用以控制浮点数转整数时的溢出处理方式,具体定义为:SaturationMode 。
默认为 OFF(截断模式),当设置为 ON 时,超出目标类型范围的数值会被截断到最大值或最小值(饱和截断),详见约束说明。

约束说明

  1. A2A3 架构支持的转换

    源类型目标类型饱和模式设置默认CastMode特殊说明
    DT_FP16DT_FP32---
    DT_FP16DT_INT32-CAST_TRUNC-
    DT_FP16DT_INT16CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP16DT_INT8CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP16DT_UINT8CAST_TRUNC-
    DT_FP16DT_INT4--打包类型,每字节包含2个元素
    DT_BF16DT_FP32---
    DT_BF16DT_INT32-CAST_TRUNC-
    DT_INT32DT_FP32---
    DT_INT32DT_INT16--
    DT_INT32DT_INT64---
    DT_INT32DT_FP16--deq 模式
    DT_FP32DT_BF16-CAST_RINT-
    DT_FP32DT_FP16-CAST_RINT-
    DT_FP32DT_INT16CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP32DT_INT32-CAST_TRUNC-
    DT_FP32DT_INT64-CAST_TRUNC-
    DT_UINT8DT_FP16---
    DT_INT8DT_FP16---
    DT_INT16DT_FP32---
    DT_INT16DT_FP16---
    DT_INT64DT_FP32-CAST_RINT-
    DT_INT64DT_INT32--
    DT_INT4DT_FP16--打包类型,每字节包含2个元素
  2. Ascend 950PR/Ascend 950DT (A5 架构) 支持的转换

    源类型目标类型饱和模式设置默认CastMode特殊说明
    DT_FP32DT_FP16-CAST_RINT-
    DT_FP32DT_BF16-CAST_RINT-
    DT_FP32DT_INT16CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP32DT_INT32-CAST_TRUNC-
    DT_FP32DT_INT64-CAST_TRUNC-
    DT_FP32DT_FP8E4M3-CAST_RINT-
    DT_FP32DT_FP8E5M2-CAST_RINT-
    DT_FP32DT_HF8-CAST_ROUND特殊舍入模式
    DT_FP16DT_FP32---
    DT_FP16DT_INT32-CAST_TRUNC-
    DT_FP16DT_INT16CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP16DT_INT8CAST_TRUNC支持 inf/-inf 等边缘情况
    DT_FP16DT_UINT8CAST_TRUNC-
    DT_FP16DT_HF8-CAST_ROUND特殊舍入模式
    DT_BF16DT_FP32---
    DT_BF16DT_INT32-CAST_TRUNC-
    DT_BF16DT_FP16---
    DT_UINT8DT_FP16---
    DT_UINT8DT_UINT16---
    DT_UINT8DT_INT16---
    DT_UINT8DT_INT32---
    DT_INT8DT_FP16---
    DT_INT8DT_UINT16---
    DT_INT8DT_INT16---
    DT_INT8DT_INT32---
    DT_INT16DT_UINT8---
    DT_INT16DT_FP16---
    DT_INT16DT_FP32---
    DT_INT16DT_UINT32---
    DT_INT16DT_INT32---
    DT_INT32DT_FP32---
    DT_INT32DT_INT16--
    DT_INT32DT_UINT16---
    DT_INT32DT_INT64---
    DT_INT32DT_UINT8---
    DT_INT32DT_FP16---
    DT_UINT32DT_UINT8---
    DT_UINT32DT_UINT16---
    DT_UINT32DT_INT16---
    DT_INT64DT_FP32-CAST_RINT-
    DT_INT64DT_INT32--
    DT_FP8E4M3DT_FP32---
    DT_FP8E5M2DT_FP32---
    DT_HF8DT_FP32---
  3. 饱和模式设置说明:

    1. FP16→UINT8、FP16→INT8、FP32→INT16、FP16→INT16、INT64→INT32、INT32→INT16 转换默认使用 OFF模式(截断/回绕),以保持PyTorch兼容性; 当cast用于量化场景或有其他需求时,上述6种转换场景用户可以根据需要设置为ON模式(饱和)。
    2. 其他转换该字段设置无效。
  4. 当 cast 前后类型相同的时候,某些场景下会产生空操作,不保证精度。

  5. 特殊说明

    • DT_INT4(S4)是一种打包类型,每字节包含2个元素
    • 支持多种舍入模式:RINT、ROUND、FLOOR、CEIL、TRUNC、ODD、NONE
    • 提供 PyTorch 兼容模式,处理 inf/-inf 等边缘情况
    • 支持 int32→half 的 deq 模式转换
    • A5 架构支持 FP8 系列类型(DT_FP8E4M3、DT_FP8E5M2、DT_HF8)的转换
    • A5 架构中 DT_HF8 (hifloat8) 类型需要使用特殊的 CAST_ROUND 舍入模式

调用示例

TileShape设置示例

调用该operation接口前,应通过set_vec_tile_shapes设置TileShape。

TileShape维度应和输出一致。

如输入input shape为[m, n],输出为[m, n],TileShape设置为[m1, n1],则m1, n1分别用于切分m, n轴。

pypto.set_vec_tile_shapes(4, 16)

接口调用示例

x = pypto.tensor([2], pypto.DT_FP32) y = pypto.cast(x, pypto.DT_FP16)

结果示例如下:

输入数据x: [2.0, 3.0] # x.dtype: pypto.DT_FP32 输出数据y: [2.0, 3.0] # y.dtype: pypto.DT_FP16
使用饱和模式(推荐用于浮点数转整数)
# 示例 1:FP16 转 INT8,使用饱和模式防止溢出 x = pypto.tensor([300.0, -300.0, 50.0], pypto.DT_FP16) y = pypto.cast(x, pypto.DT_INT8, satmode=pypto.SaturationMode.ON) # 输出:[127, -128, 50] # 示例 2:FP16 转 INT8,使用饱和模式防止溢出 x = pypto.tensor([300.0, -300.0, 50.0], pypto.DT_FP16) y = pypto.cast(x, pypto.DT_INT8, satmode=pypto.SaturationMode.OFF) # 输出:[44, -44, 50]

【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 17:53:39

华为CANN PyPTO分布式共享内存写入API

pypto.distributed.shmem_put 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Atlas A3 推理系列产品√Atlas A2 推理…

作者头像 李华
网站建设 2026/5/9 17:52:49

长期项目使用Taotoken在模型迭代与成本间找到平衡点

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期项目使用Taotoken在模型迭代与成本间找到平衡点 在长期运行的AI项目中,一个核心挑战在于如何应对模型技术的快速迭…

作者头像 李华
网站建设 2026/5/9 17:51:49

CANN/ops-cv图像裁剪与调整大小算子

CropAndResize 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 …

作者头像 李华
网站建设 2026/5/9 17:51:48

EGAgent框架:基于实体关系图的长视频语义理解技术

1. 项目概述:当长视频遇见实体图最近在整理一段两小时的会议录像时突然意识到:人类理解长视频的核心能力,其实在于大脑能自动构建场景中的人物、物体及其关系网络。这种认知启发促使我们团队开发了EGAgent框架——一个通过动态构建和更新实体…

作者头像 李华
网站建设 2026/5/9 17:48:09

技术革命:AlienFX Tools - 500KB轻量级AWCC替代方案深度解析

技术革命:AlienFX Tools - 500KB轻量级AWCC替代方案深度解析 【免费下载链接】alienfx-tools Alienware systems lights, fans, and power control tools and apps 项目地址: https://gitcode.com/gh_mirrors/al/alienfx-tools 传统AWCC架构的局限性分析 Al…

作者头像 李华
网站建设 2026/5/9 17:48:09

初次使用Taotoken从注册到发出第一个ChatCompletions请求的全流程

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken从注册到发出第一个ChatCompletions请求的全流程 1. 注册账号与获取API Key 要开始使用Taotoken,首先…

作者头像 李华