| 支持numhead不能被tp整除的情况
Co-authored-by: Katrina-CXY<chenxinyi20@huawei.com>
# message auto-generated for no-merge-commit merge:
!560 merge aclgraph2 into dev
支持numhead不能被tp整除的情况
Created-by: Katrina-CXY
Commit-by: Katrina-CXY;cxy-katrina
Merged-by: ascend-robot
Description: <!--
PR描述模板更新日期:20251225
-->
# 合入背景
> 请描述为什么要做这个PR内的改动。\
> 如涉及,请关联前序PR或同特性/需求下的其他PR。\
> 如果是修复之前PR引入的问题,请关联引入问题的PR。\
> 注意:Fixes #ISSUE ID会自动关闭issue,如问题部分解决请不要使用Fixes,可以用Fix part of #ISSUE ID替代.
# 修改内容
> 请描述修改内容的具体实现,涉及哪些组件之间进行交互,可以用1、2、3、...进行罗列。\
> 如果是需求或者重构类的PR,需要补充详细设计文档(说明上下游组件关系、时序图、类图、DFX能力等内容)。
- QKVParallel支持num_head无法被tp数整除的场景
- RowParallel支持传入multiple_of,将权重按照multiple_of的倍数进行切分,如果不能被整除,则进行padding
# 资料变更
> 请确认是否涉及资料变更。如涉及,需要在PR中体现,并简要说明修改内容。如不涉及,需填写“不涉及”。
不涉及
# 接口变更
> 请确认是否涉及跨代码仓或者客户面可见的接口变更。如涉及,需要详细说明接口以及对应的变更内容,同时需要在资料中体现。如不涉及,需填写“不涉及”。
- 不涉及外部接口
- 模型侧适配接口RowParallelLinear新增multiple_of可选参数
- 框架测接口中Parameter类的load_row_parallel_weight和load_qkv_weight有变更
# 测试结果
> 请说明测试场景,测试方法以及测试结果。\
> 测试用例设计时需考虑硬件、部署方式、功能、性能、精度、显存等维度。
- 环境配置
```
source /usr/local/lib/python3.11/site-packages/mindie_llm/set_env.sh
export MASTER_IP="127.0.0.1"
export MASTER_PORT=7897 # 同一台环境不能重复
export MINDIE_LOG_TO_STDOUT=1 # 可选:日志输出到屏幕
source /usr/local/Ascend/ascend-toolkit/set_env.sh
设置PYTHONPATH
```
- ATB Graph Qwen2.5 7B TP8(num head不能被TP整除的场景)
```
torchrun --nproc_per_node 8 --master_port 20037 -m examples.run_pa --model_path /home/LargeModelInference/weight/float/qwen2.5_7b_instruct
[2026-03-12 23:39:06,346] [102443] [281473200209952] [llmmodels] [INFO] [run_pa.py-434] : ---------------end inference---------------
[2026-03-12 23:39:06,346] [102443] [281473200209952] [llmmodels] [INFO] [run_pa.py-611] : Answer[0]: Deep learning is a subset of machine learning that involves training artificial neural networks to perform complex tasks, such
[2026-03-12 23:39:06,346] [102443] [281473200209952] [llmmodels] [INFO] [run_pa.py-612] : Generate[0] token num: (0, 20)
```
- ATB Graph Qwen2.5 7B TP4(num head可以被TP整除的场景)
```
torchrun --nproc_per_node 4 --master_port 20037 -m examples.run_pa --model_path /home/LargeModelInference/weight/float/qwen2.5_7b_instruct
[2026-03-12 23:40:05,503] [104351] [281472946188320] [llmmodels] [INFO] [run_pa.py-434] : ---------------end inference---------------
[2026-03-12 23:40:05,503] [104351] [281472946188320] [llmmodels] [INFO] [run_pa.py-611] : Answer[0]: Deep learning is a subset of machine learning that involves training artificial neural networks with multiple layers to perform complex
[2026-03-12 23:40:05,503] [104351] [281472946188320] [llmmodels] [INFO] [run_pa.py-612] : Generate[0] token num: (0, 20)
```
# CheckList
> PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]。
- [x] 代码注释完备
- [x] 正确记录错误日志
- [x] 进行了返回值校验 (禁止使用void屏蔽安全函数、自研函数返回值;考虑接口的异常场景;调用底层组件接口时,需要进行返回值校验)
- [x] 进行了空指针校验
- [x] 若存在资源申请,使用后资源被正确的释放了
- [x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题
- [x] 按照[代码仓中提供的格式模板](https://gitcode.com/Ascend/MindIE-LLM/blob/master/.clang-format),使用clang-format工具格式化代码
- [x] 符合Ascend社区的编码规范。[C++ 语言编程指导](https://gitcode.com/Ascend/community/blob/master/docs/contributor/Ascend-cpp-coding-style-guide.md) | [C++ 语言安全编程指导](https://gitcode.com/Ascend/community/blob/master/docs/contributor/Ascend-cpp-secure-coding-guide.md)
See merge request: Ascend/MindIE-LLM!560 | 2 个月前 |