UStackUStack
Deeplearning4j icon

Deeplearning4j

Deeplearning4j 是基于 JVM 的深度学习套件,支持 Java 模型训练与运行,并通过 cpython 绑定实现 Python 互操作与模型导入。

Deeplearning4j

Deeplearning4j 是什么?

Deeplearning4j 是用于在 JVM 上运行深度学习的工具套件。它提供基于 Java 的训练和模型执行,同时支持通过 cpython 绑定执行 Python、模型导入支持以及与 tensorflow-java 和 onnxruntime 等运行时的互操作,实现与 Python 生态系统的互操作。

该项目设计用于作为现有 Python 或 C++ 工作流的补充,同时也作为独立选项,用于在 JVM 执行有用的环境中构建和部署模型。

主要特性

  • 以 JVM 为首要的深度学习执行:以 JVM 作为主要目标运行时,训练和运行深度学习模型。
  • 通过 cpython 绑定实现 Python 生态互操作:通过 cpython 绑定执行 Python 组件,实现与 Python 工作流部分的集成。
  • 模型导入和再训练支持:导入并再训练源自常见 Python 框架(如 Pytorch、Tensorflow 和 Keras)的模型。
  • 通过 Samediff 执行图:使用 Samediff 作为执行复杂计算图的低级框架,它作为运行 ONNX 和 TensorFlow 图的基础 API。
  • Java 的 ND4J 数值计算:使用 Nd4j 作为基于 Java 的张量/数值库,结合 numpy 风格操作与 TensorFlow/PyTorch 风格操作。
  • 跨设备 C++ 数学核心 (Libnd4j):使用 Libnd4j,这是一个轻量级独立 C++ 库,旨在让数学代码在不同设备上运行并跨设备类型优化。
  • 面向生产的 Python 脚本执行 (Python4j):使用 Python4j 在生产环境中执行 Python 脚本。
  • Apache Spark 集成:使用提供的集成与 Apache Spark 运行深度学习管道。
  • 数据转换至张量 (Datavec):将原始输入转换为适合神经网络训练和执行的张量。

如何使用 Deeplearning4j

  1. 从网站快速入门(项目推荐)开始,了解从哪里入手。
  2. 如果遇到依赖问题,使用网站的必需依赖指南来调整你的环境。
  3. 选择匹配你抽象水平的组件:
    • 使用 Deeplearning4j 文档,适用于多层网络和计算图等高级 API。
    • 如果需要低级、类似 PyTorch/TensorFlow 的工作流(内置自动微分),使用 Samediff
  4. 数据准备和模型输入,请查阅 Datavec 文档。
  5. 针对特定环境的部署或管道执行,请参考 Python4jApache Spark 及其他相关集成文档部分。

使用场景

  • 导入并再训练 Python 构建的模型:将 Pytorch、Tensorflow 或 Keras 中的模型引入 JVM 工作流,按需再训练,并使用 Deeplearning4j 组件继续模型开发。
  • 在 JVM 微服务中部署模型:将训练或导入的模型打包用于基于 JVM 的服务,使用 Deeplearning4j 作为推理或服务逻辑的运行时层。
  • 在 Apache Spark 上运行深度学习管道:使用 Apache Spark 集成在 Spark 环境中执行深度学习管道。
  • 执行或集成 TensorFlow/ONNX 图:使用 Samediff 作为图执行框架,以及其作为 ONNX 和 TensorFlow 图执行的基础 API 的角色。
  • 将原始数据转换为训练张量:使用 Datavec 将原始输入转换为适合神经网络训练和执行的张量格式。

常见问题

Deeplearning4j 只适用于 Java,还是也能与 Python 配合使用?

Deeplearning4j 是 JVM 套件,但该项目描述了通过 cpython 绑定、模型导入支持以及与其他运行时(如 tensorflow-java 和 onnxruntime)的互操作,实现与 Python 生态的互操作。

用于低级图处理的子模块应该选哪个?

网站将 Samediff 描述为类似 PyTorch 或 TensorFlow 的低级框架,用于构建神经网络并内置自动微分。

Nd4j 用于什么?

Nd4j 被描述为基于 Java 的“numpy++”库,提供 numpy 操作以及 TensorFlow/PyTorch 风格的操作。

该项目支持数据预处理吗?

是的。Datavec 子模块是一个数据转换库,将原始输入数据转换为适合神经网络执行的张量。

Spark 如何融入技术栈?

网站包含 Apache Spark 集成 文档部分,表明可以使用提供的集成在 Spark 中执行深度学习管道。

替代方案

  • PyTorch / TensorFlow(原生 Python):如果您想要无 JVM 执行的原生 Python 工作流,这些框架专注于 Python 中的模型定义和训练。
  • TensorFlow Java 或 ONNX Runtime(注重运行时的方案):如果您的主要目标是运行导出的模型(如 TensorFlow 或 ONNX),而非完整的 JVM 深度学习工作流,这些运行时库强调在其各自生态中的执行。
  • Spark 上的通用 ML 管道(无特定 JVM 深度学习套件):您可以在 Spark 中运行预处理和分布式处理,并依赖其他模型执行组件,但与单一集成栈相比,您需要自行组装更多部分。
  • 类似 NumPy 的 Java 张量库(无完整深度学习栈):仅用于张量数学的替代方案可能涵盖数值操作,但不一定包含此处描述的深度学习图、数据转换和互操作组件。