前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Caffe2 - (二)Distributed Training分布式训练

Caffe2 - (二)Distributed Training分布式训练

作者头像
AIHGF
发布2019-02-18 10:50:02
1K0
发布2019-02-18 10:50:02
举报
文章被收录于专栏:AIUAIAIUAI

Caffe2 Distributed Training分布式训练

Caffe2 最重要的一个特点是,便于分布式训练,无须重构设计即可快速实现网络的伸缩.

进一步学习Caffe2分布式训练的例子,可参考SynchronousSGD, 该材料阐述了Caffe2的data_parallel_model设计规则.

  • Gloo - 用于多机训练的通信库
  • NCLL - NVIDIA推出的多GPU通信的NCCL库
  • Redis - 为了对分布式训练的节点进行有效管理, Caffe2采用NFS在节点间分享数据,或者采用Redis服务器来处理节点间的通信

Caffe2 提供的一个分布式训练实例resnet50_trainer中,可以在单个GPU上运行 resnet50_trainer脚本. 其中,训练数据需要先加载到 lmdb database, 或者LevelDB.

实例

安装成功Caffe2后,分布式训练至少有一个GPU,多个GPU更适合体现其分布式特点.

首先,训练数据库转换成lmdb database, 或LevelDB格式;

resnet50_trainer.py说明:

代码语言:javascript
复制
usage: resnet50_trainer.py [-h] --train_data TRAIN_DATA 
                           [--test_data TEST_DATA] [--db_type DB_TYPE]
                           [--gpus GPUS] [--num_gpus NUM_GPUS]
                           [--num_channels NUM_CHANNELS]
                           [--image_size IMAGE_SIZE] [--num_labels NUM_LABELS]
                           [--batch_size BATCH_SIZE] [--epoch_size EPOCH_SIZE]
                           [--num_epochs NUM_EPOCHS]
                           [--base_learning_rate BASE_LEARNING_RATE]
                           [--weight_decay WEIGHT_DECAY]
                           [--num_shards NUM_SHARDS] [--shard_id SHARD_ID]
                           [--run_id RUN_ID] [--redis_host REDIS_HOST]
                           [--redis_port REDIS_PORT]
                           [--file_store_path FILE_STORE_PATH]
  • –train_data - 训练数据库的路径
  • –test_data - 测试数据库的路径
  • –db_type - lmdb或leveldb, 默认lmdb
  • –gpus - GPU IDs列表,其中 0 为第一个GPU设备, 多个GPU用逗号’,’隔开
  • –num_gpus - GPUs总数,或者gpus列表
  • –num_channels - 颜色通道数,默认为3
  • –image_size - 输入图像的高和宽的像素值,假设宽和高一样,默认为227, 不能处理小尺寸的
  • –num_labels - labels数,默认1000
  • –batch_size - batch size,所有GPUs上的总和,默认32,增加GPUs可以增加其值
  • –epoch_size - 每个epoch中图像数,默认1.5MM(1500000),可以进行自定义
  • –num_epochs - epochs数
  • –base_learning_rate - 初始化学习率,默认0.1(基于256个batch size)
  • –weight_decay - weight decay(L2 regularization)
  • –num_shards - 分布式运行的机器数,默认1
  • –shard_id - shard/node id,默认为0,下一个node为1,以此
  • –run_id RUNID - 唯一运行码, e.g. uuid
  • –redis_host - Redis服务器的host(for rendezvous)
  • –redis_port - rendezvous的Redis端口
  • –file_store_path - alternative to Redis, (NFS) path to shared directory to use for rendezvous temp files to coordinate between each shard/node

testing用到的参数: - 1. –train_data[必需] - 2. –db_type[默认lmdb] - 3. –num_gpus<#> [使用该方式,替代利用 –gpus列出各gpu的方式] - 4. –batch_size[默认为32] - 5. –test_data [可选]

唯一一个必须要提供的参数是训练数据库. 其调用方式为,其它参数默认:

代码语言:javascript
复制
python resnet50_trainer.py --train_data <location of lmdb training database>

使用LevelDB:

代码语言:javascript
复制
python resnet50_trainer.py --train_data <location of leveldb training database> --db_type leveldb

默认batch_size均为32. 如果采用2个GPU,需要根据GPU数来增加batch_size,以更多的利用GPU显存,此时,batch_size=64:

代码语言:javascript
复制
python resnet50_trainer.py --train_data <location of lmdb training database> --num_gpus 2 --batch_size 64

增加一个GPU,可以加倍batch size,每各epoch的迭代数减半.

采用 nvidia-smi查看GPU状态,* watch -n1 nvidia-smi*可在多个experiments时连续记录GPU状态.

加入 –test_data 参数,可以监督网络训练的效果,给出accuracy,便于分析收敛情况.

日志 Logging

运行训练程序时,在同文件夹内会生成log文件,该文件记录了在不同参数时的状态. 比如,

代码语言:javascript
复制
resnet50_gpu2_b64_L1000_lr0.10_v2_20170411_141617.log

从该文件名可以得出: - –gpus 2 - –batch_size 64 - –num_labels 1000 - –base_learning_rate 0.10 以时间戳排列.

log文件中,记录的值有: - time_spent - cumulative_time_spent - input_count - cumulative_input_count - cumulative_batch_count - inputs_per_sec - accuracy - epoch - learning_rate - loss - test_accuracy[如果没有test data,该值默认为-1,反之,输出accuracy值]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年05月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Caffe2 Distributed Training分布式训练
    • 实例
      • 日志 Logging
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档