langchain4j [BUG] AllMiniLmL6V2EmbeddingModel导致UnsatisfiedLinkError

nhhxz33t  于 3个月前  发布在  其他
关注(0)|答案(8)|浏览(161)

描述bug

我使用了AllMiniLmL6V2EmbeddingModel。一开始运行正常。当我重新编译代码后,我的应用服务器JVM不需要重启,它就能加载重新编译的类。当代码再次调用new AllMiniLmL6V2EmbeddingModel()时,我得到了java.lang.UnsatisfiedLinkError

日志和堆栈跟踪

java.lang.UnsatisfiedLinkError: Native Library /Users/gkwan/.djl.ai/tokenizers/0.15.0-0.26.0-osx-aarch64/libtokenizers.dylib already loaded in another classloader
[INFO]  at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:201)
[INFO]  at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
[INFO]  at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2389)
[INFO]  at java.base/java.lang.Runtime.load0(Runtime.java:755)
[INFO]  at java.base/java.lang.System.load(System.java:1953)
[INFO]  at ai.djl.huggingface.tokenizers.jni.LibUtils.loadLibrary(LibUtils.java:76)
[INFO]  at ai.djl.huggingface.tokenizers.jni.LibUtils.<clinit>(LibUtils.java:41)
[INFO]  at ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.newInstance(HuggingFaceTokenizer.java:173)
[INFO]  at dev.langchain4j.model.embedding.OnnxBertBiEncoder.<init>(OnnxBertBiEncoder.java:39)
[INFO]  at dev.langchain4j.model.embedding.AbstractInProcessEmbeddingModel.loadFromJar(AbstractInProcessEmbeddingModel.java:20)
[INFO]  at dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel.<clinit>(AllMiniLmL6V2EmbeddingModel.java:18)
[INFO]  at dev.langchain4j.example.rest.ModelResource.getEmbeddingModel(ModelResource.java:60)
[INFO]  at dev.langchain4j.example.rest.ModelResource.similarity(ModelResource.java:139)
[INFO]  at dev.langchain4j.example.rest.ModelResource$Proxy$_$$_WeldClientProxy.similarity(Unknown Source)
[INFO]  at jdk.internal.reflect.GeneratedMethodAccessor831.invoke(Unknown Source)
[INFO]  at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[INFO]  at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
[INFO]  at [internal classes]

重现步骤

  • git clone https://github.com/gkwan-ibm/langchain4j-examples.git -b in-process-embedding
  • cd langchain4j-examples/jakartaee-microprofile-example
  • export JAVA_HOME=<your Java 17 home path>
  • export HUGGING_FACE_API_KEY=<your Hugging Face read token>
  • ./mvnw liberty:dev
  • enter/return键运行测试
  • 所有测试都应通过,因为Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
  • 触摸或更新文件jakartaee-microprofile-example/src/main/java/dev/langchain4j/example/rest/ModelResource.java。它将自动重新编译。
  • enter/return键再次运行测试
  • 应看到上述异常

预期行为

无异常

请填写以下信息:

  • LangChain4j版本:例如0.28.0
  • Java版本:例如17

附加上下文

ylamdve6

ylamdve61#

have no issue to use the HuggingFaceEmbeddingModel class

o4tp2gmn

o4tp2gmn2#

感谢gkwan-ibm的报告!我会检查这个问题。

qojgxg4l

qojgxg4l3#

我遇到了Quarkus的一个问题,目前不得不应用一些解决方法,因为这是一个测试问题。如果多个测试创建模型的示例,那么只有第一个示例成功。请参阅https://github.com/quarkiverse/quarkus-langchain4j/pull/369/files#diff-994b623ea2065515c4ea37ca3d0490d1be5e6286ddf5f9367423b0bff0fbe701R85

bvuwiixz

bvuwiixz4#

感谢您的建议。我尝试了,但在我的案例中不起作用,原因是代码更改不在测试中。

fv2wmkja

fv2wmkja5#

我在quarkus-langchain4j中遇到了相同的问题。我认为这个问题应该由huggingFace直接解决,即使本地库已经存在,他们仍然会加载它:
https://github.com/deepjavalibrary/djl/blob/master/extensions/tokenizers/src/main/java/ai/djl/huggingface/tokenizers/jni/LibUtils.java#L74
我会与djl团队核实。

nfzehxib

nfzehxib6#

我认为deepjavalibrary/djl#3020应该能解决这个问题,但它不在我们现在使用的0.26.0版本中,所以我们需要发布一个新的djl版本。

ttisahbt

ttisahbt7#

好的,我明白了。但是我不确定这是否能解决UnsatisfiedLinkError问题。我已经向DJL提出了一些建议。

tuwxkamq

tuwxkamq8#

在与djl团队的调查后,这将无法解决这个问题。
对于quarkus应用程序,您可以使用:quarkus.class-loading.parent-first-artifacts=ai.djl.huggingface:tokenizers来加载父类加载器中的类。
对于应用服务器,您需要遵循@frankfliu的建议:deepjavalibrary/djl#3020(评论)

相关问题