如何在Hadoop 2.0上实现深度学习? - 文章 - 伯乐在线 http://blog.jobbole.com/84619/
//
鉴于深度学习天生就继承了迭代性,MapReduce模式可能不太适合运行这些算法。然而Hadoop 2.0 和 基于Yarn的资源管理出现后,我们就可以写出迭代式应用,因为我们可以很好的控制应用占用的资源。我们使用了IterativeReduce, 它是一个在Hadoop YARN里写迭代式算法的一个简单抽象,然后我们就能把它部署到某个运行Hadoop 2.4.1的Paypal集群里。
//
特别要提到的是,客户端程序和ResourceManager之间通信采用了YarnClient API。还采用了AMRMClient和AMNMClient在ApplicationMaster和ResourceManager以及NodeManager之间通信。
首先我们使用YarnClient API将程序提交给YARN resource manager
提交之后,YARN resource manager 运行 application master,它将根据需要负责分配和释放工作节点容器。 application master采用AMRMClient与resource manager进行通信。
application master 采用 NMClient API在容器中运行来自application master的命令。
application master运行工作节点容器后,它会立即设置端口用来和工作节点通信。对于我们的深度学习来说,我们给原本的IterativeReduce接口添加了一些方法,用来实现参数初始化,逐层训练和微调信号。IterativeReduce采用Apache Avro IPC进行主节点-工作节点通信。
下面的代码段展示了主节点-工作节点在分布式训练中的一系列步骤。主节点把初始参数发送给工作节点,然后工作节点基于自己的数据对RBM进行训练。训练完成后,它将结果发送给主节点,主节点会将结果进行合并。整个迭代完成后,主节点开始back propagation(反向传播算法)微调阶段,标志着主节点流程结束。
//
Hadoop Yarn框架带有更精细的集群资源控制,它能为我们提供这种灵活性。