本发明专利技术涉及一种基于LSF的单主机多GPU分布式pytorch并行计算方法,属于计算机领域。该方法包括两个部分:第一部分:资源申请及调度;第二部分:使用资源进行深度学习模型的训练。使用一个进程来计算模型参数,然后在每个批处理期间将分发到每个GPU,每个GPU计算各自的梯度,汇总到GPU0中进行求平均,由GPU0进行反向传播更新参数,再把模型的参数由GPU0传播给其他的GPU。GPU利用率通常很低。nn.DataParallel要求所有的GPU都在同一个节点上,而且不能使用Apex进行混合精度训练。相较于现有的dataparrell方式,速度更快,效率高,GPU占用更高。高。高。
【技术实现步骤摘要】
基于LSF的单主机多GPU分布式pytorch并行计算方法
[0001]本专利技术属于计算机领域,涉及基于LSF的单主机多GPU分布式pytorch并行计算方法。
技术介绍
[0002]近些年来,深度学习技术在图像和自然语言处理等方向发展迅速。为了使模型具有更高的精度和更强的泛化能力,在设计时模型结构往往更深更复杂,训练用的数据也更庞大。其中模型迭代时的前向传播与反向传播步骤伴随着大量计算,是典型的计算密集型任务。尽管硬件上GPU(Graphics Processing Unit
‑
图形处理器)可以提供更强的算力,模型本身可以通过算法进行优化,加快收敛速度,但单机能提供的资源依旧无法满足大规模的训练任务。分布式计算通过将训练任务切分并使用多节点并行执行可以有效缓解了这一问题。
[0003]PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:
[0004]1、具有强大的GPU加速的张量计算(如NumPy)。
[0005]2、包含自动求导系统的深度神经网络。
[0006]LSF(load sharing facility)是IBM旗下一个工业导向,商业级的软件。它强大的资源调度管理能力,使其能以更快的速度,更均衡的负载,更可靠的表现及更低的成本去分配多种IT资源执行分布式任务。对于深度学习训练任务,LSF能高效灵活地分配GPU资源,帮助创建,管理分布式计算环境,从而加快训练速度。但对于LSF环境下的作业,加速神经网络模型的训练最简单直接的办法是使用GPU,往往一块GPU的显存容量是有限的,如果遇到了比较大的模型或者是参数量巨大的情况下会直接爆显存,最简单粗暴的办法就是加GPU。这会有一个核心的问题,为了使用多块GPU进行训练,必须想一个办法在多个GPU上进行分发数据和模型,并且协调训练的过程,提升训练速度。
[0007]目前PyTorch可以在单块GPU卡中进行计算,但无法通过多块GPU并行计算达到和单块GPU同等的倍数计算效率,使得多卡的使用性价比大大降低。
技术实现思路
[0008]有鉴于此,本专利技术的目的在于提供一种基于LSF的单主机多GPU分布式pytorch并行计算方法,解决单任务无法在超算中心调用多块GPU计算资源的技术问题,使软件在多GPU平台上提高运算能力,且该项目在任意超算中心均可使用。
[0009]为达到上述目的,本专利技术提供如下技术方案:
[0010]基于LSF的单主机多GPU分布式pytorch并行计算方法,该方法包括两个部分:
[0011]第一部分:资源申请及调度;
[0012]第二部分:使用资源进行深度学习模型的训练。
[0013]所述第一部分在LSF集群下完成;
[0014]通过LSF的指令申请计算资源,包括:
[0015]要创建的作业总数,其值等于申请的GPU总数;
[0016]单台主机的GPU个数。
[0017]可选的,所述第二部分在程序内部实现;
[0018]首先每个LSF作业独占一个进程和GPU,深度学习模型基于pytorch框架;
[0019]第一步,每个作业从环境中读取'LSF_PM_TASKID'作为每个任务的rank;
[0020]第二步,使用torch.distributed库初始化分布式进程组,参数包括rank,world_size,init_method,backend;rank用来指代每一个进程,world_size是进程总数,init_method用于表明从何处及如何发现其他进程,backend用于指明使用的后端通信方法,该专利技术中使用nccl作为通信后端;NCCL是NVIDIA公司为GPU并行计算开发的通信后端;
[0021]第三步,读取训练用数据集;数据集采用pytorch中的torch.utils.data.distributed.Distributed Sampler方法进行切分,通过设置num_replicas为world_size及rank为当前进程的rank,使每个进程获取相应的数据切片;如果使用Distributed Sampler进行数据切片,那么每个进程上训练的批的尺寸需除以进程总数;使用torch.utils.data.Data Loader进一步读取每个数据切片上数据;其中num_workers设为大于1的数用于开启子进程加快数据读取速度,pin_memory设为True用于将数据直接读到进程所独占的GPU上,减少数据在传输时的耗时;
[0022]第四步,导入相关包,包括argparse、distributed、Distributed Data Parallel,导入成功后加一个参数,local_rank;告知当前的程序跑在那一块GPU上;最后是指定通信方式,选nccl;
[0023]第五步,包装Dataloader;这里需要的是将sampler改为Distributed Sampler,然后赋给Data Loader里面的sampler;每个GPU或者每个进程都会从DataLoader里面取数据,指定Distributed Sampler能够让每个GPU取到不重叠的数据;
[0024]第六步,使用Distributed Data Parallel包装模型;
[0025]第七步,将输入数据放到指定GPU。
[0026]本专利技术的有益效果在于:
[0027]DataParallel更易于使用(只需简单包装单GPU模型)因此成为主流的单节点多卡使用方式。model=nn.DataParallel(model)它使用一个进程来计算模型参数,然后在每个批处理期间将分发到每个GPU,每个GPU计算各自的梯度,之后汇总到GPU0中进行求平均,由GPU0进行反向传播更新参数,再把模型的参数由GPU0传播给其他的GPU。这种使用方式通信速度成为一个瓶颈,GPU利用率通常很低。nn.DataParallel要求所有的GPU都在同一个节点上(不支持分布式),而且不能使用Apex进行混合精度训练。相较于现有的dataparrell方式,速度更快,效率高,GPU占用更高。
[0028]本专利技术的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本专利技术的实践中得到教导。本专利技术的目标和其他优点可以通过下面的说明书来实现和获得。
附图说明
[0029]为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术作优选的详细描述,其中:
[0030]图1为本专利技术原理图。
具体实施方式
[0031]以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.基于LSF的单主机多GPU分布式pytorch并行计算方法,其特征在于:该方法包括两个部分:第一部分:资源申请及调度;第二部分:使用资源进行深度学习模型的训练。2.根据权利要求1所述的基于LSF的单主机多GPU分布式pytorch并行计算方法,其特征在于:所述第一部分在LSF集群下完成;通过LSF的指令申请计算资源,包括:要创建的作业总数,其值等于申请的GPU总数;单台主机的GPU个数。3.根据权利要求2所述的基于LSF的单主机多GPU分布式pytorch并行计算方法,其特征在于:所述第二部分在程序内部实现;首先每个LSF作业独占一个进程和GPU,深度学习模型基于pytorch框架;第一步,每个作业从环境中读取'LSF_PM_TASKID'作为每个任务的rank;第二步,使用torch.distributed库初始化分布式进程组,参数包括rank,world_size,init_method,backend;rank用来指代每一个进程,world_size是进程总数,init_method用于表明从何处及如何发现其他进程,backend用于指明使用的后端通信方法,该发明中使用nccl作为通信后端;NCCL是NVIDIA公司为GPU并行计算开发的通信后端;第三步,读取训练用数据集;数据集采用pytorch中的torch.utils.data.distribu...
【专利技术属性】
技术研发人员:蒋鹏飞,单晓冬,徐恩格,王小龙,鲍复劼,
申请(专利权)人:苏州国科综合数据中心有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。