总体思路
基于NPU的大模型迁移分为原仓迁移与AscendSpeed迁移,一般社区有开源训练脚本的模型可以考虑直接在原仓迁移,如果社区只有模型结构而没有开源训练脚本就需要进行AscendSpeed模型迁移,当模型需要在NPU上进行深入开发优化时也推荐基于AscendSpeed进行迁移开发。
图1 原始仓迁移
图2 AscendSpeed迁移
- 需要明确迁移仓库,主要包含模型权重,模型结构,训练脚本,数据集,词表文件,使用较为广泛的资源仓库是huggingface社区,基于原始模型仓库进行训练保证原始训练流程畅通。
- 参见环境准备完成NPU迁移与训练的环境准备,包括NPU驱动固件,CANN软件包,算子二进制包以及PyTorch框架。
- 在执行迁移操作前,需分析基于GPU平台的PyTorch训练脚本中算子、三方库套件、亲和API分析以及动态shape的支持情况,具体可参见《分析迁移工具》中的 章节。四种分析模式的区别如下:
- 算子支持情况分析模式:用户提供待分析的PyTorch训练脚本,可快速获得该训练脚本中不支持的torch API和cuda API信息,并输出训练脚本中API精度和性能调优的专家建议。
- 三方库套件分析模式:用户提供待分析的三方库套件源码,可快速获得源码中不支持的三方库API和cuda信息。
三方库API是指在三方库代码中的函数,如果某函数的函数体内使用了不支持的torch算子或者cuda自定义算子,则此函数就是三方库不支持的API。如果第三方库中其他函数调用了这些不支持的API,则这些调用函数也为不支持的API。
- 动态shape分析模式:用户提供待分析的PyTorch训练脚本,可快速获得该训练脚本中包含的动态shape信息。
- 亲和API分析模式:用户提供待分析的PyTorch训练脚本,可快速获得该训练脚本中可替换的亲和API信息。
- 根据模型类型进行迁移。
- 迁移完成后进行NPU训练,保证训练流程以及功能正常。
- 基于原始模型的精度数据进行对齐。
大模型迁移暂不支持模型中存在xformers依赖的Flash Attention融合算子的迁移。
大模型迁移暂不支持使用了对模型进行量化的bitsandbytes依赖的迁移。
大模型迁移暂不支持bmtrain框架的迁移。
父主题: PyTorch大模型训练适配