https://github.com/wudikua/ps

本项目是我自己动手实现的机器学习训练框架,代码简单,有很多不完善,但是也保留了最小可用功能

通过自己编写这个项目,可以帮助自己入门机器学习

准备

1. 学习梯度下降法训练LR模型原理,了解机器学习一般的套路

2. 学习神经网络的模型结构,正向传导和反向传导

3. 学习一些python写的神经网络,训练代码

4. 参考tiny dnn这种小型机器学习训练框架,学习如何封装组件

5. 学习computional graph,自动求导

6. 学习除了fully connected layer以外的其他一些layer算法

7. 学习一些更新算法,激活算法,Loss计算方法等

8. 学习机器学习的分布式训练,主要是参数服务器,设计网络通信,分布式存储等

以上部分的学习过程是比较曲折的,主要参考一些博客,文章,视频,论文等

代码实现

具体的代码可以参考git项目

机器学习训练框架需要考虑很多东西,除了最核心的算法外,还需要考虑扩展性,内存,网络,CPU,GPU等计算资源,以及分布式存储的相关知识

我认为分布式机器学习框架需要解决好如下几个大问题

1. 算法实现

各种算法的实现,这部分需要一些纯粹的机器学习知识,通过参考别人代码和一些资料可以实现

2. 矩阵库

因为机器学习的算法最后都会转为对矩阵操作,所以这一层最好是使用别人写好的一些库

这种数学运算,又涉及到CPU和GPU作为最后的计算设备,GPU计算的并行度远高于CPU,但是GPU显存有限,对GPU做调用也有一定开销

3. 参数服务器分布式

参数服务器这块属于工程方面,涉及到网络通信,序列化反序列化,传输中的压缩,以及合理利用网络带宽都是需要考虑的

还有一些优化是结合算法,在分布式环境下做出让步,取舍。比如一些异步更新机制。

4. 充分利用机器资源

机器学习是CPU密集型也是IO密集型,又非常吃内存,好的机器学习框架应该最大限度利用机器的计算资源和IO资源

还有一些其他能力比如说是否有一些可视化的图表帮助调试,是否有一些集群容灾功能,不过这些我觉得都是锦上添花

最重要的问题还是收敛速度

Java与机器学习

Java中有腾讯的angel和dl4j这两个项目,不过目前来看机器学习的训练框架主要还是c++,api是python

Java性能不如c++?

  Java因为有JIT技术,所以跑一些基准测试并不比c++逊色,反而因为JIT的优化,可能还会比c++要好

Java写机器学习训练库有两个重要短板:

  a. 对于底层设备的支持不行

  但是目前加速机器学习训练速度的什么cuda,nccl,blas相关各种库都是c++接口,java想用的话只能jni或javacpp跨平台调用

  再比如说CPU的SSE4指令集可以对浮点数乘法有优化,而Java只能在限制条件靠JIT自动做这种优化

  

  b. 还有一个问题就是GC会影响机器学习的吞吐量

是不是有短板就不行?

  跨平台调用虽然慢,但是如果一次训练很多数据,只做很少的跨平台调用,这样训练时间远大于调用的损失就无所谓

  而且机器学习是个系统工程,更重要的是各子模块的配合,网络,内存,线程同步等等问题都会影响性能

机器学习框架展望

如何描述模型

第一代 sequence of layer

第二代 op graph,以tensorflow为代表

第三代 机器学习编译器,paddlepaddle中提出

paddlepaddle应该是最先进的,tensorflow还需要python调用c++,paddlepaddle相当于发明了一种机器学习语言,由编译器自动优化,让他跑在不同的设备上

可视化,可调式,易用性

调试和可视化这两点个人认为非常有意义的,类似tensorboard这种东西

使用Java语言开发机器学习框架和参数服务器的更多相关文章

  1. 用Hyperledger Fabric(超级账本)来构建Java语言开发区块链的环境

    面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger Fabric v0.6 来构 ...

  2. 基于Java语言开发jt808、jt809技术文章精华索引

    很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...

  3. 软件-集成开发环境:IDEA(Java 语言开发的集成环境)

    ylbtech-软件-集成开发环境:IDEA(Java 语言开发的集成环境) IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他开发语言),IntelliJ在业界 ...

  4. IntelliJ IDEA for Mac(Java 语言开发的集成环境)破解版安装

    1.软件简介    IntelliJ IDEA 是 macOS 系统上一款 java 语言开发的集成环境,IntelliJ 在业界被公认为最好的 java 开发工具之一,尤其在智能代码助手.代码自动提 ...

  5. Java 学习笔记 第一章:Java语言开发环境搭建

    第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...

  6. [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器

    [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 目录 [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 0x0 ...

  7. Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

    负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...

  8. LeapMotion控制器 java语言开发笔记--(Java开发环境的准备)

    (1)官方文档说的是必须是JDK6,JDK7,我试了一下JDK8也是可以的 (2)我是在Windows系统下用的是Eclipse Java的开发环境这里不再多说.将下载的JDK里面的java.dll和 ...

  9. 简单介绍几种Java后台开发常用框架组合

    01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...

随机推荐

  1. JVM垃圾回收机制总结

    对于垃圾回收机制我先抛出三个问题: ①哪些内存需要回收? ②什么时候回收? ③如何回收? 下面我们主要针对这三个问题来研究JVM GC 一.哪些内存需要回收? 1.JAVA使用可达性分析法来判断对象是 ...

  2. 使用 Redis 实现分布式锁(转载)

    背景 在一般的分布式应用中,要安全有效地同步多服务器多进程之间的共享资源访问,就要涉及到分布式锁.目前项目是基于 Tornado 实现的分布式部署,同时也使用了 Redis 作为缓存.参考了一些资料并 ...

  3. easyform表单校验插件改版源码

    改动特性: 1.支持回调,可用于ajax提交 2.提示框样式修改,原版太丑,修改成bootstrap的popover  样式 原版还存在缺陷:被校验的表单元素设置不灵活,还得加上id.name 什么的 ...

  4. [译]用R语言做挖掘数据《七》

    时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用 ...

  5. wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶

    //如果窗口最小化了弹出并置顶----事件触发调用 ShowWindowAsync(new System.Windows.Interop.WindowInteropHelper(CommonHelpe ...

  6. javaweb项目中绝对路径的写法理解

    Tomcat的默认访问路径为http://localhost:8080,后需添加项目路径. 请求转发,是转发到本项目中的其他文件,所以在默认访问路径中添加了本项目的项目路径,故可以省略项目名称: re ...

  7. HDU3629:Convex

    传送门 求凸四边形的个数 转化成总数减去凹四边形的个数 凹四边形一定是一个三角形中间包含的另外一个点 那么枚举被包含的点,其它的对于这个点极角排序 被包含不好算,算总数减去不被包含的 枚举三角形的一个 ...

  8. webform 使用log4net配置

    效果: web.config配置 <configuration> <configSections> <!--log4net日志记录--> <section n ...

  9. VBScript开发Excel常见问题

    VBS基础 基本概念:VB & VBS & VBA VB.VBScript和VBA(Visual Basic For Application)这三种语言,既有联系又有区别.三种语言的语 ...

  10. Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)

    在Android中,View的结构是树状的,所以,当触发触摸事件的时候,其事件传递也是从上之下一层层的传递.下面我们结合例子来一点点进行分析. 首先,我们需要了解事件处理中的几个方法: 1.在View ...