Pytorch学习笔记(四)各组件的Debug记录

本文详细介绍了PyTorch中的DataParallel组件,从代码流程角度解析了数据并行的实现过程,包括输入分配、模型副本创建、多线程并行执行以及结果收集。同时提出了一个遗留问题:输入数据的分块操作具体位置和实现方式。

torch.nn

DataParallel详解

定义:model = torch.nn.DataParallel(model, device_ids=args.gpus).cuda()

代码流程

下面主要是详细介绍一下数据并行的流程,自己动手Debug一下更清晰!

  1. 在调用网络模型model(DataParallel类实例)时,实际是进入模型基类Module的特殊方法__call__module.py)。
    注: 特殊方法__call__用于实现对类实例的调用。
  2. 再通过模型基类Module的self.forward进入DataParallel类的forward方法(data_parallel.py):
    1. 先调用self.scatter在第一个维度分配输入
    2. 调用self.replicate产生模型副本放置在多个GPU上,形成modules列表
    3. 调用parallel_apply执行并行操作(parallel_apply.py)
  3. parallel_apply中通过多线程模块threading,将不同的module(自定义的网络模型类实例),input,GPU_ID以及kwargs分配给不同的线程。通过for循环控制启动线程活动和等待至线程中止。
  4. 通过多线程的run()方法进入线程目标函数_worker中,调用module(自定义的网络模型类实例),返回此次线程的结果并存储在指定字典results中。
    注:调用module时,同样也是先进入模
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值