我在独立部署模式下运行一个Flink作业,该作业使用Java来加载pytorch模型。模型成功加载,我可以通过Flink Rest取消作业。但是,当我再次启动flink作业的时候,它会抛出,
UnsatisfiedLink Error:<pytorch>.so already loaded in another classloader它需要重新启动独立部署才能再次加载。是否可以在关闭作业请求的同时关闭进程,以便在不重新启动的情况下再次加载?
发布于 2021-12-17 18:23:38
每个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中加载本机库。
https://stackoverflow.com/questions/70296408
复制相似问题