问题标签 [horovod]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 GPU 服务器上安装 horovod setpy.py 时显示错误:-无法加载本机 TensorFlow 运行时
在 GPU 服务器上运行以下命令时:
它显示以下错误:
在处理上述异常的过程中,又出现了一个异常:
我尝试使用以下命令安装tensorflow pip install --user tensorflow==1.14.0
:pip install --user tensorflow
pip install --user tensorflow-gpu
我遵循本教程:https ://github.com/horovod/horovod
我已经尝试了下面的命令并且它正在运行但是在运行时
但是如果我运行以下程序
正如在https://github.com/horovod/horovod/tree/master/examples上所说,它显示为类似的错误:
docker - 是否可以在 Docker 中使用具有默认桥接网络和主机端口转发的 Open MPI?
我正在尝试在 Docker 中将 Open MPI 与不同主机上的容器一起使用,但连接到它们各自的默认 Docker 桥接网络。有一系列 TCP 端口从 Docker 主机映射到容器。
mpirun
允许您指定它应该使用的端口范围;但是,似乎没有一个选项可以让您指定通信是否应该严格通过端口转发到 MPI 进程实际运行的地址来完成。
这是否可以通过将参数传递给来实现,mpirun
或者是否有一个通用的可路由网络接口可用的硬性要求?
tensorflow - horovod do summary_op 发生“一个或多个张量被提交以减少”
我尝试对张量板的 summay_op 执行 hvd.allreduce(loss)。
但是一直遇到这个错误。
一个或多个张量已提交以按等级子集减少、收集或广播,并且正在等待剩余等级超过 60 秒。这可能表明不同的 rank 试图提交不同的张量,或者只有 rank 的子集在提交张量,这将导致死锁。
tensorflow - 在 Sagemaker 上使用 horovod 分发 DCGAN
我正在尝试使用 AWS Sagemaker 将我的工作负载分配到多个 GPU。我正在使用带有 tensorflow 2.0 的 DCGAN 的自定义算法。到目前为止,代码在单个 GPU 上运行完美。我决定实现相同的代码,但使用跨多个 GPU 的 horovod 分布来减少运行时间。将代码从原始代码更改为 horovod 时,似乎工作方式相同,并且训练时间大致相同。但是,当我打印出 hvd.size() 时,我只得到 1 的大小,而不管是否存在多个 GPU。Tensorflow 可以识别所有当前的 GPU;霍罗沃德,没有。
我已经尝试在 Sagemaker 和 docker 容器中的 EC2 实例上运行我的代码,并且在这两种环境中,同样的问题仍然存在。
这是我的 github 存储库的链接:
我还尝试使用完全来自 horovod 存储库的不同神经网络,更新到 tf2.0:
在这一点上,我只是试图在一个实例中使用 GPU,而不是尝试使用多个实例。
我想我可能在 docker 映像中缺少某种依赖项,或者有某种先决条件命令供我运行。我真的不知道。
谢谢。
databricks - 如何在 Azure Databricks 群集上将驱动程序节点 GPU 与 Horovod 结合使用?
当我创建一个包含一个驱动程序 + 两个工作人员的集群时,每个人都有一个 GPU,并尝试在每个 GPU 上启动训练,我会写:
但收到以下错误消息:
显然 HorovodRunner 没有考虑驱动节点上的 GPU(对吗?)。当我使用选项 np=-1(仅驱动 GPU)、np=2(某处 2 个 GPU)或 np=-2(仅驱动但有 2 个 GPU)时,一切正常,即我的功能没有任何问题代码,除此之外我无法让它利用所有 3 个可用的 GPU。
(a) 有没有办法让 Horovod 在分布式学习中包含驱动节点上的 GPU?
(b) 或者:有没有办法在 Databricks 中创建一个包含 GPU 工作人员但非 GPU 驱动程序的集群?
apache-spark - 通过 udf 或不收集到驱动程序的 Spark 数据帧到 numpy 数组
现实生活中的 df 是一个无法加载到驱动程序内存中的海量数据帧。这可以使用常规或 pandas udf 来完成吗?
这是需要在不依赖驱动程序内存的情况下并行化的逻辑。
输入:Spark 数据帧输出:要输入 horovod 的 numpy 数组(类似这样的:https ://docs.databricks.com/applications/deep-learning/distributed-training/mnist-tensorflow-keras.html )
这是一种不起作用的方法:
distributed-computing - Azure 机器学习工作区中的 Horovod 时间线和 MPI 跟踪(MPI 配置)
全部,
我正在尝试在 Azure 机器学习服务上使用 Horovod 训练分布式模型,如下所示。
- 如何启用 Horovod 时间线?
- 如何启用更详细的 MPI 跟踪以查看节点之间的通信?
谢谢。
python - 将 Horovod 与 tf.keras 一起使用时如何从检查点恢复?
注意:我使用的是 TF 2.1.0 和 tf.keras API。我在 0.18 和 0.19.2 之间的所有 Horovod 版本中都遇到了以下问题。
我们应该hvd.load_model()
在从 tf.keras h5 检查点恢复时调用所有等级,还是只应该在等级 0 上调用它并让BroadcastGlobalVariablesCallback
回调与其他工作人员共享这些权重?方法 1 是否不正确/无效,因为它会扰乱训练或产生与方法 2 不同的结果?
我目前正在训练一个带有一些 BatchNorm 层的基于 ResNet 的模型,如果我们只尝试在第一层加载模型(并在其他层上构建/编译模型),我们会遇到一个停滞的张量问题(https: //github.com/horovod/horovod/issues/1271)。但是,如果我们hvd.load_model
在恢复时调用所有等级,训练开始正常恢复但它似乎立即发散,所以我很困惑是否在所有等级上加载检查点模型(带有hvd.load_model
)会以某种方式导致训练发散?但同时,由于https://github.com/horovod/horovod/issues/1271,我们无法仅将其加载到 rank 0,导致 Batch Norm 在 horovod 中挂起。有没有人能够成功调用hvd.load_model
仅在使用 BatchNorm tf.keras 层时排名为 0?有人可以在这里提供一些提示吗?
谢谢!
python - 将数据从 `tf.data.Dataset` 分发给多个工作人员(例如,对于 Horovod)
使用 Horovod,您基本上运行 N 个独立实例(因此它是图间复制的一种形式),并且它们通过特殊的 Horovod 操作(基本上是广播 + 减少)进行通信。
现在假设实例 0 或其他一些外部实例加载您的数据(通过tf.data.Dataset
)。您将如何将其分配iterator.get_next()
给每个实例?使用 Horovod 广播效率低下,因为您会将所有数据复制到所有实例。
在每个实例中都有数据集,并在那里进行所有加载,然后shard
在数据集上使用也会效率低下,因为您将在任何地方加载数据,然后丢弃 (N-1)/N 个数据。所以这就是为什么也不想要分片,而是只将数据集加载到单个(生产者/数据集工作人员)实例中,然后将批次分配给所有火车工作人员。
我猜 TFMultiDeviceIterator
提供了一些类似的功能(或者基本上完全一样),但我不确定它是否与 Horovod 一起工作,以及你将如何设置它?
或者,也许您可以通过 TF 工作人员以某种方式进行分发(指南?(也许这也是您的配置MultiDeviceIterator
方式?)
如果可能的话,这应该是通过 TensorFlow 操作/函数(有许多相关函数可能已经给了我这个,但我可能不知道它们,或者误解了它是如何工作的)。或者答案可能是 TensorFlow 还没有提供任何此类功能?(知道这仍然很有用。然后我会用 C++ 实现我自己的解决方案,包装为 TensorFlow。但在这样做之前,最好知道这是否真的有必要。)
(相关也是这个Horovod问题。)
(这个问题实际上比 Horovod 更通用,虽然 Horovod 可能是一个很好的例子。对于分布式 TensorFlow,你可能总是遇到这个问题?)
(我在这里收集了所有分布式 TensorFlow 术语和方面的概述,主要是为了澄清。)
docker - Horovod 弹性调整运行时的工人数量
我一直在 docker 中同时使用 TensorFlow 和 PyTorch 来使用 Horovod,正如 Horovod docker 中所解释的,在固定数量的容器下,每件事都可以正常工作
我已经检查了 Horovod Elastic Demos Horovod 示例,但它们没有显示如何在运行时更改工作人员的数量。
我需要知道如何在运行时增加或减少工作人员的数量?