【问题标题】:MXNet distributed training accuracyMXNet 分布式训练精度
【发布时间】: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_partspart_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_workerskv.rank 工作,因此我使用了一种很老套的方法进行分区(使用IP 地址)。

【问题讨论】:

  • 你是如何进行分区的。你洗牌了吗?你能在这里发布代码、命令和设置细节吗?

标签: deep-learning mxnet


【解决方案1】:

所以我的问题是这正常吗?我主要想使用分布式训练来减少训练时间。但是如果需要两次或更多的 epoch 才能达到相同的精度,那有什么优势呢?

不,这不是正常的,分布式训练确实应该用来加快训练过程,而不是减慢它。然而,有很多方法会以错误的方式做到这一点。

根据提供的数据,感觉工人仍在单训练('设备')模式下运行,或者可能是 kv_store 的创建不正确。因此每个工人只是自己训练模型。在这种情况下,您应该会在 16 个 epoch 之后看到验证结果接近 8 个 epoch 的单台机器(仅仅是因为在集群中您正在拆分数据)。在您的情况下,它是 0.797006 对 0.809072。取决于您执行了多少次实验,此数字可能被视为相等。我将把研究重点放在集群引导的方式上。

如果您需要深入了解如何创建 kv_store(或这是什么)并将其与分布式训练一起使用的主题,请参阅this article

一般为了给出更好的答案,今后请至少提供以下信息:

  • MXNet 的版本是多少?
  • 集群的拓扑是什么,有以下信息:
    • 使用了多少逻辑工作者;
    • 使用了多少台服务器(它们与工人在同一台机器上)?
  • 如何开始训练(最好使用代码)
  • 如果无法提供代码,至少指定kv_store的类型
  • 如何在工作人员之间分区数据

编辑

即使开始训练的调用看起来是正确的:

python3 mxnet/tools/launch.py -n 2 -H hosts --sync-dst-dir /tmp/mxnet python3 training.py --kv-store dist_sync --gpus 0,1

training.py 本身至少存在一个问题。如果您查看here,它实际上不尊重输入参数中的 kv-store 类型,而只是使用“设备”。因此,所有工作人员都在单独训练模型(而不是在集群中)。我相信修复这一行应该会有所帮助。

我再次建议阅读 the article 以熟悉 MXNet 集群的工作原理。通过分析调试日志并观察没有创建 kv-store 并因此集群没有训练任何内容(只有独立机器在做某事),可以轻松发现此类问题。

【讨论】:

  • 感谢您的回答。我在我的问题中添加了所需的信息。如果您需要任何其他信息,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
相关资源
最近更新 更多