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

在ONOS Karaf应用中集成AI DJL PyTorch包时无法加载深度学习引擎

解决ONOS Karaf中DJL PyTorch引擎加载失败问题

核心问题分析

OSGi容器(如Karaf)的类加载隔离机制,会导致DJL依赖的服务加载器(ServiceLoader)无法跨bundle发现引擎实现类;同时原生库的加载路径、权限配置也可能引发引擎无法识别的问题。

分步解决方案

1. 修正bundle的导入/导出配置

检查并调整bundle的包导入导出规则,确保类加载路径通畅:

  • 在你的应用bundle的pom.xml中,添加对DJL相关包的显式导入:
<Import-Package>
    ai.djl.*,
    ai.djl.pytorch.*,
    com.sun.jna.*,
    org.apache.commons.compress.*,
    *
</Import-Package>
  • 确认ai-djl-pytorch-engine bundle的Export-Package配置包含ai.djl.pytorch.engine等关键包,保证其他bundle能访问到引擎实现类。

2. 手动指定DJL引擎加载策略

绕过OSGi的服务加载限制,直接指定PyTorch引擎:

  • 在代码中显式设置默认引擎:
System.setProperty("ai.djl.default_engine", "PyTorch");
// 或手动加载引擎实例
Engine engine = Engine.getEngine("PyTorch");
  • 或者将DJL的服务配置文件META-INF/services/ai.djl.engine.Engine复制到你的应用bundle对应路径,文件内容指定PyTorch引擎实现类:
ai.djl.pytorch.engine.PtEngine

3. 修复原生库加载问题

ai-djl-pytorch-native-cpu包含PyTorch原生库,需确保OSGi能正确识别加载:

  • 检查该bundle的MANIFEST.MF文件,确认Bundle-NativeCode配置正确,已指定不同系统架构的原生库路径:
Bundle-NativeCode: native/linux-x86_64/libtorch.so; osname=Linux; processor=x86-64,
 native/darwin-x86_64/libtorch.dylib; osname=MacOSX; processor=x86-64,
 native/win32-x86_64/torch.dll; osname=Windows; processor=x86-64
  • 若原生库仍无法加载,可在Karaf启动时将原生库路径加入JVM参数:
export KARAF_OPTS="-Djava.library.path=/path/to/native/libs"

4. 确认依赖版本兼容性

确保所有DJL相关依赖版本严格匹配:

  • ai-djl-api(0.19.0)、ai-djl-pytorch-engine(0.19.0)、ai-djl-pytorch-native-cpu(1.13.0)的版本组合是官方兼容的,但需排查是否存在其他依赖版本冲突。

5. 临时启用动态导入(调试用)

若上述方法无效,可临时为应用bundle添加动态导入,允许跨bundle加载类(不建议生产环境使用):

<DynamicImport-Package>*</DynamicImport-Package>

验证步骤

  1. 在Karaf控制台执行bundle:list,确认所有依赖bundle处于Active状态。
  2. 执行bundle:headers <你的应用bundleID>,检查导入的包是否全部被满足。
  3. 查看Karaf日志文件data/log/karaf.log,提取类加载或引擎加载的具体错误信息,定位缺失的依赖或配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:55:21