提高模型的训练性能(三)

转载地址:https://bbs.huaweicloud.com/forum/thread-118721-1-1.html

作者:李响

AI开发者有时会遇到超大模型的训练问题,即模型参数所占内存超过了设备内存上限。为高效地训练超大模型,一种方案便是分布式并行训练,也就是将工作交由同构的多个加速器(如Ascend 910 AI处理器,GPU等)共同完成。但是这种方式在面对几百GB甚至几TB级别的模型时,所需的加速器过多。而当从业者实际难以获取大规模集群时,这种方式难以应用。另一种可行的方案是使用主机端(Host)和加速器(Device)的混合训练模式。此方案同时发挥了主机端内存大和加速器端计算快的优势,是一种解决超大模型训练较有效的方式。在MindSpore中,AI开发者可以将待训练的参数放在主机,同时将必要算子的执行位置配置为主机,其余算子的执行位置配置为加速器,从而方便地实现混合训练。

准备模型代码:Wide&Deep的代码可参见:https://gitee.com/mindspore/mindspore/tree/r1.2/model_zoo/official/recommend/wide_and_deep,其中,train_and_eval_auto_parallel.py为训练的主函数所在,src/目录中包含Wide&Deep模型的定义、数据处理和配置信息等,script/目录中包含不同配置下的训练脚本。

准备数据集:请参考https://doi.org/10.24963/ijcai.2017/239下载数据集,并利用脚本src/preprocess_data.py将数据集转换为MindRecord格式。

配置处理器信息:在裸机环境(即本地有Ascend 910 AI 处理器)进行分布式训练时,需要配置加速器信息文件。此样例只使用一个加速器,故只需配置包含0号卡的rank_table_1p_0.json文件(每台机器的具体的IP信息不同,需要查看网络配置来设定,此为示例),如下所示:

{

     "version": "1.0",

     "server_count": "1",

     "server_list": [

         {

             "server_id":"10.155.170.16",

             "device": [

                      {"device_id":"0","device_ip":"192.1.113.246","rank_id":"0"}],

             "host_nic_ip":"reserve"

         }

     ],

     "status": "completed"

 }

配置混合执行

配置混合训练标识。在src/config.py文件中,设置argparse_init函数中的host_device_mix默认值为1,设置WideDeepConfig类的__init__函数中self.host_device_mix为1:

self.host_device_mix = 1

检查必要算子和优化器的执行位置。在src/wide_and_deep.py的WideDeepModel类中,检查EmbeddingLookup为主机端执行:


在src/wide_and_deep.py文件的class TrainStepWrap(nn.Cell)中,检查两个优化器主机端执行的属性。

self.optimizer_w.target = "CPU"

self.optimizer_d.target = "CPU"

训练模型

使用训练脚本script/run_auto_parallel_train.sh。执行命令:bash run_auto_parallel_train.sh 1 1 DATASETRANK_TABLE_FILE, 其中第一个1表示用例使用的卡数,第二1表示训练的epoch数,DATASET是数据集所在路径,RANK_TABLE_FILE为上述rank_table_1p_0.json文件所在路径。

运行日志保存在device_0目录下,其中loss.log保存一个epoch内中多个loss值,其值类似如下:

epoch: 1 step: 1, wide_loss is 0.6973925, deep_loss is 0.8778346

epoch: 1 step: 2, wide_loss is 0.6342528, deep_loss is 0.8242663

epoch: 1 step: 3, wide_loss is 0.6127324, deep_loss is 0.81273705

epoch: 1 step: 4, wide_loss is 0.6107222, deep_loss is 0.7713442

epoch: 1 step: 5, wide_loss is 0.5837831, deep_loss is 0.75526016

epoch: 1 step: 6, wide_loss is 0.5775452, deep_loss is 0.73038751

epoch: 1 step: 7, wide_loss is 0.5698844, deep_loss is 0.7145403

epoch: 1 step: 8, wide_loss is 0.55553076, deep_loss is 0.7123514

epoch: 1 step: 9, wide_loss is 0.5633628, deep_loss is 0.70278373

epoch: 1 step: 10, wide_loss is 0.556088, deep_loss is 0.6784124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值