飞桨百度架构师手把手带你零基础实践深度学习——手写数字识别 资源配置
2020-08-15 16:51
861 查看
使用GPU训练
使用GPU进行训练
- CPU:fluid.CPUPlace()
- GPU: fluid.CUDAPlace(0),四个GPU卡的编号0,1,2,3
#仅前3行代码有所变化,在使用GPU时,可以将use_gpu变量设置成True use_gpu = False place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace() with fluid.dygraph.guard(place): #用place作为资源进行训练 model = MNIST() model.train() #调用加载数据的函数 train_loader = load_data('train')
分布式训练(多卡)
两种并行计算
- 模式并行:节省内存,应用较为受限(模型非常大,内存放不下)
- 数据并行:飞桨框架采用(训练节点上运行供养的程序,以不同的数据训练,不同节点得到的梯度要聚合。数据进行多机多卡拆分)
实现“多GPU卡”的分布式训练
程序修改
- 启动训练前
获取环境变量定义额GPU序列号,对原模型进行预处理,定义多GPU训练的reader,不同ID的GPU
加载不同的数据集
##修改1-从环境变量获取使用GPU的序号 place = fluid.CUDAPlace(fluid.dygraph.parallel.Env().dev_id) with fluid.dygraph.guard(place): ##修改2-对原模型做并行化预处理 strategy = fluid.dygraph.parallel.prepare_context() model = MNIST() model = fluid.dygraph.parallel.DataParallel(model, strategy) model.train() #调用加载数据的函数 train_loader = load_data('train') ##修改3-多GPU数据读取,必须确保每个进程读取的数据是不同的 train_loader = fluid.contrib.reader.distributed_batch_reader(train_loader)
- 训练过程中
对loss进行调整,收集参数梯度
# 修改4-多GPU训练需要对Loss做出调整,并聚合不同设备上的参数梯度 avg_loss = model.scale_loss(avg_loss) avg_loss.backward() model.apply_collective_grads()
命令行调用
具体在哪些GPU上调用
$ python -m paddle.distributed.launch --selected_gpus=0,1,2,3 --log_dir ./mylog train_multi_gpu.py
- paddle.distributed.launch:启动分布式运行。
- selected_gpus:设置使用的GPU的序号(需要是多GPU卡的机器,通过命令watch nvidia-smi查看GPU的序号)。
- log_dir:存放训练的log,若不设置,每个GPU上的训练信息都会打印到屏幕。
- train_multi_gpu.py:多GPU训练的程序,包含修改过的train_multi_gpu()函数。
训练完成后,在指定的./mylog文件夹下会产生四个日志文件。打在一起控制台会乱掉,就放在不同的日志文件。
相关文章推荐
- 飞桨百度架构师手把手带你零基础实践深度学习——手写数字识别训练调试与优化
- 飞桨PaddlePaddle百度架构师手把手带你零基础实践深度学习 第一周心得
- 1机器学习和深度学习综述(百度架构师手把手带你零基础实践深度学习原版笔记系列)
- PaddlePaddle-百度架构师手把手带你零基础实践深度学习-笔记02(代码详解)
- 2使用Python语言和Numpy库来构建神经网络模型-波士顿房价预测任务实战案例(百度架构师手把手带你零基础实践深度学习原版笔记系列)
- PaddlePaddle-百度架构师手把手带你零基础实践深度学习-笔记01(代码详解)
- 深度学习入门实践_十行搭建手写数字识别神经网络
- 机器学习深度学习基础笔记(2)——梯度下降之手写数字识别算法实现
- 深度学习与TensorFlow实战(六)全连接网络基础—MNIST数据集输出手写数字识别准确率
- 深度学习与TensorFlow实战(七)全连接网络基础—真实图片输出手写数字识别准确率
- 直播提醒 | 「百度架构师手把手带你实践深度学习」开课啦!
- 深度学习-实现提高版本的手写数字识别算法
- 深度学习引论(四):手写数字识别(Step by step)
- 深度学习之PyTorch实战(3)——实战手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 深度学习入门(八):完整地实现全连接层并进行手写数字识别
- “百度架构师手把手教深度学习”课程NLP部分结课心得
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- Keras_深度学习_MNIST数据集手写数字识别之各种调参
- 车牌识别 百度飞桨深度学习7日—Day03