我使用MXNet从以下示例中对Caltech 256数据集上的Resnet模型进行微调:
https://mxnet.incubator.apache.org/how_to/finetune.html
我主要是为POC进行测试……
所以我的问题是这是正常的吗?我主要想使用分布式培训来减少培训时间。但如果需要两倍或更多的时代来达到相同的准确度,那么有什么优势呢?
不,通常情况下,分布式培训确实应该用于加速培训过程,而不是减慢培训过程。然而,有很多方法以错误的方式做到这一点。
根据提供的数据,工作人员仍然在单一培训(“设备”)模式下运行,或者可能错误地创建了kv_store。因此,每个工人只是自己训练模型。在这种情况下,您应该看到16个纪元后的验证结果接近具有8个纪元的单个机器(仅仅因为在群集中您正在分割数据)。在您的情况下,它是0.797006对比0.809072。取决于您执行了多少次实验,这些数字可能会被视为相等。我会集中研究集群引导的方式。
如果您需要深入了解如何创建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本身。如果你看 这里 ,它实际上不考虑输入参数的kv-store类型,只使用'device'。因此,所有工人都在分开训练模型(而不是在集群中)。我相信修复这一行应该会有所帮助。
我会再次建议阅读 这篇文章 为了熟悉MXNet群集的工作原理。通过分析调试日志并观察到没有创建kv-store可以很容易地发现这些问题,因此集群没有进行任何培训(只有独立的机器正在做某事)。