赞
踩
Caffe2 最重要的一个特点是,便于分布式训练,无须重构设计即可快速实现网络的伸缩.
进一步学习Caffe2分布式训练的例子,可参考SynchronousSGD, 该材料阐述了Caffe2的data_parallel_model设计规则.
Caffe2 提供的一个分布式训练实例resnet50_trainer中,可以在单个GPU上运行 resnet50_trainer脚本. 其中,训练数据需要先加载到 lmdb database, 或者LevelDB.
安装成功Caffe2后,分布式训练至少有一个GPU,多个GPU更适合体现其分布式特点.
首先,训练数据库转换成lmdb database, 或LevelDB格式;
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]
testing用到的参数:
- 1. –train_data[必需]
- 2. –db_type[默认lmdb]
- 3. –num_gpus<#> [使用该方式,替代利用 –gpus列出各gpu的方式]
- 4. –batch_size[默认为32]
- 5. –test_data [可选]
唯一一个必须要提供的参数是训练数据库. 其调用方式为,其它参数默认:
python resnet50_trainer.py --train_data <location of lmdb training database>
使用LevelDB:
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:
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,便于分析收敛情况.
运行训练程序时,在同文件夹内会生成log文件,该文件记录了在不同参数时的状态. 比如,
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值]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。