JVM 原生深度学习
用 Java 和 Scala 构建、训练、部署神经网络,无需离开 JVM 技术栈。可通过 CUDA 获得 GPU 加速,或通过 OpenBLAS 与 oneDNN 获得高性能 CPU 计算。
官方说明 ↗拖动滑块完成拼图,通过后发送验证码
独立第三方 AI 评测平台 · 只用实测数据
Eclipse Deeplearning4j(DL4J)是面向 JVM 的开源分布式深度学习框架,用 Java 和 Scala 即可构建、训练和部署神经网络,并通过 CUDA 实现 GPU 加速、通过 OpenBLAS 和 oneDNN 实现高性能 CPU 计算。它以 ND4J、SameDiff、DataVec 等库组成完整生态,支持从 Keras、TensorFlow、ONNX 导入模型,也能通过 Python4J 从 Java 调用 Python。当前文档版本为 1.0.0-M2.1。短板是生态与教程数量远不及 Python 阵营,且入门需要 Java 与 Maven 基础。
DL4J 是 Eclipse 基金会旗下、面向 JVM 的开源分布式深度学习框架,由 Konduit 团队维护。它面向使用 Java 和 Scala 的开发者,让他们无需切换到 Python 就能完成神经网络的构建、训练与部署,并支持在 JVM 微服务、移动设备、物联网和 Apache Spark 等环境运行。
框架以库套件的形式组织:ND4J 提供面向 Java 的 N 维数组计算,Deeplearning4j 负责神经网络训练与推理,SameDiff 负责自动微分与图执行,DataVec 负责数据加载、转换与 ETL,Model Import 负责从 Keras、TensorFlow、ONNX 导入模型,Python4J 通过嵌入 CPython 实现 Java 调用 Python,OmniHub 是预训练模型仓库,Arbiter 负责超参数优化。计算后端支持通过 CUDA 进行 GPU 加速,以及通过 OpenBLAS 和 oneDNN 进行高性能 CPU 计算。
使用方式按角色区分:只想把模型用进应用的开发者,熟悉 Java 和 Maven 后可直接跟着 Quickstart 上手,API 设计上不需要了解反向传播的内部细节,配置网络后调用 fit 与 output 即可;需要选择架构、调试训练问题、调超参数的开发者,则需要线性代数与微积分基础,本科程度的熟悉度即可。
用 Java 和 Scala 构建、训练、部署神经网络,无需离开 JVM 技术栈。可通过 CUDA 获得 GPU 加速,或通过 OpenBLAS 与 oneDNN 获得高性能 CPU 计算。
官方说明 ↗支持从 Keras、TensorFlow、ONNX 导入模型,把已有的 Python 侧模型搬到 JVM 上做推理或再训练,避免重写网络结构。
官方说明 ↗N 维数组库,相当于 Java 版的 NumPy,是整个生态的基础数据结构。张量、数据管线、内存与工作区管理等核心概念都建立在它之上。
官方说明 ↗提供自动微分与图执行能力,并可通过 sd.loss 命名空间定义损失函数,适合需要自定义计算图的场景。
官方说明 ↗所有损失函数实现 ILossFunction 接口。多分类用 LossMCXENT 并搭配 SOFTMAX,接受 one-hot 标签;整数标签用 LossSparseMCXENT;二分类用 LossBinaryXENT 搭配 SIGMOID;SVM 风格用 LossHinge。
官方说明 ↗通过嵌入 CPython 实现从 Java 调用 Python,让 JVM 项目可以直接复用 Python 侧已有的库与脚本,而不是把模型整体迁走。
官方说明 ↗支持在 Apache Spark 上运行分布式训练,配合 Arbiter 做超参数优化,适合数据量大、需要集群算力的训练任务。
官方说明 ↗OmniHub 是预训练模型注册中心,可加载现成模型做迁移学习或直接推理,不必从零开始训练。
官方说明 ↗当你的线上系统已经是 Java 或 Scala、又不想为了模型推理再维护一套 Python 服务时,DL4J 值得选:它能直接导入 Keras、TensorFlow、ONNX 模型,在 JVM 内完成训练与部署,还能通过 Spark 做分布式训练。当你只是想快速试验新架构、跟着最新论文复现,或者团队本来就用 Python 时,它并不合适——生态与教程数量都比不过 Python 阵营。入门门槛也要考虑:需要熟悉 Java、Maven 或 Gradle,想做架构选型和调参还得补线性代数与微积分。
线上服务是 JVM 微服务,希望模型训练和推理都不出 Java 技术栈,减少一套 Python 服务的运维成本。
手里已有 Keras、TensorFlow 或 ONNX 模型,需要搬到 JVM 上做推理或再训练,用 Model Import 可省去重写网络。
数据已经在 Apache Spark 集群上,需要直接在集群里做分布式训练,配合 Arbiter 调超参数。
要把模型部署到移动设备或物联网设备,且宿主环境是 JVM,DL4J 提供对应的部署路径。
想跟着最新论文复现、快速试验新架构,Python 生态的资料和示例更多,用 DL4J 会额外花时间在工程配置上。
不熟悉 Java、Maven 或 Gradle 就直接上手,会先卡在工程配置上,建议先补 Java 与依赖管理基础。
它是 Eclipse 基金会下的开源项目,属于开源免费的分布式深度学习框架,面向 JVM 提供完整生态,没有授权费用。文档未列出任何付费档位或商业版本价格。
当前文档覆盖 Deeplearning4j 1.0.0-M2.1,这也是当前版本。侧边栏的版本选择器还可以切换到 1.0.0-M1.1、1.0.0-M1 等旧版本,以及标记为 Legacy 的 1.0.0-beta7、1.0.0-beta6。
DL4J 的差异点在于面向 JVM:用 Java 和 Scala 就能构建、训练、部署神经网络,并且能导入 Keras、TensorFlow、ONNX 模型。如果线上系统已是 Java 技术栈、又不想额外维护 Python 服务,选 DL4J 更顺;如果团队本来用 Python、需要紧跟最新架构与论文,留在原生态更省事。
不建议。DL4J 是 Java 库,使用前需要熟悉面向对象编程、集合与泛型、异常处理,以及用 Maven 或 Gradle 管理依赖和 IntelliJ IDEA 这类 IDE。没有这些基础会先卡在工程配置上。
分两种情况。只是用 DL4J 搭应用,熟悉 Java 和 Maven 后跟着 Quickstart 走即可,API 设计上不需要了解反向传播的内部细节,配置网络后调用 fit 和 output 就行。要选架构、调超参数、排查训练问题,则需要线性代数(矩阵乘法、点积、向量空间)和微积分(梯度、链式法则),概率统计对理解损失函数和评估指标有帮助,本科程度即可。
优先查看 Memory Configuration 和 Memory and Workspaces 两页。DL4J 的 ND4J 使用堆外内存与工作区管理,和普通 Java 对象的内存行为不同,直接套用常规 Java 内存调优思路容易排查不到点上。
可以。生态里有专门的 Model Import 库负责从 Keras、TensorFlow、ONNX 导入模型,文档也分别提供了 Keras Import、TensorFlow Import、ONNX Import 页面。导入之后可以在 JVM 上做推理,也可以继续再训练。
可以。Python4J 通过嵌入 CPython 实现从 Java 调用 Python,让 JVM 项目复用 Python 侧的库与脚本,而不用把整套服务迁到 Python 上。