包 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 包/依赖项添加到 classpath 时的默认使用方式。
    2. 如果共享库不存在于 classpath 资源中,则使用 System.loadLibrary(java.lang.String) 加载,该方法通常在文件系统的其他位置查找库。该方法的语义和行为取决于系统/JVM。通常,java.library.path 属性用于指定原生库的位置。
为了排除故障,所有共享库加载事件都会报告到 Java 日志,级别为 FINE。

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