首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MXNet分布式训练精度

MXNet分布式训练精度
EN

Stack Overflow用户
提问于 2017-09-28 03:26:55
回答 1查看 255关注 0票数 0

我正在使用MXNet对Caltech 256数据集上的Resnet模型进行细化,如下示例所示:

至/finetune.html

我主要是为了POC来测试分布式培训(稍后我将在我的实际项目中使用)。

首先,我在一台带有2个GPU的单机上运行了这个示例,运行时间为8个周期。我花了大约20分钟,最终验证的准确性是0.809072。

然后,我使用分布式设置在2台机器上运行它(相同,每个机器都有2个GPU),并将这两台机器的训练数据分成两部分(使用num_partspart_index)。

8个历元仅需10分钟,但最终验证精度仅为0.772847 (两者中最高)。即使我用了16个年代,我也只能达到0.797006。

所以我的问题是这很正常吗?我主要想使用分布式培训来减少培训时间。但是,如果需要两次或更多的时间才能达到同样的精度,那么有什么好处呢?也许我遗漏了什么。

如果需要,我可以发布我的代码并运行命令。

谢谢

编辑

一些更多的信息可以帮助我们找到答案:

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地址)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 23:07:34

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

不,这不是正常情况,分散的训练确实应该用来加速训练的过程,而不是减缓它的速度。然而,有很多方法可以用错误的方式来做。

根据所提供的数据,感觉员工仍在以单一培训(“device”)模式运行,或者kv_store的创建可能不正确。因此,每个工人都只是训练自己的榜样。在这种情况下,您应该会看到验证结果,在16个历元之后,它已经接近于单机的8个历元(仅仅是因为在集群中,您正在分割数据)。在你的例子中,是0.797006比0.809072。取决于您执行了多少次实验,这个数字可能被视为相等。我将重点研究集群是如何引导的。

如果您需要深入探讨如何创建kv_store(或者这是什么),并将其与分布式培训一起使用,请参阅这篇文章

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

  • MXNet的版本是什么?
  • 具有以下信息的集群的拓扑是什么:
    • 使用了多少逻辑工作人员;
    • 使用了多少台服务器(它们与工人在同一台机器上)?

  • 如何开始培训(最好是使用代码)
  • 如果无法提供代码,请至少指定kv_store的类型。
  • 如何在工作人员之间划分数据

编辑

尽管开始训练的呼叫看起来是正确的:

代码语言:javascript
复制
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本身至少有一个问题。如果您查看这里,实际上它不尊重输入参数中的kv存储类型,而只使用“设备”。因此,所有员工都在单独培训该模型(而不是在集群中)。我认为修这条线会有帮助。

我再次建议您阅读文章,以便熟悉MXNet集群是如何工作的。这样的问题可以很容易地通过分析调试日志和观察没有创建kv存储来发现,因此集群没有训练任何东西(只有独立的机器正在做一些事情)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46460492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档