我正在迭代地运行交叉验证深度学习训练(nfolds = 4),用于在H2O到R上进行特征选择。目前,我每层只有2层(即不深)和8到50个神经元。只有323个输入和12个输出类。
在我的英特尔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,而Intel Xeon E5-2666 v3得到24804(vCPU为36)。
至少可以说这种加速是非常令人失望的,并且不值得在亚马逊云中安装和设置所有内容的所有额外工作,同时支付超过2美元/小时。
除了设置nthreads = -1之外,是否还需要做其他事情以使所有内核工作?
我是否需要开始制作多个群集以缩短培训时间,或者我是否应该开始使用支持GPU的新深度学习库?
答案 0 :(得分:1)
要直接回答你的问题,不,H2O不应该慢。 :-)看起来你有一个不错的PC和亚马逊实例(即使有更多的vCPU)没有使用最好的处理器(就像你在游戏PC中找到的那样)。 PC处理器的基本/最大turbo频率为3.5GHz / 3.9GHz,c4.8xlarge仅为2.9GHz / 3.5GHz。
我不确定这是否有必要,但由于c4.8xlarge实例有60GB的RAM,你可以将max_mem_size
从'24G'
增加到至少'32G'
,因为那是你的电脑有什么,甚至更大的东西。 (虽然不确定会做什么,因为记忆通常不是限制因素,但可能值得一试)。
另外,如果您担心EC2价格,可能会查看现货实例。如果您需要额外的实际加速,则应考虑使用multiple nodes in your EC2 H2O cluster,而不是单个节点。