CANN/pypto Pass参数设置API pypto.set_pass_options【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto产品支持情况产品是否支持Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√功能说明修改Pass优化参数信息。其主要功能是在编译流程中针对特定的优化策略和具体的Pass动态修改其运行时参数配置从而实现精细化的控制和调试。函数原型set_pass_options(*, vec_nbuffer_setting: Optional[Dict[str, int]] None, cube_l1_reuse_setting: Optional[Dict[str, int]] None, cube_nbuffer_setting: Optional[Dict[str, int]] None, sg_set_scope: Optional[Union[int, Tuple[int, bool, bool]]] None, pg_partition_algorithm: Optional[str] None, auto_mix_partition: Optional[int] None, )参数说明参数名输入/输出说明vec_nbuffer_setting输入含义合图参数用于配置相同结构AIV子图的合并数量。说明该参数适用于结构相同的AIV子图合并。类型dict[str, int]。支持两种 key 格式①函数粒度 key字符串func{magic}_{order}或DEFAULT可实现不同 root function 间的精细化配置。func{magic}_{order}匹配特定 functionfuncMagicmagic的特定同构子图组hashorderorderDEFAULT匹配所有未显式指定的子图组。配置后合图信息会直接展示在泳道图的 hashOrder-hint 字段中含 subGraphCount代表合并前的子图数量可根据核心数匹配合并力度。详情参见下方函数粒度key配置说明。②语义标签 key任意非 func 前缀字符串按语义标签控制合图粒度详见下方语义标签key配置说明。可与函数粒度 key 共存。取值{DEFAULT: 1}跳过AIV子图合并{} 空字典自动合并根据AIV核心数自动计算合并粒度{DEFAULT: N, func8_0: N2}手动合并默认粒度为 Nfunc8_0 对应子图组粒度为 N2默认值{} 空字典影响Pass范围 NBufferMergecube_l1_reuse_setting输入含义合图参数用于配置重复搬运同一GM数据的子图合并数量。说明该参数适用于含有CUBE计算的子图合并与cube_nbuffer_setting同时配置时先进行此项合并再进行cube_nbuffer_setting相关合并。类型dict[str, int]。支持两种 key 格式①函数粒度 key字符串func{magic}_{order}或DEFAULT可实现不同 root function 间的精细化配置。合图信息会直接展示在泳道图的 hashOrder-hint 字段中含 subGraphCount代表合并前的子图数量可根据核心数匹配合并力度。详情参见下方函数粒度配置说明。②语义标签 key按语义标签控制详见下方语义标签key配置说明。取值{DEFAULT: 1}跳过L1Reuse合并{} 空字典自动合并{DEFAULT: N, func8_0: N2}手动合并默认粒度为 N默认值{} 空字典影响Pass范围L1CopyInReuseMergecube_nbuffer_setting输入含义合图参数用于配置相同结构AIC子图的合并数量。说明该参数适用于结构相同的AIC子图合并与cube_l1_reuse_setting同时配置时先进行cube_l1_reuse_setting相关合并再进行此项合并。类型dict[str, int]。支持两种 key 格式①函数粒度 key字符串func{magic}_{order}或DEFAULT可实现不同 root function 间的精细化配置。合图信息会直接展示在泳道图的 hashOrder-hint 字段中含 subGraphCount代表合并前的子图数量可根据核心数匹配合并力度。详情参见下方函数粒度配置说明。②语义标签 key按语义标签控制详见下方语义标签key配置说明。取值{DEFAULT: 1}跳过AIC子图合并{} 空字典自动合并{DEFAULT: N, func8_0: N2}手动合并默认粒度为 N默认值{DEFAULT: 1}影响Pass范围L1CopyInReuseMergesg_set_scope输入含义手动控制子图切分参数。说明通过为 Operation 分配 scope使得相同 scope_id非-1 的相邻 Operation 强制合并归入同一子图从而覆盖切分算法的自动划分结果。类型Tuple[int, bool, bool]或inttuple 格式(scope_id, allow_parallel_merge, allow_cross_scope_merge)各字段含义如下-scope_idintscope 标识取值范围 -1~2147483647。相同 scope_id 的相邻 Operation 归入同一子图-1 表示不参与 scope 合并由切分算法决定子图划分。-allow_parallel_mergebool控制同一 scope_id 下 Operation 的合并方式。取值 True/False。False默认仅允许存在上下游连接通路的 Operation 合并即 Operation A 的输出作为 Operation B 的输入时才可合并到同一子图。True允许位于并行分支无数据依赖的相同 scope_id 的 Operation 也合并到同一子图。-allow_cross_scope_mergebool控制带有 scope 的子图是否可与无 scopescope_id-1的子图合并扩大scope子图。取值 True/False。False默认带有 scope 的子图保持独立不与其他子图合并。True允许带有 scope 的子图与 scope_id-1 的子图合并。不同 scope_id 的子图之间不可合并。int 格式传入单个 int 时等价于(scope_id, False, False)即仅设置 scope_id不允许并行分支合并和跨 scope 合并。默认值(-1, False, False)影响Pass范围GraphPartition配置建议1视图类Operation与其对应的计算类Operation应配置相同的 scope_id。2Reshape Operation较为特殊部分场景会单独成子图手动控制合图行为可能失效。pg_partition_algorithm输入含义指定切分算法。说明配置GraphPartition环节进行子图切分所采用的算法。当同时配置了sg_set_scope时无论选择哪种切分算法都会优先遵从sg_set_scope的强制合图约束。类型str取值范围Iso, OspSarkar, OspBsp默认值Iso影响Pass范围GraphPartition算法选择指导请参考下文。auto_mix_partition输入含义控制ReduceCopyMerge Pass中的自动混合子图切分行为。说明该参数用于控制CV混合场景下子图的自动合并策略。类型int取值0不进行自动CV Mix合图1 进行自动CV Mix合图。默认值0影响Pass范围ReduceCopyMerge返回值说明无。约束说明设置时机不要求在图编译开始前调用可以在任何时候进行设置。类型安全必须确保传入的value的类型与参数定义的类型完全一致否则可能导致未定义行为或运行时错误。作用范围参数设置是局部的只会影响当前jit或者loop内的编译过程若未设置则继承上层作用域。语义标签keysetting 的字符串 key 必须与至少一个 operation 通过pypto.set_semantic_label设置的 semantic_label 完全匹配否则编译时报错。sg_set_scope 一致性约束同一 scope_id 的所有 Operation 必须设置相同的allow_parallel_merge和allow_cross_scope_merge否则编译报错。scope_id 为 -1 时allow_parallel_merge和allow_cross_scope_merge必须为 False。不同 scope_id 的子图之间不可合并allow_cross_scope_merge仅控制带 scope 的子图与无 scopescope_id-1的子图合并。调用示例# 函数粒度配置func{magic}_{order} 格式 pypto.set_pass_options( vec_nbuffer_setting{DEFAULT: 4, func8_0: 1, func8_1: 1}, cube_l1_reuse_setting{DEFAULT: 4, func8_0: 1, func8_1: 1}, cube_nbuffer_setting{DEFAULT: 4, func8_0: 1, func8_1: 1}) # 纯 DEFAULT pypto.set_pass_options(vec_nbuffer_setting{DEFAULT: 2}) # 语义标签 key 配置可与函数粒度 key 共存 pypto.set_semantic_label(V1) sij_scale pypto.mul(sij, softmax_scale) pypto.set_semantic_label() ... pypto.set_pass_options(vec_nbuffer_setting{DEFAULT: 2, V1: 1})dict类型配置说明函数粒度 key / 语义标签 key函数粒度 key 配置说明func{magic}_{order}功能概述通过func{magic}_{order}格式的 key可以针对特定 function的特定同构子图组hashorder设置合并粒度实现不同 root function 间的精细化配置。配置的 hashOrder 和 subGraphCount 信息会直接展示在泳道图的 hashOrder-hint 字段中格式为l1ReuseInfo hashOrder: func8_0, subGraphCount: 24可根据子图数量和核心数匹配合并力度。键值对含义Key: 字符串格式func{magic}_{order}或DEFAULT。func{magic}_{order}匹配 functionMagic 为 magic 的 function 中hashorder 为 order 的同构子图组。DEFAULT匹配所有未显式指定的同构子图组。Value (N): 表示合并粒度。即同构子图组内每 N 个子图合并为一个新子图执行。N1 表示不合并。格式约束func前缀必须小写。magic 和 order 必须为整数。magic 和 order 之间以下划线_分隔。示例合法 keyfunc0_0、func123_5、func8_1。示例非法 keyFunc0_0大写F、func_0缺少 magic、func123缺少 order。配置行为Pass 在处理当前 function 的子图合并时遵循 func{magic}_{order} 精确匹配 DEFAULT 默认配置 自动处理 的逻辑精确匹配若 funcMagic 和 hashorder 双双命中则按其对应的 Value N 进行合并。DEFAULT 默认配置若未精确命中但字典中存在DEFAULT则按DEFAULT对应的 Value 执行合并。自动处理若既未精确命中也无DEFAULT则自动计算合并粒度。配置示例配置说明{DEFAULT: 1}所有同构子图组跳过合并。{DEFAULT: 4, func8_0: 1, func8_1: 1}默认 4 个同构子图为一组进行合并func8 中 hashorder 0 和 1 的子图组跳过合并不合并。{DEFAULT: 2, func8_1: 4}默认 2 个同构子图为一组进行合并func8 中 hashorder 1 的子图四个为一组进行合并。{func8_0: 2}func8 函数中hashorder 为 0 的子图两个为一组进行合并其他同构子图组根据硬件核心数自动计算合并粒度并进行合并。语义标签 key 配置说明功能概述除函数粒度 key 外vec_nbuffer_setting、cube_l1_reuse_setting和cube_nbuffer_setting还支持使用字符串 key即通过pypto.set_semantic_label设置的语义标签名称。字符串 key 允许用户精确控制特定 operation 所在子图允许多个的合并粒度无需关心其 hashorder 编号。字符串键值对含义Key (label): 语义标签名称必须与至少一个 operation 的semantic_label完全匹配。Value (N): 表示合并粒度。优先级机制字符串 key 的优先级高于函数粒度 key 的默认配置。处理流程为首先根据函数粒度 keyfunc{magic}_{order}/DEFAULT确定各同构子图组的基础合并粒度。然后字符串 key 的值直接替换而非取 max对应子图组的合并粒度。当多个不同的字符串 label 指向同一个同构子图组时取这些 label 值中的最大值。vec_nbuffer_setting / cube_nbuffer_setting 的语义标签行为字符串 key 覆盖其所在 operation 对应的整个同构子图组的合并粒度。cube_l1_reuse_setting 的语义标签行为与vec_nbuffer_setting和cube_nbuffer_setting不同cube_l1_reuse_setting的字符串 key仅作用于包含对应标签 operation 的子图不展开到整个同构组。即同构组内可能只有部分子图被字符串 key 覆盖其他子图保持函数粒度 key 的值。语义标签配置示例配置说明{DEFAULT: 2, V1: 1}所有同构子图组默认合并粒度为2但 V1 标签所在的同构子图组合并粒度被替换为1。{V1: 3}V1 标签所在的同构子图组合并粒度为3其他同构子图组自动计算合并粒度。{DEFAULT: 2, V1: 1, V2: 3}默认合并粒度为2V1 所在组替换为1V2 所在组替换为3。若某一组同时有 V1 和 V2 两种OP则取 max(1, 3) 3。配置示例# 混合函数粒度 key 和语义标签 key 配置 pypto.set_semantic_label(V1) sij_scale pypto.mul(sij, softmax_scale) pypto.set_semantic_label() # 通过更改语义标签来精确控制只有该mul OP的语义标签是V1 ... pypto.set_pass_options(vec_nbuffer_setting{DEFAULT: 2, V1: 1}) # 纯语义标签 key 配置 pypto.set_pass_options(cube_l1_reuse_setting{MM1: 4})sg_set_scope 配置说明配置示例# int 格式等效于 (10, False, False)仅设置 scope_id pypto.set_pass_options(sg_set_scope10) # tuple 格式scope_id1允许并行分支合并不允许跨 scope 合并 pypto.set_pass_options(sg_set_scope(1, True, False)) # tuple 格式scope_id2允许与无 scope 的子图合并 pypto.set_pass_options(sg_set_scope(2, False, True)) # 恢复默认不参与 scope 合并由合图算法自动决定 pypto.set_pass_options(sg_set_scope-1)典型场景场景一整张计算图不切分当需要将整个计算图保持不切分时因数据切块会产生多条并行分支这些分支之间无直接数据依赖默认会被切分算法拆为独立子图。推荐设置sg_set_scope(scope_id, True, False)通过allow_parallel_mergeTrue使相同 scope_id 的并行分支 Operation 合并到同一子图。场景二A5 CV 混合场景构造 Mix 子图以减少 GM 搬运当 Cube 操作的前后均有 Vec 操作时目标是构造一个包含 Cube 和 Vec 的 Mix 子图避免中间结果在 GM 上反复搬运。根据是否明确 scope 边界分为以下两种情况场景 2.1明确 scope 边界当可以明确划分 Cube 操作及其紧邻 Vec 操作的边界时使用(scope_id, False, False)标记边界使 Cube 和紧邻的 Vec 强制归入同一子图形成 Mix 子图。# 明确标记 Cube 及紧邻 Vec 为同一 scope形成 Mix 子图 pypto.set_pass_options(sg_set_scope(1, False, False)) # ... Cube 操作 ... # ... 紧邻的 Vec 操作 ... pypto.set_pass_options(sg_set_scope-1)场景 2.2不明确 scope 边界仅标记 CV 合并边界当无法明确划分边界但需要 Cube 前后的 Vec 子图与 Cube 子图合并形成 Mix 子图时使用(scope_id, False, True)标记 Cube 及其紧邻的 Vec 作为合并锚点。通过allow_cross_scope_mergeTrue该 scope 子图中的 Vec 可与前后无 scopescope_id-1的 Vec 子图合并形成更大的子图以减少 GM 数据搬运并与 Cube 子图一起形成 Mix 子图。# 前置 Vec 操作scope_id-1由切分算法自动决定 vec_out some_vec_op(x) # 标记 CV 合并锚点允许与无 scope 的相邻子图合并 pypto.set_pass_options(sg_set_scope(1, False, True)) # ... Cube 操作 ... matmul_result pypto.matmul(vec_out, w) # ... 紧邻的 Vec 操作 ... pypto.set_pass_options(sg_set_scope-1) # 后续 Vec 操作scope_id-1可与上方 scope 子图合并为更大子图 result other_vec_op(add_result)pg_partition_algorithm 算法选择指导 (Algorithm Selection Guidance)参数值 (Value)适用场景 (Applicable Scenario)Iso基于同构的切分算法 (Isomorphism-based partitioning)适用于常规通用场景 (suitable for general-purpose use)。OspSarkar基于关键路径缩减的瓦片内核融合。 (Fuses tile kernels based on critical path reduction.)OspBsp基于 BSP 模型融合瓦片内核用于并行计算和同构检测。 (Fuses tile kernels based on the BSP model for parallel computation and isomorphism detection.)【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考