当我创建一个带有一个驱动程序+两个工作进程的集群,每个进程都有一个GPU,并尝试在每个GPU上启动训练时,我会写道:
from sparkdl import HorovodRunner
hr = HorovodRunner(np=3)
hr.run(train_hvd)但收到以下错误消息:
HorovodRunner was called with np=3, which is greater than the maximum processes that can be placed
on this cluster. This cluster can place at most 2 processes on 2 executors. Training won't start
until there are enough workers on this cluster. You can increase the cluster size or cancel the
current run and retry with a smaller np.显然,HorovodRunner没有考虑驱动节点上的图形处理器(对吗?)。当我使用选项np=-1 (仅限驱动程序GPU )、np=2 (某处2个GPU)或np=-2 (仅限驱动程序,但具有2个GPU)时,一切工作正常,即我的代码没有任何功能错误,除此之外,我无法让它利用所有3个可用的GPU。
(a)有没有办法让Horovod在分布式学习中包含驱动节点上的GPU?
(b)或者:是否有一种方法可以在Databricks中使用GPU工作者但非GPU驱动程序创建集群?
发布于 2020-01-30 15:03:56
参数: np -用于Horovod作业的并行进程数。此参数仅在Databricks Runtime 5.0 ML及更高版本上有效。在开源版本中它被忽略了。在Databricks上,每个进程都将占用一个可用的任务槽,该任务槽映射到GPU集群上的GPU或CPU集群上的CPU核心。可接受的值包括:
Training stdout和stderr消息转到notebook单元输出,并且在单元输出被截断的情况下也可以在驱动程序日志中使用。这对于调试很有用,我们建议您首先在此模式下测试代码。
如果>0,这将启动一个同时启动np任务的Spark作业,并在任务节点上运行Horovod作业。它将等待np个任务槽可用来启动作业。在单元格输出被截断的情况下,在HorovodRunner启动的第二个spark作业下的任务0的stderr流中可以找到完整的日志,您可以在Spark UI中找到。
如果为0,则将使用群集上的所有任务槽来启动作业。
您可以在HorovodRunner API documentation和"HorovodRunner: Distributed Deep Learning with Horovod“中找到有关np参数的详细信息。
希望这能有所帮助。
https://stackoverflow.com/questions/59668233
复制相似问题