包 ai.onnxruntime

ONNX Runtime 的 Java 接口。

提供对与 C 库相同的执行后端的访问。通过此 API 访问时,Java 中无法表示的类型(如 fp16)会转换为最接近的 Java 原生类型。

需要两个共享库:onnxruntimeonnxruntime4j_jni。加载器位于 OnnxRuntime 中,逻辑按以下顺序执行:

  1. 用户可以通过形式为 onnxruntime.native.LIB_NAME.skip 且值为 true 的属性,通知系统跳过某个共享库的加载。这意味着用户已决定通过其他方式加载该库。
  2. 用户可以通过形式为 onnxruntime.native.path 的属性指定所有原生库文件的显式位置。这会使用 System.load(java.lang.String) 方法。
  3. 用户可以通过形式为 onnxruntime.native.LIB_NAME.path 的属性指定共享库文件的显式位置。这会使用 System.load(java.lang.String) 方法。
  4. 自动发现共享库
    1. 如果共享库存在于类路径(classpath)资源中,则通过临时文件使用 System.load(java.lang.String) 进行加载。理想情况下,在将包含共享库的 JAR 包/依赖项添加到类路径时,这应该是默认的使用场景。
    2. 如果共享库不存在于类路径资源中,则使用 System.loadLibrary(java.lang.String) 加载,该方法通常会在文件系统的其他位置查找库。该方法的语义和行为取决于系统/JVM。通常,使用 java.library.path 属性来指定原生库的位置。
为了进行故障排除,所有共享库加载事件都会以 FINE 级别报告给 Java 日志。

请注意,CUDA、ROCM、DNNL、OpenVINO 和 TensorRT 均为“共享库执行提供程序”,必须存储在包含 ONNX Runtime 核心原生库的目录中,或者作为类路径资源存储。这是因为这些提供程序是由 ONNX Runtime 原生库自身加载的,Java API 无法控制其加载位置。