【发布时间】:2019-07-10 22:17:11
【问题描述】:
我正在尝试就在 GCP 上设置计算集群以进行 ML 训练的最佳方式获得一些建议。我目前正在进行的工作已经超出了我可以附加到 GCP 实例的最大 8 个 V100 GPU 的能力,所以我想运行两个实例并在所有 16 个 GPU 上运行分布式作业。我的代码库已经能够做到这一点,我只需要弄清楚正确配置 VPC 网络的细节。我做了很多搜索,但我似乎无法从谷歌找到任何与实例之间的高速通信相关的信息。为了让这个集群有效运行,我需要能够非常快速地在节点之间同步梯度。对于大多数本地 ML HPC 服务器,使用 100 Gb 以太网或 Infiniband。 GCP 是否提供任何可以在实例之间实现这种低延迟高吞吐量通信的东西?提前感谢您的帮助。
编辑:
为了澄清,在运行 iperf3 时,内部 IP 上的实例之间的速度约为 200~ MB/秒。这个速度将疯狂地成为瓶颈。使用现代 Infiniband 连接服务器(通常用于 HPC 和深度学习集群),您将看到超过 20GB/秒的速度。 200MB/sec 将导致性能在节点间负扩展(大量)。当前的瓶颈仅仅是同一台机器上 GPU 之间的 p2p 速度(在 V100 的情况下,它们使用的 NVSwitch 设置类似于带有 SXM2 的 dgx-2,因此速度非常快)。节点之间的任何网络都需要与这种速度竞争。我认为 GCP 没有为 HPC 类型的工作负载提供更快的网络连接?
【问题讨论】:
-
我的理解是,同一区域内的计算引擎已经针对使用其内部 (RFC 1918) IP 地址的通信进行了最大程度的优化。无需做任何进一步的工作来改善延迟或带宽。我建议启动两个计算实例并在它们之间运行一些网络测试......例如使用 iperf3。
-
您在做一些根本错误的事情,即当您说“我想运行两个实例并在所有 16 个 GPU 上运行分布式作业”时 --> 您应该将该作业作为不同的作业运行,即在Cloud ML 引擎cloud.google.com/ml-engine 或查看此链接以供参考medium.com/searce/…
-
我已经在单个实例上将培训作为分布式作业运行。即每个 GPU 都有自己专用的 Python 进程(每个 GPU 充当一个节点),反向通过网络充当节点之间的同步点。进程之间的通信通过 TCP 进行。这是并行化模型的最高效方式,在引用深度学习系统时,您会听到将其称为“分布式训练”。由于模型已经使用 localhost 在节点之间执行缩减,因此将其扩展到多台机器是微不足道的。
-
您是如何创建集群的?您自己或您使用标准的dataproc集群。请准确书写问题cloud.google.com/dataproc/docs/guides/create-cluster
-
我很抱歉。我无意发送垃圾邮件标签。我认为深度学习社区将是相关服务器架构的主要消费者,所以我认为它是相关的。
标签: google-cloud-platform distributed-computing hpc