H2O应该这么慢吗?
Is H2O supposed to be so slow?
我正在 运行 交叉验证深度学习训练 (nfolds=4) 迭代地通过 R 在 H2O 上进行特征选择。目前,我只有 2 层(即不深)并且在 8 到 50 之间每层神经元。只有323个输入,12个输出类.
在我的 Intel 4770K(32 GB 内存)上训练一个模型平均需要大约 40 秒。在训练期间,H2o 能够最大化所有 cpu 个核心。
现在,为了尝试加快训练速度,我在亚马逊云中设置了一个 EC2 实例。我尝试了最大的计算单元 (c4.8xlarge),但速度提升很小。使用相同设置训练一个模型大约需要 24 秒。因此,我怀疑我忽略了一些东西。
我是这样开始训练的:
localH2O <- h2o.init(ip = 'localhost', port = 54321, max_mem_size = '24G', nthreads=-1)
只是为了比较处理器,4770K 在 cpu 基准测试中获得 10163,而英特尔至强 E5-2666 v3 获得 24804(vCPU 为 36)。
这种加速至少可以说是相当令人失望的,并且不值得在亚马逊云中安装和设置一切的额外工作,同时支付超过 2 美元/小时。
除了设置 nthreads=-1 之外,是否还需要做其他事情才能使所有内核正常工作?
我是否需要开始制作多个集群以缩短训练时间,还是我应该开始使用支持 GPU 的新深度学习库?
直接回答你的问题,不,H2O不应该慢。 :-) 看起来你有一台像样的 PC 而亚马逊实例(即使有更多的 vCPU)没有使用最好的处理器(就像你在游戏 PC 中找到的那样)。您 PC 处理器的基本/最大涡轮频率为 3.5GHz / 3.9GHz and the c4.8xlarge is only 2.9GHz / 3.5GHz。
我不确定这是否必要,但由于 c4.8xlarge 实例有 60GB RAM,您可以将 max_mem_size
从 '24G'
增加到至少 '32G'
,因为这就是您的 PC 所拥有的,甚至更大的东西。 (虽然不确定这会做什么,因为内存通常不是限制因素,但可能值得一试)。
此外,如果您担心 EC2 价格,不妨考虑一下 spot 实例。如果您需要额外的实际加速,您应该考虑使用 multiple nodes in your EC2 H2O cluster,而不是单个节点。
我正在 运行 交叉验证深度学习训练 (nfolds=4) 迭代地通过 R 在 H2O 上进行特征选择。目前,我只有 2 层(即不深)并且在 8 到 50 之间每层神经元。只有323个输入,12个输出类.
在我的 Intel 4770K(32 GB 内存)上训练一个模型平均需要大约 40 秒。在训练期间,H2o 能够最大化所有 cpu 个核心。
现在,为了尝试加快训练速度,我在亚马逊云中设置了一个 EC2 实例。我尝试了最大的计算单元 (c4.8xlarge),但速度提升很小。使用相同设置训练一个模型大约需要 24 秒。因此,我怀疑我忽略了一些东西。 我是这样开始训练的:
localH2O <- h2o.init(ip = 'localhost', port = 54321, max_mem_size = '24G', nthreads=-1)
只是为了比较处理器,4770K 在 cpu 基准测试中获得 10163,而英特尔至强 E5-2666 v3 获得 24804(vCPU 为 36)。
这种加速至少可以说是相当令人失望的,并且不值得在亚马逊云中安装和设置一切的额外工作,同时支付超过 2 美元/小时。
除了设置 nthreads=-1 之外,是否还需要做其他事情才能使所有内核正常工作?
我是否需要开始制作多个集群以缩短训练时间,还是我应该开始使用支持 GPU 的新深度学习库?
直接回答你的问题,不,H2O不应该慢。 :-) 看起来你有一台像样的 PC 而亚马逊实例(即使有更多的 vCPU)没有使用最好的处理器(就像你在游戏 PC 中找到的那样)。您 PC 处理器的基本/最大涡轮频率为 3.5GHz / 3.9GHz and the c4.8xlarge is only 2.9GHz / 3.5GHz。
我不确定这是否必要,但由于 c4.8xlarge 实例有 60GB RAM,您可以将 max_mem_size
从 '24G'
增加到至少 '32G'
,因为这就是您的 PC 所拥有的,甚至更大的东西。 (虽然不确定这会做什么,因为内存通常不是限制因素,但可能值得一试)。
此外,如果您担心 EC2 价格,不妨考虑一下 spot 实例。如果您需要额外的实际加速,您应该考虑使用 multiple nodes in your EC2 H2O cluster,而不是单个节点。