仅限于版本标识为CANN 8.0.RC2和Ascend HDK 24.1.RC2及其后续所有迭代版本的系统环境。
若在非指定版本中尝试采用该配置,可能触发系统级的异常行为,包括但不限于运行时错误。
MindSpeed-LLM 中 MC2 功能默认关闭,如需开启MC2,需将 mindspeed_llm/training/arguments.py 文件下,validate_args_decorator函数中的args.use_ascend_mc2 = False语句注释掉。
注意:使能MC2可能在部分模型带来精度问题。
在开启了TP和SP的大模型训练场景下,存在matmul计算和all-reduce操作的强依赖关系(不开启SP),或存在matmul计算和all_gather/reduce_scatter操作的强依赖关系(开启SP)。当模型参数量较大时,此处通信量和计算量都较大,在串行执行时,会引入较长的等待闲置时间。
针对存在强依赖关系的matmul计算和通信操作,昇腾自研MC2解决方案。
MC2通过融合算子的方式将matmul计算和集合通信操作进行融合,将较大的计算和通信任务切分成了较小的计算子任务和通信子任务,并通过流水的方式使得通信子任务和计算子任务可以互相掩盖,从而减少等待和闲置时间,提高利用率。
在python脚本侧将原本串行的matmul和all_gather/reduce_scatter操作通过MC2融合算子接口进行了融合。
具体参见代码实现。
MC2算子接口参见torch_npu.npu_mm_all_reduce_base接口说明。
当开启了TP和SP时,建议开启MC2进一步优化。
设置--use-ascend-mc2即可使能MC2算子。
在开启TP和SP的训练场景下,使用MC2可以减少内存开销并提高计算效率。
mcore场景下(开启--use-mcore-models),MoE模型,MLP部分不使能MC2。