You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打包JAR后PyTorch Runtime缺失致ONNX模型运行异常求助

问题分析与解决方案

问题根源

IDE运行环境同时存在PyTorch和ONNXRuntime引擎,DJL会自动选择PyTorch的NDArray实现(支持getName()及stack操作);但打包成JAR后仅包含ONNXRuntime,其NDArrayAdapter未实现相关操作,触发UnsupportedOperationException。

具体解决步骤

1. 统一DJL依赖版本

当前Gradle依赖中onnxruntime-engine版本为0.19.0,与其他DJL组件(0.21.0-SNAPSHOT)版本不一致,可能导致兼容性问题。修改为同版本:

api("ai.djl.onnxruntime:onnxruntime-engine:0.21.0-SNAPSHOT")

2. 确保打包时包含完整依赖

如果使用Gradle的shadowJar插件打包可执行JAR,需配置插件确保所有依赖被正确合并:

plugins {
    id("com.github.johnrengelman.shadow") version "7.1.2"
}

shadowJar {
    mergeServiceFiles()
    manifest {
        attributes("Main-Class" to "your.package.TestModel")
    }
}

若使用application插件,需确保运行任务包含全量runtime依赖:

plugins {
    application
}

application {
    mainClass.set("your.package.TestModel")
}

3. 替换不兼容的Batchifier

ONNXRuntime的NDArray实现不支持StackBatchifier的部分操作,可改用PaddingStackBatchifier替代,示例:
在自定义Translator中重写getBatchifier()方法:

override fun getBatchifier(): Batchifier {
    return PaddingStackBatchifier.builder().build()
}

4. 明确指定运行引擎

在代码中强制指定使用ONNXRuntime,避免环境差异导致的引擎选择不一致:

val criteria = Criteria.builder<YourInputType, YourOutputType>()
    .setEngine("OnnxRuntime")
    .setModelPath(Paths.get("path/to/your/model.onnx"))
    .setTranslator(YourTranslator())
    .build()

内容的提问来源于stack exchange,提问作者HishamGarout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:40:58