1. Oracle 开源 Java 机器学习库 Tribuo

2020年9月15日,Oracle 开源了一个用 Java 编写的机器学习库,名为 Tribuo。它提供了用于分类、回归、聚类、模型开发等的工具。也为许多流行的第三方机器学习库提供了统一的接口。

Oracle 提到,他们这些年来致力于将机器学习模型部署到大规模的生产系统中。在这个过程中,他们发现,企业的期望往往与现有的机器学习库提供的功能之间存在着鸿沟。

174946_kYwR_4105562.png

举例来讲,大型的软件系统通常希望可以使用可自我描述的构造块,并判断其何时输入或输出无效。然而大多数机器学习库依靠一堆浮点数组来训练模型。在部署时,输入是一个浮点数组,并且产生另一个浮点数组作为预测输出。关于这些数组中任何一个的含义,或输入/输出浮点数应该是什么样的描述,都留给 Wiki 和错误跟踪器,或被写为代码注释。Oracle 指出,开发者不会希望为每个机器学习模型添加另一个数据库表只是为了解释输出浮动数组的含义。

另一方面,在生产中跟踪模型也很棘手,因为它需要外部系统来保持已部署模型与训练过程和数据之间的链接。Oracle 的机器学习研究小组认为,将这些额外的要求直接嵌入机器学习库会好得多。

从编程语言上来看,大多数流行的机器学习库都用 Python 和 R 等动态语言编写,而多数企业系统是基于 Java 等静态类型语言的。这就要求企业同时使用不同语言来编写代码,并确保其运行,也会因此产生更多的代码维护成本和系统开销。

此次开源的 Tribuo 则能够妥善处理这些问题。Tribuo 具有数据加载管道、文本处理管道和功能级别转换,可在数据加载后对其进行操作。它知道自己输入/输出了什么,并可以描述每个输入/输出的范围和类型。

使用 Tribuo 从其他系统和语言部署模型也很方便,它提供了指向 ONNX Runtime、TensorFlow 和 XGBoost 的接口。其中,对 onnx 模型的支持允许在 Java 中部署一些 Python 软件包(例如 pytorch)训练的模型。

Tribuo 目前支持 Java 8 及更高版本。Oracle 表示该机器学习库已经在公司的内部生产中运转了数年。

github: https://github.com/oracle/tribuo
官网: https://tribuo.org/

2. LinkedIn 开源 Java 机器学习函数库 Dagli

LinkedIn 宣布开源 Dagli,Dagli 是一个用于 Java(和其他 JVM 语言)的开源机器学习函数库,其开发团队表示通过它可轻松编写不易出错、可读、可修改、可维护且易于部署的模型管道,而不会引起技术债。Dagli 充分利用了现代多核的 CPU 和功能日益强大的 GPU,可以对真实世界模型进行有效的单机训练。

LinkedIn 提到近年来诞生了越来越多的优秀机器学习工具,比如用于神经网络的 TensorFlow, PyTorch, DeepLearning4J 和 CNTK;用于极大规模数据管道的 Spark 和 Kubeflow,以及用于各种常见模型的 scikit-learn, ML.NET 和最近的 Tribuo。

然而,模型通常是集成管道(包括特征变换器)的一部分,构建、训练和将这些管道部署到生产环境仍比原来更繁琐。为了适应训练和推理,往往需要进行重复或多余的工作,从而产生“胶水”代码,导致模型的未来演变和维护复杂化,并造成长期的技术负担。

这就是 LinkedIn 推出 Dagli 的原因,他们希望 Dagli 能解决因为模型而导致技术负担的问题。

LinkedIn 认为,无论是经验丰富的机器学习工程师,还是是刚接触机器学习不久的开发者,都能够使用 Dagli 开发机器学习模型。对资深机器学习工程师来说,Dagli 提供了一个简便的方法来开发高效且适用于生产环境的模型,该模型能够被长期维护,并在需要时进行扩展,能够与现在基于 JVM 的技术栈整合。

而对于刚接触机器学习的工程师而言,Dagli 提供了直观好用的 API,可结合熟悉的 JVM 工具使用,避免出现常见的逻辑错误。Dagli 将机器学习管道表示为有向无环图 (DAG),同时用于训练和推理,无需指定用于训练的管道和用于推理的单独管道。

Dagli 使用简单可读的 ML 管道定义,还包括大量的的静态类型以及不可变性,从根本设计上,杜绝了大部分潜在的逻辑错误。此外,Dagli 具有高度可移植性,使用者可在任何平台上的服务器、Hadoop、CLI、IDE 以及任何 JVM 上下文环境中使用。

github: https://github.com/linkedin/dagli

3. Amazon Deep Java Library (DJL)

DJL是一个开源的深度学习开发包。通过DJL,用户可以使用Java来训练和部署深度学习模型。DJL提供了简洁的API,简化了Java开发人员上手深度学习的过程。本文通过一个实例演示如何使用DJL提供的预训练模型在几分钟的时间完成一个推理过程。

为什么要做DJL

在深度学习领域有很多面向Python开发者的资料,比如使用NumPy进行数据分析、使用MatPlotlib进行可视化;深度学习框架方面,TensorFlow、PyTorch、mxnet等常用框架都对Python有很好的支持。相比而言,虽然Java仍然是企业软件使用最多的开发语言,面向Java开发者的支持非常少。我们开发DJL的目的是为Java开发者提供一套开源工具用于开发和部署深度学习模型。

DJL在既有的深度学习框架之上提供了一套基于Java的API。我们力争简化API的定义,以消除深度学习的复杂性。通过这些简单的API,以及DJL内置的预训练模型,用户可以在几分钟内构建一个深度学习应用。

20191206150254202.jpg

github: https://github.com/awslabs/djl
官网: https://djl.ai/

参考文章:

  1. Oracle 开源 Java 机器学习库 Tribuo
  2. LinkedIn 开源 Java 机器学习函数库 Dagli,面向 JVM 优化
  3. Deep Java Library (DJL) 简介