探秘高效分布式训练框架:Apache Horn

探秘高效分布式训练框架:Apache Horn

incubator-retired-hornMirror of Apache Horn (Incubating) ** This project has been retired **项目地址:https://gitcode.com/gh_mirrors/in/incubator-retired-horn

Apache Horn是一个在Apache孵化器中的项目,它是一个以神经元为中心的编程模型和同步/异步混合的分布式训练框架。Horn支持大规模数据上的大型模型训练,充分利用了Apache Hadoop和Hama的计算能力。

神经网络编程模型

Horn提供了一种直观的神经元编程模型,让用户能轻松实现基于神经网络的算法。在模型中,用户定义每个层上每个神经元的计算逻辑以及前向传播和反向传播过程中的消息传递。例如,以下代码展示了如何在forward()方法中应用权重到输入数据并计算输出:

@Override
public void forward(
    Iterable<Synapse<FloatWritable, FloatWritable>> messages)
        throws IOException {
  float sum = 0;
  for (Synapse<FloatWritable, FloatWritable> m : messages) {
    sum += m.getInput() * m.getWeight();
  }
  this.feedforward(this.squashingFunction.apply(sum));
}

而在backward()方法中,我们衡量输出误差,并据此调整权重以减小错误:

@Override
public void backward(
    Iterable<Synapse<FloatWritable, FloatWritable>> messages)
        throws IOException {
  float delta = 0;
  for (Synapse<FloatWritable, FloatWritable> m : messages) {
    // 计算每个神经元的误差梯度
    delta += (m.getDelta() * m.getWeight());
    
    // 权重修正
    float weight = -this.getLearningRate() * this.getOutput()
        * m.getDelta() + this.getMomentumWeight() * m.getPrevWeight();
    this.push(weight);
  }

  this.backpropagate(delta
      * this.squashingFunction.applyDerivative(this.getOutput()));
}

这种编程模型的优势在于简单易懂,让深度学习算法的实现变得更加直接。

快速启动与配置

Apache Horn还提供了简洁的配置接口,只需几步操作即可创建神经网络作业并将其提交给现有的Hadoop或Hama集群。下面的例子展示了如何配置一个两层神经网络来训练MNIST数据集:

HornJob job = new HornJob(conf, MultiLayerPerceptron.class);
job.setLearningRate(learningRate);
..

job.inputLayer(features, 0.8f); // droprate
job.addLayer(hu, ReLU.class, DropoutNeuron.class);
job.outputLayer(labels, SoftMax.class, StandardNeuron.class);
job.setCostFunction(CrossEntropy.class);

快速运行示例

下载MNIST的训练数据和标签数据,然后使用以下命令转换为HDFS序列文件:

% bin/horn jar horn-0.x.0.jar MNISTConverter \
  train-images.idx3-ubyte train-labels.idx1-ubyte /tmp/mnist.seq 

接着,使用以下命令进行训练(本例中,η=0.01,α=0.9,λ=0.0005,100个隐藏单元,mini-batch大小为10):

% bin/horn jar horn-0.x.0.jar MultiLayerPerceptron /tmp/model /tmp/mnist.seq \
  0.01 0.9 0.0005 784 100 10 10 12000

在默认设置下,模型的准确率可达到95%以上。在本地模式下,20个任务将以同步方式训练模型,并大约在10分钟内完成。

高扩展性

Apache Horn采用了同步/异步混合的分布式训练架构。在单个BSP作业中,每个任务组通过区域屏障同步而不是全局屏障同步工作,以同步的方式使用分配的数据集训练大规模的神经网络模型。

参与贡献

Apache Horn是一个由Apache软件基金会支持的开源志愿项目。我们欢迎你了解项目并贡献你的专业知识。

通过上述介绍,不难看出Apache Horn的强大之处。无论是其独特的编程模型,还是高效的分布式训练机制,都使得它成为深度学习领域的一个强大工具。如果你正在寻找一个灵活且易于使用的分布式深度学习框架,那么Apache Horn绝对值得尝试!

incubator-retired-hornMirror of Apache Horn (Incubating) ** This project has been retired **项目地址:https://gitcode.com/gh_mirrors/in/incubator-retired-horn

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纪亚钧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值