# 常见问题
# 1、UnknownHostException
java.net.UnknownHostException: resources.djl.ai
检查网络是否有问题,如果未手动指定模型路径,需要联网使用
# 2、windows系统 seetafece6模型 Can't find dependent libraries
java.lang.UnsatisfiedLinkError: C:\smartjavaai-cache\seetaface6\tennis.dll: Can't find dependent libraries
可能原因:
一般是因为电脑依赖库缺失,需要安装依赖库,可以点击安装运行库合集 (opens new window)
如果安装依赖库后还是不可以运行,请更换其他系统
# 3、windows使用gpu报错:Can't find dependent libraries
Caused by: java.lang.UnsatisfiedLinkError: D:\Software\.djl.ai\pytorch\2.4.0-cu124-win-x86_64\torch_cuda.dll: Can't find dependent libraries
该问题通常是由于环境变量 PATH 配置不当所导致
# 解决方法:
查看GPU使用指南
# 4、报错:找不到GLIBCXX_3.4.xxx
Caused by: java.lang.UnsatisfiedLinkError: /root/smartjavaai_cache/pytorch/2.5.1-cpu-linux-x86_64/libc10.so: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /root/smartjavaai_cache/pytorch/2.5.1-cpu-linux-x86_64/libc10.so)
报错原因:因为linux系统版本过低,需要更新系统或者安装GLIBCXX_3.4.20依赖库,常见于centos7系统,推荐使用 centos stream 9 或者ubuntu22,或者使用docker
# 5、打包后运行jar包,报错:ModelZoo not found in classpath: ai.djl.pytorch
Exception in thread "main" java.lang.IllegalArgumentException: ModelZoo not found in classpath: ai.djl.pytorch
报错原因:由于普通打包方式会导致文件丢失
解决方法:使用maven shade插件打包,mainClass需替换为你的mainClass
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>shade</goal></goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${exec.mainClass}</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
# 6、日志jar冲突
SmartJavaAI 项目中默认引入了 slf4j-simple 作为日志实现。如果你的项目中已经使用了其他日志框架(如 logback-classic 或 log4j 等),则可能会出现 SLF4J 绑定冲突 的错误提示
解决方案:建议在你的项目中排除 SmartJavaAI 模块中默认引入的 slf4j-simple
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
# 7、为什么首次运行会比较慢?
由于 DJL 在使用 PyTorch 模型时会进行一次性的“预热”过程(JIT 图优化),首次执行推理时会稍慢。 该过程会根据输入自动构建优化后的执行图,从而显著提升后续推理性能。
# 8、Can't load library: libwinpthread-1.dll
报错详情:
java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\Administrator\smartjavaai_cache\tokenizers\0.21.0-0.32.0-cpu-win-x86_64\libwinpthread-1.dll
# 问题原因:
虽然你没有使用显卡,但 DJL 代码中会调用 CudaUtils.getComputeCapability(0)
来获取显卡的计算能力。
如果显卡是 8.6,DJL 就会把 Hugging Face Transformers 依赖库解压到:
0.21.0-0.32.0-cpu-win-x86_64/86/
但运行时有时会从:
0.21.0-0.32.0-cpu-win-x86_64/
目录下查找依赖,导致报错。
# 解决方法:
把 86
文件夹里的所有 .dll
文件复制到它的上级目录(即 0.21.0-0.32.0-cpu-win-x86_64/
)。
注意不要删除原来的 86
文件夹,以防后续仍需要用到。
# 9、failed finding central directory
ai.djl.engine.EngineException: PytorchStreamReader failed reading zip archive: failed finding central directory
问题原因:模型文件不完整或者损坏
解决方法:删除模型文件重新下载
# 10、failed reading zip archive: failed finding central directory
ai.djl.engine.EngineException: PytorchStreamReader failed reading zip archive: failed finding central directory
问题原因:模型文件不完整或者损坏
解决方法:删除模型文件重新下载
# 11、使用JDK8报错:java.lang.UnsatisfiedLinkError: onnxruntime-java740134882759498850\onnxruntime.dll:我不到指定的程序。
java.lang.UnsatisfiedLinkError: C:\users\Administrator\AppData\Local\Temp\onnxruntime-java740134882759498850\onnxruntime.dll:我不到指定的程序。
问题原因:部分模型使用的引擎是:onnxruntime,程序运行时自动从jar包中将依赖库解压到缓存目录,但由于部分JDK8版本的问题导致,没有成功解压到缓存目录
解决方案:首先检查报错的目录下是否有提示的文件存在,如果不存在,可以升级到最新的JDK8版本 推荐 JDK1.8.0_401及以上版本
# 12、为什么缓存目录存在很多以onnxruntime-java开头的文件夹?
问题原因:部分模型使用的是 ONNX Runtime 引擎,程序在每次运行时,都会在缓存目录下创建一个新的临时文件夹,并将 ONNXRuntime 的依赖库从 JAR 包中解压到该目录中,最终导致生成多个以 onnxruntime-java 开头的文件夹,造成缓存堆积。
解决方案:调用模型前,加入如下代码,代码中的路径改为自己的缓存目录,并将onnxruntime的依赖库移动到该目录下
System.setProperty("onnxruntime.native.path", "C:\\Users\\xxx\\smartjavaai_cache\\onnxruntime");
# 13、example 使用jdk8运行报错:警告: 源发行版 11 需要目标发行版 11
解决方案:修改pom文件中的maven.compiler.source和maven.compiler.target属性为8
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
# 14、Failed to download pyTorch native library
问题原因:程序将自动下载深度学习引擎依赖库,有时网络不太好,所以导致下载失败
解决方法:请使用离线依赖库,具体请参考离线依赖库
# 15、java.lang.IllegalArgumentException: 特征向量长度不一致: 1024 vs 512
问题原因:因为有的模型提取人脸的特征长度是512,有的模型是1024,如果使用不同模型提取特征,就有可能导致特征向量长度不一致,所以如果报上诉错误,很大可能是人脸注册使用了不同模型的特征向量,也有可能是人脸注册和人脸查询使用的模型不一致
解决方法:人脸识别全流程中使用相同人脸识别模型
# 16、Caused by: java.lang.IllegalStateException: Pool not open
问题原因:将模型放在try括号中,使用完将自动关闭pool,但是在try括号外再次使用model对象,就会导致pool被关闭,从而导致后续使用model对象报错
try (FaceDetModel faceModel = FaceDetModelFactory.getInstance().getModel()) {
...
}
解决方法:不要使用try with resource语法,直接将model对象放在try括号外使用即可,确定以后不再使用模型,可以手动调用close()