下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

reinterpret_cast_to

功能说明

以用户指定的数据类型,读取Tensor数据。

该接口会以用户指定的数据类型读取Tensor的内存数据,并对内存中的字节重新解释,并不具有数据精度转化功能,如需进行数据精度转化请参考数据精度转换接口vec_conv

例如:128个float16,则可以使用reinterpret_cast_to指定以float32的方式读取该段数据,会获得64个float32,因此reinterpret_cast_to并非真正将每一个float16数据转化成对应float32数据。

函数原型

reinterpret_cast_to(dtype)

参数说明

表1 参数说明

参数名称

输入/输出

含义

dtype

输入

指定读取Tensor对象的数据类型,取值:

uint8、int8、uint16、int16、float16、uint32、int32、float32、uint64、int64

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas推理系列产品Vector Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas 200/500 A2推理产品

注意事项

  • reinterpret_cast_to的使用存在一些需要注意的限制,为了方便叙述,我们从用户的角度定义一个factor的概念:原本的数据类型的bit数除以指定类型数据的bit数,例如,原本用户申请tensor时申明内存上的数据是128个float16,但是现在期望指定以float32方式读取该段数据,则factor = 16/32 = 0.5。reinterpret_cast_to()的使用,仅局限于以下情形:
    • factor必须大于零。
    • 若factor大于1,factor必须是个整数。
    • 若factor小于1,则用户需要注意数据的shape,shape的最后一维shape[-1]必须满足shape[-1] * factor为整数。对于原本的数据是128个float16,指定以float32方式读取的情形,若用户在这里将shape设置为(128, 1),则shape的最后一维为1,而此时factor是0.5,shape[-1] * factor = 1*0.5 = 0.5,非整数,说明我们无法将单个的float16以float32的形式读入,因此会报错“Error: Last dimension can't be divided." 正确的调用方式是将shape直接设置为128。

返回值

新的Tensor。

调用示例

示例1:

from tbe import tik
tik_instance = tik.Tik()
data_A = tik_instance.Tensor("float16", (16,), name="data_A", scope=tik.scope_gm)
data_B = data_A.reinterpret_cast_to("uint32")
data_C = data_B.reinterpret_cast_to("float16")

"""实际例子如下:
输入数据:
data_A:
[ 4.812e+00  1.870e-04 -5.692e-02  2.528e-02 -9.225e+02 -1.431e+02
 -1.541e+01 -2.018e-03  1.653e-03 -4.090e+00  2.016e+01 -5.846e+04
 -8.072e-03  2.627e+00 -3.174e-02 -3.088e-01]
输出数据:
data_B:
[ 169952464  645507913 3631866677 2552417204 3289847493 4213394698
 1094819874 3035736080]
data_C:
[ 4.812e+00  1.870e-04 -5.692e-02  2.528e-02 -9.225e+02 -1.431e+02
 -1.541e+01 -2.018e-03  1.653e-03 -4.090e+00  2.016e+01 -5.846e+04
 -8.072e-03  2.627e+00 -3.174e-02 -3.088e-01]
"""

示例2:

from tbe import tik
tik_instance = tik.Tik()
data_A = tik_instance.Tensor("float16", (16,), name="data_A", scope=tik.scope_gm)
data_B = data_A.reinterpret_cast_to("uint16")
data_C = data_B.reinterpret_cast_to("float16")

"""实际例子如下:
输入数据:
data_A:
[ 4.566e+01 -7.880e+02  1.414e-04 -1.300e-02 -1.893e+03 -1.622e-01
 -1.289e+00  2.478e+02 -3.107e+00 -2.072e+01  7.192e-01 -1.805e+00
  3.259e+01 -3.181e-03 -3.248e-05  4.086e+04]
输出数据:
data_B:
[20917 57896  2210 41640 59237 45361 48424 23486 49719 52526 14785 48952
 20499 39556 33313 30973]
data_C:
[ 4.566e+01 -7.880e+02  1.414e-04 -1.300e-02 -1.893e+03 -1.622e-01
 -1.289e+00  2.478e+02 -3.107e+00 -2.072e+01  7.192e-01 -1.805e+00
  3.259e+01 -3.181e-03 -3.248e-05  4.086e+04]
"""
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词