加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

调参侠看过来!两个提高深度学习训练效率的绝技

发布时间:2020-09-27 04:10:55 所属栏目:创业 来源:网络整理
导读:1. 训练的瓶颈在哪里 GPU利用率低:模型训练时GPU显存沾满了,但是GPU的利用率比较不稳定,有时候0%,有时候90%,忽高忽低。 训练的数据量大:训练数据大,在百万/千万的量级,训练一个Epoch需要很长时间,模型迭代周期过长。 2. 提高GPU利用率:CPU vs GP
副标题[/!--empirenews.page--]

1. 训练的瓶颈在哪里

 GPU利用率低:模型训练时GPU显存沾满了,但是GPU的利用率比较不稳定,有时候0%,有时候90%,忽高忽低。   

调参侠看过来!两个提高深度学习训练效率的绝技

 训练的数据量大:训练数据大,在百万/千万的量级,训练一个Epoch需要很长时间,模型迭代周期过长。

2. 提高GPU利用率:CPU vs GPU

GPU利用率低, 主要原因是CPU处理的效率跟不上GPU

2.1 CPU vs GPU的通信

 CPU负责加载数据+数据预处理,并不断的在内存和显存之间交互数据  GPU负责模型训练(图片来自网络)

调参侠看过来!两个提高深度学习训练效率的绝技

调参侠看过来!两个提高深度学习训练效率的绝技

2.2 解决方案

采用多进程并行处理,加快CPU加载数据的性能

 keras keras 中提供了workers use_multiprocessing来采用多进程方式,并行处理数据,并push到队列中,共GPU模型训练。因为进程之间可能相互影响资源,并不是越大越好,workers可以设置2,4,8。  run_model.fit_generator(                generator=training_generator,                class_weight={0: config.weights, 1: 1},                epochsepochs=epochs,                verbose=1,                steps_per_epochsteps_per_epoch=steps_per_epoch,                callbacks=callbacks_list,                validation_data=valid_generator,               validation_stepsvalidation_steps=validation_steps,                shuffle=True,                workers=8,                use_multiprocessing=True,                max_queue_size=20   pytorch torch在加载数据中提供类似参数num_workers。pin_memory=True可以直接加载到显存中,而不需要内存  torch.utils.data.DataLoader(image_datasets[x],                               batch_sizebatch_size=batch_size,                                shuffle=True,                               num_workers=8,                               pin_memory=True) 

3. 分布式并行训练

3.1 并行模式

当训练的数据量很大时,可以通过多个机器多个GPU来提高训练的效率。不同于hadoop和spark等分布式数据处理框架,深度学习训练因为要涉及参数的前项传播和反向传播,有两种并行方式:

 模型并行( model parallelism ):分布式系统中的不同机器(GPU/CPU等)负责网络模型的不同部分,通常是神经网络模型的不同网络层被分配到不同的机器,或者同一层内部的不同参数被分配到不同机器。一般是超大的模型,一张显卡放不下的情况,如NLP的模型。模型并行的缺点是层和层之间可能存在依赖关系,不能完全的并行。(图片来自网络)  

调参侠看过来!两个提高深度学习训练效率的绝技

 数据并行( data parallelism ):不同的机器有同一个模型的多个副本,每个机器分配到不同的数据,然后将所有机器的计算结果按照某种方式合并。这种就比较适合大数据的情况。数据并行要解决的问题是数据的分割和传输,以及参数的更新。

调参侠看过来!两个提高深度学习训练效率的绝技

3.2 数据并行

Facebook在《Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour》介绍了使用 256 块 GPU 进行 ResNet-50 网络「数据并行」训练的方法

 数据分割: 选用大的batch-size, 按照worker数量进行分割, 分发到不同worker执行  参数更新:参数的更新有两种模式(1)参数服务器 (2) ring环状更新(无服务器模式)

3.2.1 参数服务器模式

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读