CANN/pypto卷积操作故障排除指南

CANN/pypto卷积操作故障排除指南
FC6XXX-FC8XXX【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pyptoFC6101 OVER_BUFFER_LIMIT错误描述Operation阶段校验TileShape配置超出硬件缓存空间限制包括L0A、L0B、L0C和L1缓存。可能原因L0A空间超限tileH * tileW * tileK * sizeofdtype L0A_size。# 错误示例 - L0A空间超限制 # 以Ascend 950PR为例L0A_size65536 bytes # FP16sizeof2, tileH16, tileW16, tileK256 # 16 * 16 * 256 * 2 131072 65536L0A_size tile_l0_info pypto_impl.TileL0Info tileH16, tileW16, tileK256, tileN16 L0B空间超限tileK * tileN * sizeofdtype L0B_size。L0C空间超限tileH * tileW * tileN * sizeofFP32 L0C_size。L1空间超限输入、权重和bias在L1中的总占用超出L1_size公式CeilAlignhinL1 * winL1 * kAL1 * sizeofdtype, 32 CeilAlignnL1 * kBL1 * sizeofdtype, 32 CeilAligntileN * sizeofdtype, 32 L1_size。处理方式根据报错日志中提示的缓存名称L0A/L0B/L0C/L1和实际tile值结合当前芯片型号的buffer大小计算占用空间是否超限。减小对应维度的Tile大小使tileH * tileW * tileK * sizeofdtype ≤ L0A_size等约束满足。参考TileShape空间约束说明[pypto.set_conv_tile_shapes]../api/config/pypto-set_conv_tile_shapes.md。# 正确示例-基于test_conv.py: test_conv2d_fp16_basic_with_bias # Ascend 950PR的L0A_size65536, L0B_size65536, L0C_size131072 # FP16sizeof2, tileH1, tileW16, tileK16 # L0A: 1 * 16 * 16 * 2 512 65536 # L0B: 16 * 16 * 2 512 65536 # L0C: 1 * 16 * 16 * 4 1024 131072 tile_l0_info pypto_impl.TileL0Info tileH1, tileW16, tileK16, tileN16 FC6201 EXPANDFUNC_TENSOR_OP_NULLPTR错误描述Tile图切分阶段在为MMAD矩阵乘累加操作设置属性时fmap/weight/res的tensor图节点指针为空。可能原因Conv Operation的输入/输出Tensor未正确传入或被提前释放导致Tile图展开时tensor节点缺失。# 错误示例-在动态场景中view操作的offset或shape传入异常导致Tile图展开时无法正确构造fmap子tensor节点 input_a_view pypto.viewinput_a, [tile_batch, 16, 64], [batch_offset, 0, 0] # 若input_a本身为None或未正确初始化Tile图展开时fmapTensorPtr为空 out pypto.convinput_a_view, input_b, dtype, [1], [1, 1], [1], extend_params{}, groups1在动态shape场景下view/assemble操作构造的子Tensor链路异常导致传递到MMAD节点的tensor指针丢失。处理方式开启编译debug模式dump计算图确认Conv Operation的输入/输出tensor节点是否完整pypto.frontend.jitdebug_options{compile_debug_mode: 1} def conv_kernel:在output目录下使用pto-toolkit打开dump的计算图定位到报错的Conv Operation节点检查其输入tensorfmap、weight和输出tensorres是否均存在且非空。若为动态shape场景检查pypto.view的offset和shape参数是否合法确认view后的子tensor能正确传递到pypto.conv。若上述排查均未发现问题请按CONV组件提issue或问题单附带完整报错日志、dump计算图与复现用例。FC6202 EXPANDFUNC_TENSOR_ATTR_GET_FAILED错误描述Tile图切分阶段Conv Operation的原始fmap/weight shape属性CONV_ORI_FMAP_SHAPE_ATTR/CONV_ORI_WEIGHT_SHAPE_ATTR未设置。该校验在NZ2NZ模式下触发。可能原因在NZ2NZ模式下使用Conv但Operation构造流程未正确设置原始fmap/weight shape属性。# 错误示例-在NZ2NZ模式下Conv Operation缺少ori_fmap_shape属性 # 报错日志示例 # Conv ori fmapshape should be set when InOut Tensor NZ mode.Conv Operation通过非标准方式构造如自定义Pass修改了Conv节点属性导致必要属性丢失。处理方式确认运行芯片型号检查是否走了NZ2NZ路径ConstructTensorGraphNZ2NZ。开启编译debug模式dump计算图在dump图中搜索Conv Operation节点检查其属性列表是否包含ori_fmap_shape和ori_weight_shape。确认Conv Operation是否通过标准pypto.conv接口构造若使用了自定义Pass修改Conv节点检查是否误删了shape属性。若上述排查均未发现问题请按CONV组件提issue或问题单附带完整报错日志、芯片型号信息与复现用例。FC6203 EXPANDFUNC_TILE_OP_NULLPTR错误描述Tile图切分阶段Tile图新生成的节点出现空指针包括当前Function指针为空、fmap/weight/bias/res的tile tensor指针为空。可能原因Conv Operation未在pypto.frontend.jit装饰的动态函数内调用导致获取当前Function指针失败functionPtr为空。# 错误示例-未在jit动态函数内调用convfunctionPtr为空 def not_under_jit_examplefmap, weight: output pypto.convfmap, weight, dtype, [1, 1], [0, 0, 0, 0], [1, 1] return output # functionPtr为空触发FC6203配置了hasBiasTrue但未传入bias tensor或bias tensor在Tile图展开过程中丢失导致biasTensorPtr为空。# 错误示例-hasBias为True但bias在extend_params中传入异常 extend_params {bias_tensor: None} # bias为NonehasBias标记为True但biasTensorPtr为空 output pypto.convfmap, weight, dtype, [1, 1], [0, 0, 0, 0], [1, 1], extend_paramsextend_paramsTile图展开过程中L0层级的fmap/weight/res子tensor节点构造失败。处理方式确认pypto.conv调用位于pypto.frontend.jit装饰的函数内部不能在普通Python函数中直接调用。若使用了bias确认extend_params[bias_tensor]传入的是有效的Tensor对象而非None。开启编译debug模式dump计算图检查Tile图展开后各节点的tensor连接关系是否完整。若上述排查均未发现问题请按CONV组件提issue或问题单附带完整报错日志与复现用例。FC6204 EXPANDFUNC_PARAMS_INVALID错误描述Tile图切分阶段Conv Operation的输入操作数数量与预期不匹配。预期操作数数量 2fmap weight hasBias0或1。可能原因Conv Operation的操作数在图传递过程中被异常增减如自定义Pass错误地添加或删除了Conv的输入边。# 错误示例-Conv Operation的操作数数量与hasBias标记不一致 # 报错日志示例 # Operand vector size mismatch: Expected size: 3, actual size: 2, Conv Common Input: 2, hasBias: Truebias操作数传递逻辑异常hasBias标记为True但实际操作数中缺少bias或hasBias为False但操作数中多出了bias。处理方式开启编译debug模式dump计算图在dump图中定位报错的Conv Operation节点检查其输入边的数量和类型。确认输入操作数数量与hasBias标记一致无bias时操作数为2fmap weight有bias时操作数为3fmap weight bias。若使用了自定义Pass检查是否误修改了Conv Operation的输入边。若上述排查均未发现问题请按CONV组件提issue或问题单附带完整报错日志、dump计算图与复现用例。FC6205 EXPANDFUNC_INNER_STATUS_FAILED错误描述Tile图切分阶段内部功能函数返回值异常。该错误码为预留错误码。可能原因NA处理方式此错误码为预留码当前版本未使用。若遇到此报错请按CONV组件提issue或问题单附带完整报错日志与复现用例。FC6301 CODEGEN_GET_ATTR_FAILED错误描述Codegen代码生成阶段获取Conv TileOp的CopyInMode或CopyOutMode属性失败。这两个属性在Tile图展开阶段设置Codegen阶段读取。可能原因Tile图展开阶段未正确设置CopyInMode/CopyOutMode属性通常由Tile图展开流程异常导致。# 错误示例-Codegen阶段读取CopyInMode属性时返回失败 # 报错日志示例 # GenMemL1CopyInConv get CopyInMode failed. # GenMemL0CCopyOutConv get CopyOutMode failed.Conv Operation的Load/Store操作节点在Pass阶段被异常修改导致属性丢失。处理方式开启编译debug模式dump计算图在dump图中定位到Conv的LoadCopyIn/StoreCopyOut操作节点检查其属性是否包含COPY_IN_MODE/COPY_OUT_MODE。检查是否使用了自定义Pass修改了Conv的Load/Store节点确认属性未被误删。在生成的kernel代码文件kernel_aicore目录下的TENSOR***.cpp中搜索对应的TileOp调用确认参数是否完整。若上述排查均未发现问题请按Codegen组件提issue或问题单附带完整报错日志、dump计算图与复现用例。FC6302 CODEGEN_CHECK_ATTR_INVALID错误描述Codegen代码生成阶段Conv TileOp的CopyInMode/CopyOutMode属性值不在合法范围内或cutW属性为0。可能原因CopyInMode值不在[ND2NZ, DN2NZ]范围内。# 错误示例-CopyInMode/CopyOutMode属性值非法或cutW为0 # 报错日志示例 # GenMemL1CopyInConv CopyInMode is invalid: -1 # GenMemL0CCopyOutConv CopyOutMode is invalid: 99 # GenMemL0CCopyOutConv cutW should not be 0!CopyOutMode值不在{NZ2ND, NZ2NZ, NZ2DN}范围内。cutW属性为0导致L0C到GM的搬出操作无法正确分块。处理方式开启编译debug模式dump计算图在dump图中定位到Conv的Load/Store操作节点检查COPY_IN_MODE/COPY_OUT_MODE/CUT_W属性值是否合法。CopyInMode合法值ND2NZ1、NZ2NZ2、DN2NZ3CopyOutMode合法值NZ2ND0、NZ2NZ1、NZ2DN3。确认Tile图展开流程未被自定义Pass干扰这些属性由框架根据输入tensor格式和芯片型号自动推导。若上述排查均未发现问题请按Codegen组件提issue或问题单附带完整报错日志、dump计算图与复现用例。FC6303 CODEGEN_CHECK_DIM_INVALID错误描述Codegen代码生成阶段Conv TileOp的src shape或offset维度与预期不匹配。2D conv的shape/offset应为4维3D conv应为5维L0C的valid shape应为2维。可能原因Tile图展开阶段生成的tensor shape维度与卷积类型不一致如2D conv的fmap shape被错误地生成为5维。# 错误示例-shape/offset维度与卷积类型不匹配 # 报错日志示例 # GenMemL1CopyInConv shape should be 4-dim!2D conv期望4维实际非4维 # GenMemL1CopyInConv offset should be 4-dim!2D conv期望4维实际非4维 # GenMemL0CCopyOutConv valid shape should be 2-dim!L0C期望2维实际非2维动态shape场景下valid shape的维度推导异常。L0C tensor的shape不是2维MN可能由Tile图展开时L0C节点构造错误导致。处理方式开启编译debug模式dump计算图在dump图中定位到报错的Conv Load/Store节点检查其src tensor的shape维度。确认shape维度与卷积类型匹配1D conv对应3维NCL2D conv对应4维NCHW3D conv对应5维NCDHW。若为动态shape场景检查pypto.view构造的子tensor shape维度是否与原始输入一致。检查生成的kernel代码文件kernel_aicore目录下确认TileOp调用的shape/offset参数维度正确。若上述排查均未发现问题请按Codegen组件提issue或问题单附带完整报错日志、dump计算图与复现用例。FC6401 TILEOP_TENSOR_FORMAT_FAILED错误描述TileOp阶段tensor硬件FORMAT校验失败。Conv的Load操作要求src为GM格式、dst为L1格式Store操作要求src为L0C格式、dst为GM格式。可能原因Tile图展开阶段为tensor分配了错误的内存层级如Load操作的dst被分配到L0C而非L1。# 错误示例-Load/Store操作的src/dst硬件格式不匹配 # 报错日志示例编译期static_assert # [TLoadConv Error]: Src format shoulde be GM and Dst format shoulde be L1 # [TStoreConv Error]: Src format shoulde be L0C and Dst format shoulde be GM自定义Pass修改了tensor的内存类型属性导致Load/Store操作的src/dst格式不匹配。处理方式此错误码对应的校验为编译期static_assert会在kernel代码编译阶段报错。在生成的kernel代码文件kernel_aicore目录下中搜索TLoadConv/TStoreConv调用检查传入的tensor类型声明。确认Load操作的dst tensor声明为L1类型如ConvTileTileType::Mat, ..., Hardware::L1src为GM类型。确认Store操作的src tensor声明为L0C类型dst为GM类型。若未修改Tile图展开逻辑但仍出现此报错请按CONV组件提issue或问题单附带kernel代码文件与复现用例。FC6402 TILEOP_SHAPE_SIZE_FAILED错误描述TileOp阶段L0C tensor的shape size校验失败。Store操作要求L0C的shape为2维M, N。可能原因Tile图展开阶段为L0C tensor构造了非2维的shape可能由Conv的MMAD节点输出shape推导异常导致。# 错误示例-L0C tensor shape不是2维 # 报错日志示例编译期static_assert # L0C shape size should be 2 Dim自定义Pass修改了L0C tensor的shape定义。处理方式此错误码对应的校验为编译期static_assert。在生成的kernel代码文件中搜索TStoreConv调用检查L0C tensor的shape声明。确认L0C tensor的shape为2维即M, N其中M tileH * tileWN tileN。开启编译debug模式dump计算图在dump图中检查MMAD输出到Store操作的L0C tensor节点shape。若上述排查均未发现问题请按CONV组件提issue或问题单附带kernel代码文件与复现用例。FC6403 TILEOP_STC_SHAPE_INVALID错误描述TileOp阶段static shape编译期常量shape校验非法。Conv TileOp的部分维度要求为编译期常量运行时无法修改。可能原因TileShape配置中部分维度需要为编译期常量但被设置为动态值导致std::tuple_element无法在编译期提取。# 错误示例-TileShape的静态维度配置异常如tileCinFmap或tileN配置为0导致bufferSize 0TileShape的buffer size计算结果为0或负数如某维度配置为0。处理方式检查pypto.set_conv_tile_shapes设置的TileShape各维度值是否均为正整数。确认TileShape中需要为编译期常量的维度如tileN、tileWout等在动态shape场景下使用了pypto.symbolic_scalar正确声明。开启编译debug模式查看编译日志中TileShape的展开结果是否合法。若上述排查均未发现问题请按CONV组件提issue或问题单附带完整报错日志与复现用例。FC6404 TILEOP_INDEX_INVALID错误描述TileOp阶段获取shape/stride的index校验非法。Conv TileOp的shape/stride访问index必须小于5。可能原因Tile图展开阶段尝试访问tensor shape/stride的第5维及以上index 5可能由tensor shape维度推导异常导致。# 错误示例-shape/stride访问index 5 # 报错日志示例编译期static_assert # Idx should be less than 52D conv的tensor被错误地当作3D conv处理或反之导致维度访问越界。处理方式此错误码对应的校验为编译期static_assert。检查报错对应的TileOp调用确认传入的index参数是否合法须 5。开启编译debug模式dump计算图检查Conv Load/Store节点的tensor shape维度是否与卷积类型匹配2D conv为4维pad5维3D conv为5维pad6维内部处理。确认卷积类型判断正确1D conv输入为3维2D conv输入为4维3D conv输入为5维。若上述排查均未发现问题请按CONV组件提issue或问题单附带kernel代码文件与复现用例。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考