| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[Feature][compilation]Fix timing measurement and add MulAdd fusion pattern Co-authored-by: blian6<bin.lian@outlook.com> Co-authored-by: blian<lianbin@huawei.com> # message auto-generated for no-merge-commit merge: !270 merge dev into dev [Feature][compilation]Add muls_add Triton kernel fusion pattern, benchmark utilities, and framework fixes Created-by: blian Commit-by: blian6;blian Merged-by: ascend-robot Description: # Which issue(s) this PR fixes or accomplishes 修复compilation模块的benchmark方法,并添加triton算子的感知方案 # Purpose 本 PR 包含两部分工作: ## Part A: muls_add Triton kernel 融合 参考 vllm-ascend 的 muls_add 融合方案,将 mul_add_pattern.py 中的代数优化替换为 kernel 级融合: - **新增** mindiesd/layers/triton_utils.py — Triton Ascend 辅助函数,含 _TRITON_ON_ASCEND 运行时检测 - **新增** mindiesd/layers/muls_add.py — muls_add(x, y, scale) 逐元素融合 kernel(Triton 优先 + torch 自动降级),通过 torch.library.custom_op 注册为 torch.ops.mindiesd.muls_add - **重构** mindiesd/compilation/patterns/mul_add_pattern.py — 工厂函数 create(dtype, scale) + PatternBase 静态接口;pattern 从 mul(a,c)+mul(b,c) 改为 x * scale + y;replacement 从 mul(add(a,b),c) 改为 muls_add(x, y, scale) kernel 调用 - **修改** mindiesd/layers/__init__.py — 导出 muls_add - **新增** tests/layers/test_muls_add.py — 13 项 kernel 单元测试(dtype/shape/scale/边界/inplace/device 保真性) - **修改** tests/compilation/patterns/test_mul_add_pattern.py — 适配 2-输入 + scale pattern,仅保留正确性断言(cosine similarity ≥ 2^-7) ## Part B: benchmark 基础设施与框架修复 - **新增** tests/compilation/test_bench_utils.py — 公共 benchmark 函数(warmup + sync + 多迭代 + 后5平均),替代原有不准确的 time.perf_counter() 单次测量 - **修复** 4 个 pattern 测试文件接入新 benchmark,断言改为 compiled_time < original_time: - tests/compilation/patterns/test_adelayernorm_pattern.py - tests/compilation/patterns/test_gelu_pattern.py - tests/compilation/patterns/test_rmsnorm_pattern.py - tests/compilation/patterns/test_rope_pattern.py - **修复** passes/__init__.py 中 threading.Lock 误用(threading.Lock() → Lock 实例) - FusionPatterns 新增 enable_mul_add 开关 - passes/__init__.py 新增末尾换行符 - **移除** tests/compilation/test_backend.py(SamplePass 为数学恒等变换,不支持 CPU 运行) # Test Plan ### Kernel 层测试 tests/layers/test_muls_add.py — 13 项,覆盖 float32/float16/bfloat16 三种 dtype × 5 种 shape × 7 种 scale 组合,边界值(scale=0/1/-1),inplace 安全性,device/dtype 保真性,多次调用一致性。 ### Pattern 集成测试 tests/compilation/patterns/test_mul_add_pattern.py — 4 项(bfloat16, float16, float32, 32×8192),验证 torch.compile + MindieSDBackend 全链路,cosine similarity ≥ 2^-7。 ### Benchmark + 注册测试 - tests/compilation/test_pattern_registration.py — enable_mul_add 开关测试 - tests/compilation/test_bench_utils.py — benchmark 工具函数 - tests/compilation/patterns/test_adelayernorm_pattern.py - tests/compilation/patterns/test_gelu_pattern.py - tests/compilation/patterns/test_rmsnorm_pattern.py - tests/compilation/patterns/test_rope_pattern.py ### 远端验证命令 bash python -m pytest tests/layers/test_muls_add.py -v python -m pytest tests/compilation/patterns/ -v python -m pytest tests/compilation/test_pattern_registration.py -v Test Report 环境 Ascend 910B (175.99.1.3), torch 2.8.0, torch_npu 2.8.0, triton_ascend 3.2.0 Kernel 单元测试 13/13 passed, 15 subtests Pattern 集成测试 4/4 passed Benchmark + 注册测试 9/9 passed Triton 硬件 40 vector cores, 20 AI cores See merge request: Ascend/MindIE-SD!270 | 2 个月前 | |
[Feature] 支持编译能力,实现自定义的layer替换 Co-authored-by: blian6<bin.lian@outlook.com> # message auto-generated for no-merge-commit merge: !19 merge dev into dev [Feature] 支持编译能力,实现自定义的layer替换 Created-by: blian Commit-by: blian6 Merged-by: ascend-robot Description: **背景** MindIE SD适配模型过程中,需要手动替换layer,此时需要对模型的前端进行大量修改,不利于与客户侧的优化和自定义改动叠加。随着pytorch的compile接口能力逐步完善,可以利用fx graph实现pattern的替换,从而减少手工layer替换的过程。 **方案** 整体编译模块复用torch的设计,利用其内部的pattern matcher进行扩展,实现自定义匹配和替换的模式。 MindieSDBackend中主要是包含各类pass,现在主要使用了ReduandantNodeEliminationPass和PatternMatchPass,他们在passes目录下。此处重点是PatternMatchPass,特别实现了register_pattern_to_pass.py文件,用以辅助实现patterns的扩展。在其中定义了PatternBase的基类。 为了实现对pattern的使能控制,实现了CompilationConfig类以支持对特定的pattern模式的开关,可以修改成针对特定模型的自定义开关能力(如果存在冲突或者耗时问题时)。 为了支持compile能力,需要注册的op支持推导能力,故而,需要修改了layers下的rope.py文件,添加了torch.library.register_fake。(但是这个接口本身在torch的不同版本中存在不同的定义,同时layers模块不在compilation内,属于宽兼容的接口,所以,需要对该接口进行自定义扩展,以支持不同版本的torch。后续目标可以是支持torch2.1.0, 2.6.0+,该PR中未实现该功能,在后续代码中补充) 对于Pattern的实现,本身需要满足一定的要求,此处以现在代码中的样例进行说明: class RopePattern(PatternBase): @staticmethod def inputs(): x = torch.empty(2, 2, 2, 2, dtype=torch.bfloat16, device="meta") # 此处非1的值标识在捕获时的任意值 cos = torch.empty(1, 2, 1, 2, dtype=torch.bfloat16, device="meta") sin = torch.empty(1, 2, 1, 2, dtype=torch.bfloat16, device="meta") return [x, cos, sin] @staticmethod def pattern(x, cos, sin): # pattern和replacement的参数需要保持一致 def func(x, cos, sin): ... ... return func(x, cos, sin) @staticmethod def replacement(x, cos, sin): ... ... **测试结果** 通过对flux.1模型的rope模块的替换,现成功在魔乐社区版本上实现了替换。当复原rope的表达后,整体性能2.42it/s,当启动编译能力后,整体性能2.53it/s,该数值与直接使用融合算子效果相同。 **约束** 由于使用了torch高版本的dynamo的内部接口,该编译模型对torch的版本要求较高。当前测试主要基于torch.2.8.0版本。 现有mindie sd的CI等系统中主要使用torch2.1.0版本,在此情况下,会跳过相关的测试用例。 See merge request: Ascend/MindIE-SD!19 | 6 个月前 | |
[Bugfix][log]Unify MindIE SD logging and improve diagnostics Co-authored-by: guowenna1<guowenna1@huawei.com> # message auto-generated for no-merge-commit merge: !328 merge 0603_log into dev [Bugfix][log]Unify MindIE SD logging and improve diagnostics Created-by: guowenna1 Commit-by: guowenna1 Merged-by: ascend-robot Description: # Which issue(s) this PR fixes or accomplishes Fix part of https://gitcode.com/Ascend/MindIE-SD/issues/158 # Purpose 本 PR 修复 MindIE SD 日志问题,主要包括: 1. 统一 MindIE SD Python 模块日志出口,避免 compilation、share_memory 等模块直接使用标准库 logging.getLogger(__name__),导致日志格式、落盘路径、过滤级别和开关行为不一致。 2. 优化日志模块默认输出格式,确保默认与 verbose 模式均包含 MindIE SD 组件标识。 3. 精简默认 INFO 场景日志,将正常流程、调试态信息降级为 DEBUG,避免默认运行场景产生不必要日志。 4. 增强 WARNING/ERROR 日志内容,补充问题描述、可能根因、参数期望值/实际值和进一步排查建议。 5. 修复 pre-commit 暴露的日志格式、pylint、bandit、typos 等问题,包括日志参数数量不匹配、拼写错误、动态 API 静态检查误报标注和 EPLB scheduler 嵌套层级过深问题。eplb_scheduler、greedy_algorithm中此类改动较多,多是形式改动,无实际影响。 # Test Plan 1. 执行 pre-commit 全量检查,覆盖 ruff、pylint、bandit、typos 等静态质量门禁。 2. 执行 Python 编译检查,确认本次修改未引入语法错误。 3. 执行 git diff 空白检查,确认无行尾空白、格式污染。 4. 白盒检查 mindiesd 正式代码中默认 INFO 日志是否清理完成。 5. 白盒检查除日志模块本体外,是否仍存在直接使用标准库 logging.getLogger(__name__) 的模块。 # Test Report 已执行并通过:  See merge request: Ascend/MindIE-SD!328 | 27 天前 | |
[Bugfix][log]Unify MindIE SD logging and improve diagnostics Co-authored-by: guowenna1<guowenna1@huawei.com> # message auto-generated for no-merge-commit merge: !328 merge 0603_log into dev [Bugfix][log]Unify MindIE SD logging and improve diagnostics Created-by: guowenna1 Commit-by: guowenna1 Merged-by: ascend-robot Description: # Which issue(s) this PR fixes or accomplishes Fix part of https://gitcode.com/Ascend/MindIE-SD/issues/158 # Purpose 本 PR 修复 MindIE SD 日志问题,主要包括: 1. 统一 MindIE SD Python 模块日志出口,避免 compilation、share_memory 等模块直接使用标准库 logging.getLogger(__name__),导致日志格式、落盘路径、过滤级别和开关行为不一致。 2. 优化日志模块默认输出格式,确保默认与 verbose 模式均包含 MindIE SD 组件标识。 3. 精简默认 INFO 场景日志,将正常流程、调试态信息降级为 DEBUG,避免默认运行场景产生不必要日志。 4. 增强 WARNING/ERROR 日志内容,补充问题描述、可能根因、参数期望值/实际值和进一步排查建议。 5. 修复 pre-commit 暴露的日志格式、pylint、bandit、typos 等问题,包括日志参数数量不匹配、拼写错误、动态 API 静态检查误报标注和 EPLB scheduler 嵌套层级过深问题。eplb_scheduler、greedy_algorithm中此类改动较多,多是形式改动,无实际影响。 # Test Plan 1. 执行 pre-commit 全量检查,覆盖 ruff、pylint、bandit、typos 等静态质量门禁。 2. 执行 Python 编译检查,确认本次修改未引入语法错误。 3. 执行 git diff 空白检查,确认无行尾空白、格式污染。 4. 白盒检查 mindiesd 正式代码中默认 INFO 日志是否清理完成。 5. 白盒检查除日志模块本体外,是否仍存在直接使用标准库 logging.getLogger(__name__) 的模块。 # Test Report 已执行并通过:  See merge request: Ascend/MindIE-SD!328 | 27 天前 | |
[Refactor][compilation] 支持同类多组pattern的注册使用 Co-authored-by: blian6<bin.lian@outlook.com> Co-authored-by: zhangtao<zhangtao529@huawei.com> # message auto-generated for no-merge-commit merge: !88 merge dev-support-multiPattern into dev [Refactor][compilation] 支持同类多组pattern的注册使用 Created-by: blian Commit-by: blian6;zhangtao Merged-by: ascend-robot Description: **背景** 原有注册机制仅支持单个pattern的注册,但是实际中,存在很多相似的pattern,这些pattern本身仅存在微小差异,需要支持批量注册。 **方案** 1. 扩展register_pattern_to_pass接口,支持Union[PatternBase, Type[PatternBase], Iterable[Union[PatternBase, Type[PatternBase]]]]的类型的输入 2. 在类外定义函数,支持对特定分支的路由。 3. 将动态注册改成表驱动的方式,简化注册过程 **测试** 单元用例:  **性能** msprof --application="python3 compilation/patterns/test_rope_pattern.py" grep -nr RotaryPost* op_summary_20251223155841.csv 8:0,4294967295,9,1479,RotaryPositionEmbedding1,**RotaryPositionEmbedding**,dynamic,AI_VECTOR_CORE,1766505508467322.081 ,281.866,6359638.200000,40,0,NO,"""1,4608,24,128;1,4608,1,128;1,4608,1,128""",DT_BF16;DT_BF16;DT_BF16,NCHW;NCHW;NCHW,"""1,4608,24,128""",DT_BF16,NCHW,N/A,0.0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,278.272,8904714,249.921,0.898,56.545,0.203,22.465,0.081,14.629,0.053,0.005,0.000 32:0,4294967295,38,1479,**RotaryPositionEmbedding2**,RotaryPositionEmbedding,dynamic,AI_VECTOR_CORE,1766505508921709.560 ,139.443,252629.290000,40,0,NO,"""1,4608,24,128;1,4608,1,128;1,4608,1,128""",FLOAT;FLOAT;FLOAT,NCHW;NCHW;NCHW,"""1,4608,24,128""",FLOAT,NCHW,N/A,0.0,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,134.718,9699715,96.295,0.715,18.815,0.14,26.887,0.2,13.017,0.097,0.007,0.000 针对rope已经实现替换。 See merge request: Ascend/MindIE-SD!88 | 6 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 个月前 | ||
| 6 个月前 | ||
| 27 天前 | ||
| 27 天前 | ||
| 6 个月前 |