【发布时间】:2017-10-04 01:08:47
【问题描述】:
我正在使用 MXNet 从以下示例中微调 Caltech 256 数据集上的 Resnet 模型:
https://mxnet.incubator.apache.org/how_to/finetune.html
我主要是为 POC 测试分布式训练(我稍后将在我的实际项目中使用)。
首先,我在具有 2 个 GPU 的单台机器上运行了 8 个 epoch。我花了大约 20 分钟,最终验证准确率为 0.809072。
然后我在 2 台机器上运行它(相同的,每台都有 2 个 GPU),设置为分布式设置,并将这两台机器的训练数据分成两半(使用 num_parts 和 part_index)。
8 个 epoch 只用了 10 分钟,但最终验证准确度仅为 0.772847(两者中的最高值)。即使我使用了 16 个 epoch,我也只能达到 0.797006。
所以我的问题是这正常吗?我主要想使用分布式训练来减少训练时间。但是如果需要两次或更多的 epoch 才能达到相同的精度,那有什么优势呢?也许我错过了什么。
如果需要,我可以发布我的代码并运行命令。
谢谢
编辑
更多信息可帮助解答:
MXNet 版本: 0.11.0
拓扑: 2 名工人(每人在单独的机器上)
代码: https://gist.github.com/reactivefuture/2a1f9dcd3b27c0fe8215b4e3d25056ce
启动命令:
python3 mxnet/tools/launch.py -n 2 -H hosts --sync-dst-dir /tmp/mxnet python3 training.py --kv-store dist_sync --gpus 0,1
由于我无法让kv.num_workers 和kv.rank 工作,因此我使用了一种很老套的方法进行分区(使用IP 地址)。
【问题讨论】:
-
你是如何进行分区的。你洗牌了吗?你能在这里发布代码、命令和设置细节吗?
标签: deep-learning mxnet