华为Ascend众智计划项目--3DMPPE_ROOTNET--Pytorch模型迁移至NPU(三)

系列文章目录

项目信息、本地GPU单卡复现:
华为Ascend众智计划项目–3DMPPE_ROOTNET–Pytorch模型迁移至NPU(一)

模型迁移——本地代码添加:
华为Ascend众智计划项目–3DMPPE_ROOTNET–Pytorch模型迁移至NPU(二)

模型迁移——服务器GPU-2P调试和NPU单卡调试:
华为Ascend众智计划项目–3DMPPE_ROOTNET–Pytorch模型迁移至NPU(三)

模型迁移——NPU单P性能和精度调优:
华为Ascend众智计划项目–3DMPPE_ROOTNET–Pytorch模型迁移至NPU(四)

模型迁移——NPU-8P调试:
华为Ascend众智计划项目–3DMPPE_ROOTNET–Pytorch模型迁移至NPU(五)


前言

  本系列文章记录笔者在完成华为昇腾众智项目的主要过程、遇到的问题及解决方案等。Ascend 众智计划是华为围绕 Ascend 基础软件平台推出的一项生态合作计划,旨在汇聚高校、科研院所、企业等组织和机构的开发团队,通过项目合作方式,基于 Ascend 基础软硬件平台开发算子、网络模型及行业参考设计,不断丰富 Ascend 计算产业生态,为加速千行百业智能化升级贡献智慧与力量。笔者负责的是姿态识别模型3DMPPE_ROOTNET的训练任务,该模型是基于Pytorch框架实现的。



一、服务器GPU-2P调试

  • 本节内容主要是对新添加的DDP多卡代码进行调试,采用2张2080Ti。因为GPU单卡环境已经跑通,所以双卡相对来说比较简单,主要时间耗费在了上传、解压数据以及配置环境上。因为华为NPU所使用的pytorch环境为1.5.0,故租用GPU时选择的环境也必须与之相同。

  • 另外注意多卡环境下的batch_size、FPS、以及模型保存相较于单卡还需要额外进行一些改变。如果遇到问题可以参照modelzoo中已经完成的模型,或查看华为文档中的FAQ,必要时联系华为方负责人。这里给出几个可以参考的模型(均为NPU上的代码,可以参考)。resnet50resnet50_8p。这里给出修改的一些例子。
    以笔者的代码为例:
    FPS原先为:cfg.batch_size / fps_timer.average_time 多卡环境下为:cfg.batch_size * ngpus_per_node / fps_timer.average_time
    模型保存时只需保存一个,所以需要添加if dist.get_rank() == 0:
    batch_size方面,多卡情况下输入的是总的batch_size,每张卡的batch_size需要进行额外计算:args.batch_size = int(args.batch_size / ngpus_per_node)
    以上均为例子,修改需要根据代码实际情况,请多参考已经完成的模型或文档。

  • 因为笔者负责的模型数据集较大,经常涉及到多个压缩包的合并和解压,可以参考这篇博客。ubuntu下分解大压缩文件或解压拆分后的文件

  • 注意多卡GPU在调试时不要使用prof,否则可能会导致训练时间增加、内存溢出等问题。prof仅用作单卡调试,相当于debug模式。如图是两张卡的情况下启用了prof,可以看到一个epoch需要接近3h,还不如单卡。

  • 有意思的是多卡情况下笔者第6个epoch跑完得到的模型,进行测试后发现已经达到了论文精度。


二、NPU单卡调试

1.代码修改

  • 修改时建议先参照文档进行单P代码的修改和功能打通,待单P完善可以跑通后,再在原来的基础上增加和修改多P的代码。
  • 参考官方文档的2.1.3 NPU功能打通部分。详细的NPU单卡所需要修改的地方请点击这里。另外文档中也给出了一个可供参考的模型ShuffleNetV2进行修改时请务必仔细阅读文档, 但不一定完全按照文档进行修改。例如文档中CALCULATE_DEVICE = "npu:1",笔者在单P运行时需要设置为CALCULATE_DEVICE = "npu:0"。还有单P文档中的
if 'npu' in CALCULATE_DEVICE:     
            target = target.to(torch.int32)

这部分无论是否添加,笔者的代码在NPU上都可以正常运行,且添加后会导致精度有略微下降,故这部分代码先注释掉,等后续看华为方面是否有特别要求。


2.环境配置和代码运行

  • 按照教程和文档连接华为方所提供的VPN和服务器。笔者使用的是Xshell+WinSCP,前者主要负责输入指令,后者主要负责文件管理。WinSCP不知什么原因输入指令时经常会报错。
  • 登入NPU-1P服务器后,首先创建自己的文件夹,之后复制一份pt-1.5的conda环境conda create -n BBB --clone AAA,安装所需的包。
  • 另外虽然Xshell可以提供比较稳定的连接,这里还是建议使用nohup后台运行代码。
  • 注意运行代码前要激活自己的conda环境并运行source env_npu.sh,再运行自己的程序。另外在设置了env_npu.sh后,代码目录下会产生很多日志文件,在使用WinSCP访问时读取需要很久,所以建议将运行代码的sh脚本放到另外一个文件夹,这样在修改和访问时非常便捷。如图所示,main下为代码文件,程序在运行时会产生很多日志文件,sh为运行代码的脚本文件。笔者的main下现在有10w多个日志文件,访问非常耗时。
    在这里插入图片描述


总结

本文介绍了模型迁移过程中服务器GPU-2P的调试、NPU单P模型的调试,包括代码修改、环境配置和代码运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值