Dist Train
问题分析
多模态模型的训练中,由于不同模态模型对算力和内存需求的异构性,会产生以下问题:
- 不同模态模型的最优并行配置不同,全部使用同一种并行配置,造成负载不均衡、资源利用不充分;
- 多模型融合部署,造成静态内存占用偏高,训练内存资源利用率不佳。
解决方案
新增dist-train功能,通过对异构模型配置不同的计算资源和并行配置,减少冗余的静态资源和异构模型间的气泡,使能异构模型之间的运行速度达到最优匹配。
使用方法
在启动脚本中添加参数--dist-train。
GPT_ARGS="
...
--dist-train \
"
需要在MindSpeed-MM仓库中,对应模型目录下的model.json中添加dist_config字段,具体配置示例如下:
{
"dist_config": {
"model_name": "internvl2", // 多模态模型名称
"use_multiparam_send_recv": false, // 模型间是否传递tensor列表
"model_config": [
{
"name": "vit", // 内部模型名称
"model_index": 0, // 模型位于流水线中的序号
"world_size": 1, // 模型使用卡数
"tensor_model_parallel_size": 1,
"pipeline_model_parallel_size": 1,
"context_parallel_size": 1,
"forward_only": false // 是否不做反向计算
},
{
"name": "gpt",
"model_index": 1,
"world_size": 3,
"tensor_model_parallel_size": 1,
"pipeline_model_parallel_size": 3,
"context_parallel_size": 1,
"forward_only": false,
"main_dp": true // 配置该项时,代表DP数量以该模型为准,只在需要开启inner_dp时配置该项,且该配置唯一
}
]
}
}
使用效果
根据模型不同、参数量不同,效果各有差异,可以针对SPS、MFU等指标进行调优,均有收益。
注意事项
- 目前支持模型和对应的子模型名称:internvl2 - [vit, gpt], opensoraplan1.3 - [vae, dit];
- 需要注意在配置并行策略时,若原生模型不支持某种并行策略,则dist-train配置中也不应该开启此种并行策略;
- 配置并行策略时,需要保证各个模型的DP数量保持一致,若配置有main_dp,则以main_dp的DP数量为准;
- 需要使用dist-train配套的权重转换脚本,和MindSpeed-MM中使用的权重互相转换。