Java DJL通过内置引擎抽象和原生库绑定,纯Java调用PyTorch(基于torch-jni)与TensorFlow(基于tensorflow-java),支持统一Model/Predictor接口、自动下载native库、跨引擎代码复用,专注推理场景。

Java DJL 可以直接集成 PyTorch 和 TensorFlow 模型,无需自己封装 JNI 或调用 Python 进程,核心靠的是内置的引擎抽象和原生库绑定。它不是简单地“调用”PyTorch/TensorFlow,而是通过统一的 Model、Predictor、NDArray 接口,底层自动加载对应引擎的 native library(如 libtorch.so / libtensorflow.so),实现纯 Java 调用。
PyTorch 引擎支持:基于 LibTorch 的 Java 绑定
DJL 使用 Facebook 官方维护的 torch-jni 库(即 LibTorch 的 Java 封装),所有 PyTorch 操作最终转为 C++ 执行。你不需要安装 Python 或 PyTorch 环境。
- 添加依赖(Maven):
ai.djl.pytorch
pytorch-engine
0.27.0
- 模型格式支持:.pt(ScriptModule)、.zip(TorchScript)、.pth(state dict + 自定义加载逻辑);推荐用 TorchScript 导出,保证跨语言兼容性。
- 自动下载 native 库:首次运行时,DJL 根据操作系统和 CPU/GPU 自动拉取对应版本的 libtorch(如 linux-x86_64-cu118),缓存在 ~/.djl.ai/cache。
TensorFlow 引擎支持:基于 TensorFlow Java API
DJL 使用 Google 官方 tensorflow-java 项目(非 JNI 封装,而是基于 TensorFlow C API 的 Java binding),支持 SavedModel 和 Frozen Graph(.pb)。
- 添加依赖:
ai.djl.tensorflow
tensorflow-engine
0.27.0
- SavedModel 是首选:目录结构含 assets/、variables/、saved_model.pb,DJL 可直接 load;Frozen Graph 需指定输入/输出 tensor name。
- CPU/GPU 自动识别:依赖 tensorflow-java 的 native 分发,不需手动配置 CUDA,但 GPU 支持需对应版本(如 tensorflow-java-gpu)。
统一建模流程:写一次代码,切换引擎只需改依赖和模型路径
无论 PyTorch 还是 TensorFlow,加载、预处理、推理、后处理都用同一套 DJL 接口:
立即学习“Java免费学习笔记(深入)”;
- Model model = Model.newInstance("my-model");
model.load(ModelZoo.getModel(modelUrl), "src/main/resources/my-model"); - Predictor
predictor = model.newPredictor(ImageFactory.getInstance()); - Classifications result = predictor.predict(ImageFactory.getInstance().fromUrl(imageUrl));
- 引擎自动选择:model.load() 时根据模型文件后缀或 metadata.json 中的 engine 字段(如 "PYTORCH" 或 "TENSORFLOW")决定使用哪个 Engine 实例。
注意事项与常见问题
- 版本对齐很重要:DJL 版本、引擎模块版本、native 库版本需匹配;建议统一用 DJL 官方发布的 BOM(如 ai.djl:bom:0.27.0)管理依赖。
- GPU 支持需额外依赖:PyTorch 加
pytorch-native-auto-cu118,TensorFlow 加tensorflow-java-gpu,且系统需装对应 CUDA/cuDNN。 - 自定义算子或训练暂不支持:DJL 当前聚焦于推理(inference);PyTorch 训练需回 Python,TensorFlow 可用 TF Java 做部分图构建,但 DJL 不封装训练 loop。










