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. 使用HTML+CSS实现鼠标划过的二级菜单栏

    先上效果图: 1.鼠标没在上面 2.鼠标放在一级菜单上,展开二级菜单 3.鼠标放在二级菜单上 代码: (点击此处预览代码效果) <html> <head> <title& ...

  2. [PY3]——内置数据结构(6)——集合及其常用操作

    集合及其常用操作Xmind图          集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...

  3. eclipse下JAVA的搭建

    练手JAVA用eclipse比android studio快很多,android studio啥都好,就是太慢 参考资料:http://blog.csdn.net/21aspnet/article/d ...

  4. 激活 IntelliJ IDEA

    1.点击下面的链接下载 JetbrainsIdesCrack-4.2-release.jar 链接:https://pan.baidu.com/s/1eNY_bwxF7Efl4QG0yh6l1A  提 ...

  5. JavaScript数组的三种定义方法

    数组的定义: <script type="text/javascript"> // <!--声明数组--> // 1.先声明数组长度,后进行赋值 var a ...

  6. 撩课-Java每天5道面试题第22天

    141.Spring AOP是什么? AOP:面向切面编程 AOP技术利用一种称为“横切”的技术, 解剖封装的对象内部, 并将那些影响了多个类的公共行为 封装到一个可重用模块, 这样就能减少系统的重复 ...

  7. docker 无法启动容器,run容器后状态为restarting

    问题:如题,无法进入容器,docker logs 容器id  发现 哦 ,原来缺少个文件,这些就容易了

  8. Java枚举、静态导入、自动拆装箱、增强for循环、可变参数

    一.枚举简介 1.什么是枚举? 需要在一定范围内取值,这个值只能是这个范围内中的任意一个 现实场景:交通信号灯,有三种颜色,但是每次只能亮三种颜色里面的任意一个 2.使用一个关键字 enum enum ...

  9. 自定义scoll样式

    使用伪类自定义scroll样式 效果: 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  10. JavaScript周报#184

    This week’s JavaScript news Read this issue on the Web | Issue Archive JavaScript Weekly Issue 184Ju ...