CANN/pypto矩阵乘法API文档
pypto.matmul【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明实现input 、mat2矩阵的矩阵乘运算计算公式为out input mat2input 、mat2为源操作数input 为左矩阵mat2为右矩阵out 为目的操作数存放矩阵乘结果的矩阵注意事项左右矩阵数据类型必须一致matmul 的左右矩阵数据类型必须相同如 BF16BF16、FP16FP16不支持混合输入如 BF16FP32FP8数据类型除外推荐使用低精度输入BF16/FP16 输入直接 matmul 输出 FP32比先 cast 到 FP32 再 matmul 性能更好且精度相当避免不必要的 cast将 BF16 升级到 FP32 再进行 matmul 计算不会有精度提升反而会产生额外的数据搬移开销利用随路 transposematmul 支持a_trans和b_trans参数可以在矩阵乘时随路完成转置避免额外调用 transpose 操作必须先设置 TileShape调用 matmul 接口前需要通过set_cube_tile_shapes设置 M、N、K 轴上的切分大小函数原型matmul(input, mat2, out_dtype, *, a_trans False, b_trans False, c_matrix_nz False, extend_paramsNone) - Tensor参数说明表1API参数说明参数名输入/输出说明input输入表示输入左矩阵不支持输入空Tensor。输入数据类型支持情况详见表3。支持的矩阵维度2维、3维、4维且左右矩阵维度需保持一致。输入矩阵支持的Format为TILEOP_NDTILEOP_NZDT_FP32DT_FP8E5M2DT_HF8输入不支持TILEOP_NZ格式。内轴外轴当输入矩阵input非转置时对应数据排布为[M, K]此时外轴为M内轴为K当输入矩阵input转置时对应数据排布为[K, M]此时外轴为K内轴为M当Format为TILEOP_NDND格式时外轴范围为[1, 2^31 - 1]内轴范围为[1, 65535]。当Format为TILEOP_NZNZ格式时其Shape维度需满足内轴32字节对齐外轴16元素对齐。在使用pypto.view接口的场景应保证传入View的Shape维度也满足内轴32字节对齐外轴16元素对齐。mat2输入表示输入右矩阵不支持输入空Tensor。输入数据类型支持情况详见表3。支持的矩阵维度2维、3维、4维且左右矩阵维度需保持一致。输入矩阵支持的Format为TILEOP_NDTILEOP_NZDT_FP32DT_FP8E5M2DT_HF8输入不支持TILEOP_NZ格式。内轴外轴当输入矩阵mat2非转置时对应数据排布为[K, N]此时外轴为K内轴为N当输入矩阵mat2转置时对应数据排布为[N, K]此时外轴为N内轴为K当Format为TILEOP_NDND格式时外轴范围为[1, 2^31 - 1]内轴范围为[1, 65535]。当Format为TILEOP_NZNZ格式时其Shape维度需满足内轴32字节对齐外轴16元素对齐。在使用pypto.view接口的场景应保证传入View的Shape维度也满足内轴32字节对齐外轴16元素对齐。out_dtype输出表示输出矩阵数据类型。输入输出数据类型支持情况详见表3。a_trans输入参数a_trans表示输入左矩阵是否转置默认为False。b_trans输入参数b_trans表示输入右矩阵是否转置默认为False。c_matrix_nz输入参数c_matrix_nz表示输出矩阵的Format是否采用NZ格式默认为False当前仅支持设置False即输出矩阵仅支持ND格式。extend_params输入支持bias、fixpipe反量化及TF32舍入模式功能详见表2。bias、fixpipe反量化输入输出数据类型支持情况详见表3表4。- 数据类型为字典格式。- 此参数与其内部参数均为可选参数。表2extend_params参数说明参数名说明scale表示pertensor量化场景使用同一个缩放因子将高精度数映射到低精度数输出矩阵反量化的参数。输入为float类型取1位符号位 8位指数位 10位尾数位参与运算。输入输出数据类型支持情况详见表4。不支持叠加多核切k功能。scale_tensor表示perchannel量化场景对每一个输出通道独立计算一套量化参数输出矩阵反量化的矩阵。scale_tensor输入固定为uint64_t 的Tensor。计算时会转换uint64_t为float类型的低32位bit后取1位符号位 8位指数位 10位尾数位参与运算。输入输出数据类型支持情况详见表4。scale_tensor的第一维度必须置1且N维度需要与mat2矩阵的N维度相等。scale_tensor只支持ND格式。仅支持矩阵维度为2维场景。不支持叠加多核切k功能。bias_tensor表示偏置矩阵。输入为Tensor类型。输入输出数据类型支持情况详见表3。bias_tensor只支持ND格式。bias_tensor的第一维度应置1且N维度需要与mat2矩阵的N维度相等。仅支持矩阵维度为2维场景。不支持叠加多核切k功能。relu_type表示输出矩阵是否进行ReLu操作。输入为ReLuType类型。支持RELU和NO_RELU两种模式。仅支持矩阵维度为2维场景。trans_mode表示是否使能TF32计算及TF32舍入模式。输入为TransMode类型支持以下三种模式• CAST_NONE不使能float数据类型转换为TF32数据类型。• CAST_RINT使能float数据类型转换为TF32数据类型舍入规则舍入到最近整数中间值时舍入到偶数。• CAST_ROUND使能float数据类型转换为TF32数据类型舍入规则舍入到最近整数中间值时远离零舍入。仅支持输入左右矩阵和输出矩阵数据类型均为DT_FP32时设置。仅支持矩阵维度为2维场景。表3 Matmul支持的数据类型inputmat2out_dtypebias_tensor产品支持DT_FP16DT_FP16DT_FP16DT_FP32DT_FP16DT_FP32全系列DT_BF16DT_BF16DT_BF16DT_FP32DT_FP32DT_BF16DT_BF16仅950PR/DT支持全系列DT_FP32DT_FP32DT_FP32DT_FP32全系列DT_INT8DT_INT8DT_INT32DT_INT32全系列DT_FP8E5M2DT_FP8E5M2DT_FP8E4M3DT_FP16DT_BF16DT_FP32DT_FP16DT_BF16DT_FP32仅950PR/DTDT_FP8E4M3DT_FP8E5M2DT_FP8E4M3DT_FP16DT_BF16DT_FP32DT_FP16DT_BF16DT_FP32仅950PR/DTDT_HF8DT_HF8DT_FP16DT_BF16DT_FP32DT_FP16DT_BF16DT_FP32仅950PR/DT表4 反量化支持的数据类型inputmat2out_dtype产品支持DT_INT8DT_INT8DT_FP16全系列返回值说明返回值为out 矩阵Tensor。约束说明Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持DT_HF8DT_FP8E5M2DT_FP8E4M3不支持extend_params中的trans_mode参数。Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持DT_HF8DT_FP8E5M2DT_FP8E4M3不支持extend_params中的trans_mode参数。调用matmul接口前需要通过pypto.set_cube_tile_shapes设置M、N、K轴上的切分大小当矩阵维度为3维或者4维时需要调用pypto.set_vec_tile_shapes接口设置vector的TileShape切分如未设置接口内部会设置2维的vec_tile_shape其值为128128。调用matmul接口的输入为调用pypto.reshape后的NZ格式时需要调用pypto.set_matrix_size接口设置pypto.reshape前的输入到matmul的原始Shape的m,k,n值。调用matmul接口的输入矩阵维度为3维/4维并且数据格式为NZ格式时需要调用pypto.set_matrix_size接口设置输入到matmul的原始Shape的m,k,n值。调用示例# 基本矩阵乘 a1 pypto.tensor([16, 32], pypto.DT_BF16, tensor_a) b1 pypto.tensor([32, 64], pypto.DT_BF16, tensor_b) out1 pypto.matmul(a1, b1, pypto.DT_BF16) # 批量矩阵乘 a2 pypto.tensor((2, 16, 32), pypto.DT_FP16, tensor_a) b2 pypto.tensor((2, 32, 16), pypto.DT_FP16, tensor_b) out2 pypto.matmul(a2, b2, pypto.DT_FP16) # 批次广播 a3 pypto.tensor((1, 32, 64), pypto.DT_FP32, tensor_a) b3 pypto.tensor((3, 64, 16), pypto.DT_FP32, tensor_b) out3 pypto.matmul(a3, b3, pypto.DT_FP32) # 叠加Bias a pypto.tensor((16, 32), pypto.DT_FP16, tensor_a) b pypto.tensor((32, 64), pypto.DT_FP16, tensor_b) bias pypto.tensor((1, 64), pypto.DT_FP16, tensor_bias) extend_params {bias_tensor: bias} pypto.matmul(a, b, pypto.DT_FP32, extend_paramsextend_params) # 反量化 a pypto.tensor((16, 32), pypto.DT_INT8, tensor_a) b pypto.tensor((32, 64), pypto.DT_INT8, tensor_b) extend_params {scale: 0.2} pypto.matmul(a, b, pypto.DT_BF16, extend_paramsextend_params) # 反量化叠加RELU extend_params {scale: 0.2, relu_type: pypto.ReLuType.RELU} pypto.matmul(a, b, pypto.DT_BF16, extend_paramsextend_params) # 反量化叠加RELU scale_tensor pypto.tensor((1, 64), pypto.DT_UINT64, tensor_scale) extend_params {scale_tensor: scale_tensor, relu_type: pypto.ReLuType.RELU} pypto.matmul(a, b, pypto.DT_BF16, extend_paramsextend_params) # TF32计算模式仅950PR/DT a pypto.tensor((16, 32), pypto.DT_FP32, tensor_a) b pypto.tensor((32, 64), pypto.DT_FP32, tensor_b) extend_params {trans_mode: pypto.TransMode.CAST_ROUND} pypto.matmul(a, b, pypto.DT_FP32, extend_paramsextend_params)【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考