Antkillerfarm Hacking V8.0

AI » Machine Learning之Java篇, 稀疏矩阵的存储, Optimizer软件, 运算加速库, 任务调度工具, TensorRT

2017-11-11 :: 6895 Words

Machine Learning之Java篇

http://machinelearningmastery.com/java-machine-learning/

这篇文章包含了很多Machine Learning方面的软件和库。

ND4J

numpy的等价物。

http://nd4j.org/

DL4J

TensorFlow的等价物。

https://deeplearning4j.org/

参考:

https://mp.weixin.qq.com/s?__biz=MzU2OTA0NzE2NA==&mid=2247484466&idx=1&sn=9dd7d305f37f6cad8d4ac37ad17f61f8

Deeplearning4j:使用CNN进行文本分类:图文+代码

https://mp.weixin.qq.com/s/geJDbL1eVcJXDtsO_mu4-w

Deeplearning4j手把手深度学习教程系列完整版

DJL

Deep Java Library是AWS开源的Java深度学习框架。和DL4J不同,DJL没有自己的运算层,而必须依靠TF或Pytorch进行计算。

https://github.com/awslabs/djl/

参考:

https://mp.weixin.qq.com/s/-GaxCVUOSe_2lFAeLRaIpQ

用Java训练深度学习模型,原来这么简单

Joinery

Pandas的等价物。

https://github.com/cardillo/joinery

Weka

Weka是一款开源的机器学习以及数据挖掘软件。主要开发者来自新西兰的the University of Waikato。

官网:

http://www.cs.waikato.ac.nz/ml/weka/

Weka不仅有GUI,而且也为开发提供了API,是单机Machine Learning的Java首选。国内的京东用的比较多。

GitHub:

https://github.com/bnjmn/weka

API Doc:

http://weka.sourceforge.net/doc.stable-3-8/

Weka除了基本库之外,还有许多扩展包:

http://weka.sourceforge.net/packageMetaData/

参考:

https://weka.wikispaces.com/Use+Weka+in+your+Java+code

如何在Java代码中使用Weka

ELKI

ELKI是另一个数据挖掘软件,也有GUI和API。ELKI主要专注于聚类和异常检测算法。

官网:

https://elki-project.github.io/algorithms/

GitHub:

https://github.com/elki-project/elki

smile

Statistical Machine Intelligence and Learning Engine虽然没有GUI,但却有一个类似Spark的命令行界面,以及类似Matplotlib的数据可视化接口。这是一个留美华人工程师写的统计和NLP方面的库。

官网:

https://haifengl.github.io/smile/

参考:

https://mp.weixin.qq.com/s/UZWSUUuPWcyv6yUx-woF4g

Smile实战(一)SVM

https://mp.weixin.qq.com/s/WE7afgw1VzvClKdbAaXVnA

Smile一下,轻松用Java玩转机器学习

java-string-similarity

这个库虽然功能有限,但却针对字符处理进行了优化。比如Jaccard距离,weka没有实现,ELKI提供的是通用的集合类实现,用起来没有java-string-similarity方便。

官网:

https://github.com/tdebatty/java-string-similarity

LDA4j

https://github.com/hankcs/LDA4j

YTK

猿题库开源了两个Java的库:

https://github.com/yuantiku/ytk-learn

https://github.com/yuantiku/ytk-mp4j

Apache Zeppelin

Zeppelin是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。

官网:

https://zeppelin.apache.org/

参考

https://mp.weixin.qq.com/s/WsjZERRkgnReWuDw_z5Hxw

LibRec:一个覆盖70多种算法的推荐系统开源库!

https://mp.weixin.qq.com/s/hn8Es-l1f6raJ_wj5HkqMA

LinkedIn开源Dagli,发布Java机器学习函数库

稀疏矩阵的存储

Dictionary of keys (DOK)

这种方法是最直观,也最容易想到的:将非零元素用{(row, column): value}的形式保存。

List of lists (LIL)

一行数据就是一个list,这样每个数据只需要保存column index和value即可。

Coordinate list (COO)

这个方法在DOK的基础上,给同一行的元素建立行索引,给同一列的元素建立列索引。显然DOK适用于硬盘存储,而LIL和COO更适合内存存储,因为后者更需要元素访问的便利性。

Compressed sparse row (CSR, CRS or Yale format)

[0 0 0 0
5 8 0 0
0 0 3 0
0 6 0 0]

A  = [ 5 8 3 6 ]
JA = [ 0 1 2 1 ]
IA = [ 0 0 2 3 4 ]

其中,A是非零元素的value,JA是非零元素的column index。

IA是每行的非零元素在A的offset(类似于文件操作中的游标)。比如第一行没有非零元素,因此第一行的offset为0,第二行也为0。但是第二行有两个非零元素,因此第三行的offset需要+2。依此类推。

按照这个规则,可以看出A和JA中的元素个数相等,而IA的元素个数=行数+1。由于IA的最后一个元素必然和A中的元素个数相等(矩阵都遍历完了,offset当然到末尾了),因此有时也会把它省略。

Optimizer软件

统计类

在前ML时代,工业界已经有不少Optimizer软件用于求解凸优化问题,这些软件从原理上基本都属于传统统计学的范畴。

比较知名的Optimizer软件有:CPlex, Gurobi, Mosek, cvx, LINGO。

GLPK(GNU Linear Programming Kit):

https://www.gnu.org/software/glpk/

Ipopt(Interior Point OPTimizer):

https://coin-or.github.io/Ipopt/

参考:

https://mp.weixin.qq.com/s/kdfGUzY6KnI3tpcDg0GX6w

运筹优化问题求解工具Lingo

https://mp.weixin.qq.com/s/ooYg7-pI9axo8Z_vUwMGzg

离散优化求解器大搜罗

https://mp.weixin.qq.com/s/_uGNwcvsIpzQyH6fI_HIPw

MOSEK,一个专注而卓越的优化求解器(一)

https://mp.weixin.qq.com/s/q0x9pXz7p7OciWqBOIV5JQ

XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言

https://mp.weixin.qq.com/s/wJAt-RqmsoyECLGgdlH6RA

基于数据的分布式鲁棒优化算法及其应用

https://zhuanlan.zhihu.com/p/480729614

优化模型建模语言Pyomo入门教程

运算加速库

Neon

Neon是个大路货的名字,在数值计算领域ARM和Intel都有叫Neon的硬件或技术。

ARM的Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD扩展结构。它主要聚焦于矩阵运算,当然也可用于DL领域。

官网:

https://developer.arm.com/technologies/neon

Intel的Neon专为DL设计。

官网:

https://ai.intel.com/neon/

GSL

GNU scientific library是一个C/C++写的数值计算库。

官网:

https://www.gnu.org/software/gsl/

OpenACC

官网:

https://www.openacc.org/

PGI

PGI是由The Portland Group开发的并行计算库,但后者已于2013年被NVIDIA收购。

官网:

https://www.pgroup.com/

HSA

HSA(Heterogeneous System Architecture)是AMD推出的异构系统架构。

官网:

http://www.amd.com/zh-cn/innovations/software-technologies/hsa

NetLib

NetLib是一个数学方面的网站,收集了大量的数学软件和论文。官网:

http://www.netlib.org/

知名软件LAPACK(Linear Algebra PACKage)和BLAS (Basic Linear Algebra Subprograms)的官网就在NetLib:

http://www.netlib.org/lapack/index.html

http://www.netlib.org/blas/index.html

LAPACK和BLAS的历史非常悠久,是用Fortran语言编写的。

GMP

GMP是一个C/C++的大整数计算库。

官网:

https://gmplib.org/

ATLAS(Automatically Tuned Linear Algebra Soft)

代码:

https://sourceforge.net/projects/math-atlas/

安装:

sudo apt install libatlas-base-dev

OpenBLAS

官网:

http://www.openblas.net/

代码:

https://github.com/xianyi/OpenBLAS

作者:张先轶,北京理工大学本硕(2005年、2007年)+中科院博士(2014年)。PerfXLab(澎峰科技)创始人。
个人主页:
http://xianyi.github.io/index_cn.htm

OpenBLAS需要gfortran参与编译:

sudo apt install gfortran

需要注意gcc的版本和gfortran的版本必须一致。例如,某台机器为了项目需要,没有使用ubuntu默认的gcc版本,这样即使安装了gfortran,也还是不行。最后,安装匹配的gfortran才解决了该问题。


OpenBLAS前身是日本人后藤和茂(Goto Kazushige)写的GotoBLAS2。这是一个真正的业界传奇。GotoBLAS2已经不再维护,而后继的OpenBLAS,只是项目维护而已。


  • BLAS Level 1:vector-vector operations
  • BLAS Level 2:matrix-vector operations
  • BLAS Level 3:matrix-matrix operations

https://www.zhihu.com/question/654319407

cpp26线性代数为什么要基于BLAS标准?

Armadillo

Armadillo是一个线性代数和科学计算的C++库。

官网:

http://arma.sourceforge.net/

ensmallen

ensmallen是一个基于Armadillo的数学优化方面的C++库。

官网:

https://ensmallen.org/

highway

Google推出的一个CPU SIMD的计算库。

官网:

https://github.com/google/highway

HSL Mathematical Software Library

HSL是最古老的数学计算库,始于1963年。

官网:

https://www.hsl.rl.ac.uk/catalogue/index.html

由于历史悠久,该项目基本是用fortran编写的。

任务调度工具

定时任务

最简单的任务调度莫过于定时任务。定时执行的任务可用crontab命令设置。

参考:

http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

crontab命令

调度工具

一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等。各任务单元之间存在时间先后及前后依赖关系。为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。

常见的调度工具有:AirFlow,Oozie,Azkaban,Cascading,Hamake,DolphinScheduler等。

这些工具的角色大致相当于Kettle中的Job。

TensorRT

TensorRT:嵌入式设备上专用于DL inference的计算库。

TensorRT还有个云端的集群版本:

https://github.com/NVIDIA/tensorrt-inference-server

参考:

https://mp.weixin.qq.com/s/v8-JHd5tWm41WLqR-h6eKA

使用TensorRT集成加速TensorFlow推理

https://mp.weixin.qq.com/s/rMvhsi2vXxVC65C5Z4IXIw

AI视频处理加速引擎TensorRT及Deepstream介绍

https://zhuanlan.zhihu.com/p/35657027

高性能深度学习支持引擎实战——TensorRT

CUDA-X AI

CUDA-X AI是软件加速库的集合,这些库建立在CUDA之上,提供对于深度学习、机器学习和高性能计算必不可少的优化功能。这些库包括cuDNN(用于加速深度学习基元)、cuML(用于加速数据科学工作流程和机器学习算法)、TensorRT(用于优化受训模型的推理性能)、cuDF(用于访问 pandas 之类的数据科学 API)、cuGraph(用于在图形上执行高性能分析),以及超过13个的其他库。

官网:

https://www.nvidia.cn/technologies/cuda-x/

TensorRT-LLM

TensorRT-LLM是NVIDIA推出的基于TensorRT的LLM推理工具。

代码:

https://github.com/NVIDIA/TensorRT-LLM/

Fork me on GitHub