包 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 無法控制載入位置。