代码之家  ›  专栏  ›  技术社区  ›  Vikk

MXNet分布式训练精度

  •  0
  • Vikk  · 技术社区  · 7 年前

    我正在使用MXNet对加州理工学院256数据集上的Resnet模型进行微调,示例如下:

    https://mxnet.incubator.apache.org/how_to/finetune.html

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

    首先,我在一台带有2个GPU的机器上运行了8个时代的这个示例。我花了大约20分钟,最终验证精度为0.809072。

    num_parts part_index ).

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

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

    更多有助于回答的信息:

    MXNet版本: 0.11.0

    代码: 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

    我使用了一种黑客方法来进行分区(使用IP地址),因为我无法获得 kv.num_workers kv.rank 工作。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Viacheslav V Kovalevskyi    7 年前

    不,这不是正常的,分布式训练确实应该用来加速训练过程,而不是减缓训练过程。然而,有很多错误的方法。

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

    如果您需要深入了解如何创建kv_存储(或这是什么)并将其用于分布式培训,请参阅 this article

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

    • MXNet的版本是什么?
      • 使用了多少逻辑工作者;
      • 使用了多少台服务器(与工人在同一台机器上)?
    • 如何开始培训(最好是通过代码)
    • 如果无法提供代码,则至少指定kv_存储的类型
    • 如何在工作线程之间划分数据

    编辑

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

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

    here

    我再次建议大家阅读 the article