Pytorch Djl java加载异常



我在独立部署模式下运行一个Flink作业,该作业使用Java djl加载pytorch模型。模型成功加载,我可以通过Flink Rest API取消作业。然而,当我再次尝试启动flink作业时,它抛出了

UnsatisfiedLink Error:<pytorch>.so already loaded in another classloader

它需要重新启动独立部署才能再次加载。是否可以在关闭作业请求的同时关闭进程,这样我就可以在不重新启动的情况下再次加载?

每个JVM只能加载一次本机库。在DJL中,当Engine类初始化时,pytorch本机库将被加载,如果本机库已经在另一个类加载器中加载,则引擎类将无法初始化。

解决方法之一是在系统ClassLoader中加载本机库,该库可以由子类加载器共享。DJL允许您注入一个NativeHelper类来加载本机库,您需要确保您的NativeHelper在系统类路径中:

System.setProperty("ai.djl.pytorch.native_helper", "org.examples.MyNativeHelper");

你可以在这里找到NativeHelper的测试代码

有关的更多详细信息,请参阅此链接

MyNativeHelper类中,您只需要添加以下内容:

public static void load(String path) {
System.load(path);
}

在运行时,DJL将调用load(String path)函数来加载ClassLoader中的本机库。

最新更新