Neural Networks API 驅動程式

本頁概述如何實作 Neural Networks API (NNAPI) 驅動程式庫。詳情請參閱 HAL 定義中的說明文件 個檔案 hardware/interfaces/neuralnetworks。 驅動程式範例位於 frameworks/ml/nn/driver/sample

如要進一步瞭解 Neural Networks API,請參閱 Neural Networks API

類神經網路 HAL

類神經網路 (NN) HAL 定義了多種裝置、 例如圖形處理器 (GPU) 和數位訊號處理器 (DSP) 納入產品中的不同元素 (例如手機或平板電腦)。推動這些因素 裝置必須符合 NN HAL。介面是在 HAL 中指定 hardware/interfaces/neuralnetworks

介面在架構與驅動程式之間的一般流程 如圖 1 所示

類神經網路流動

圖 1. 類神經網路流動

初始化

在初始化時,架構會使用 IDevice::getCapabilities_1_3@1.3::Capabilities 結構包含所有資料類型 代表以向量表示,未放鬆的效能。

如要決定如何將運算作業分配給可用裝置, 運用這些能力來瞭解 都能有效率地執行為了提供這項資訊 驅動程式必須提供標準化效能數據 參考工作負載

為了判斷駕駛人回應 IDevice::getCapabilities_1_3,使用 NNAPI 基準應用程式測量 以及相應資料類型的效能MobileNet v1 和 v2,asr_float, 和 tts_float 模型則用於評估 32 位元效能 浮點值以及 MobileNet v1 和 v2 量化模型 建議用於 8 位元量化值若需更多資訊,請參閲 Android Machine Learning Test Suite

在 Android 9 以下版本中,Capabilities 結構包括驅動程式效能 僅適用於浮點和量化張量的資訊,不適用於 純量資料類型

在初始化過程中,該架構可能會查詢更多資訊, 使用 IDevice::getTypeIDevice::getVersionStringIDevice:getSupportedExtensions、 和 IDevice::getNumberOfCacheFilesNeeded

每次產品重新啟動時,這個架構會預期在產品重新啟動時, 」部分,根據指定的驅動程式隨時回報相同的值。否則應用程式 使用該驅動程式可能導致效能降低或行為不正確。

編譯

這個架構會決定當用戶端收到要求時,要使用的裝置 應用程式。在 Android 10 中,應用程式可以 並指定裝置 從架構中挑選的若需更多資訊,請參閲 探索和指派裝置

在模型編譯時,此架構會將模型傳送給每位候選者 駕駛人, IDevice::getSupportedOperations_1_3。 每個驅動程式都會傳回布林值陣列,表示 支援模型的所有作業駕駛人可判斷是否無法 支援特定作業,基於許多原因。例如:

  • 驅動程式不支援資料類型。
  • 驅動程式僅支援具有特定輸入參數的作業。適用對象 舉例來說,一台驅動程式可能支援 3x3 和 5x5,但不支援 7x7 卷積 作業。
  • 驅動程式受限於記憶體限制,無法處理大型驅動程式 圖表或輸入內容

在編譯期間,模型的輸入、輸出和內部運算元,如 描述 OperandLifeTime、 可以包含未知的維度或排名若需更多資訊,請參閲 輸出形狀

此架構會指示每個選取的驅動程式準備執行子集 呼叫模型 IDevice::prepareModel_1_3。 每個驅動程式都會編譯其子集。舉例來說,駕駛人可能會 產生程式碼或建立重新排序的權重副本由於 從模型編譯階段和模型編譯之間 執行請求,就不應執行要求,例如大量裝置記憶體區塊等資源 都會在編譯期間指派物件

成功時,駕駛會傳回 @1.3::IPreparedModel 控制代碼。如果驅動程式在準備其子集時傳回失敗代碼 架構會在 CPU 上執行整個模型

如要縮短應用程式啟動時用於編譯的時間,驅動程式可採取以下做法: 快取編譯成果詳情請參閱編譯 快取

執行

當應用程式要求架構執行要求時,架構呼叫 這個 IPreparedModel::executeSynchronously_1_3敬上 根據預設,HAL 方法會對事先準備的模型執行同步執行作業。 您也可以使用 execute_1_3敬上 方法, executeFenced 方法 (請參閱 Fenced 執行)。 或是使用 爆發執行

同步執行作業呼叫可提高效能並減少執行緒 相對負擔,因為控制項會傳回 應用程式程序。也就是說, 驅動程式不需要獨立的機制通知應用程式程序 執行完畢

使用非同步 execute_1_3 方法時,控制項會回到 應用程式程序,而驅動程式必須通知 系統執行容器的程序 @1.3::IExecutionCallback

傳遞至執行方法的 Request 參數會列出輸入和輸出內容 用於執行作業的運算元。儲存運算元資料的記憶體必須 使用資料列主要順序,且第一個維度疊代最慢,且不會 任何列結尾的邊框間距如要進一步瞭解運算元類型 看 運算元

對於 NN HAL 1.2 以上版本驅動程式,當系統要求 完成後,錯誤狀態、輸出形狀和 並傳回時間資訊 與架構相關在執行期間,模型的輸出或內部運算元 具有一或多個未知維度或排名不明。至少一項輸出內容 運算元具有未知的維度或排名,驅動程式必須傳回 而且大小可動態調整的輸出資訊

如果是 NN HAL 1.1 以下版本的驅動程式,只有在執行指令碼時才會傳回錯誤狀態 要求。輸入和輸出運算元的維度必須完整 指定的執行作業順利完成。內部運算元可以 具有一或多個未知維度,但必須指定排名。

針對橫跨多個驅動程式的使用者要求,這個架構負責 保留中繼記憶體,並排定對每個驅動程式的呼叫順序。

可在同一台 @1.3::IPreparedModel。 驅動程式可以平行執行要求,或將執行作業序列化。

但架構可要求駕駛人保留多個準備的模型。適用對象 例如,準備模型 m1、準備 m2、在 m1 上執行要求 r1、執行 m2 上的 r2,在 m1 上執行 r3,在 m2 執行 r4,發布版本 (如 清理) m1,然後發布 m2

為了避免首次執行速度緩慢,導致使用者體驗不佳 (例如: 例如第一個影格延遲),驅動程式應執行大部分的初始化作業 就能開始研究首次執行時的初始化限制應設為 早期執行任何會對系統健康狀態造成負面影響的動作,例如 預留大型暫存緩衝區或提高裝置的時鐘速率。 如果能同時準備數量有限的並行模型, 以便執行初始化作業

在 Android 10 以上版本中,如有多個 以使用相同的準備模型執行 是否能快速連續執行 爆發物件,用於在應用程式與驅動程式程序之間通訊。如要 資訊,請參閱 爆發執行和快速訊息佇列

為了快速連續執行多個執行作業,驅動程式 則可控制暫時緩衝區或增加時鐘速率。建立監控計時器 如果 2004 年之後仍沒有 固定一段時間

輸出形狀

一或多個輸出運算元不具備所有維度的要求 則驅動程式必須提供輸出形狀清單,其中包含 維度資訊。如要 如要瞭解維度的相關資訊,請參閱 OutputShape

如果輸出作業因輸出緩衝區不足而失敗,驅動程式必須 指出哪些輸出運算元的緩衝區空間不足 輸出形狀,且應盡可能回報多維度資訊 不明的維度

時間

在 Android 10 中,應用程式可以要求執行 是應用程式的時間 已指定在編譯程序期間使用的單一裝置。適用對象 詳細資料,請參閱 MeasureTiming敬上 和探索與指派裝置。 在這種情況下 NN HAL 1.2 驅動程式必須測量執行時間長度,或將 UINT64_MAX 回報給 表示無法使用持續時間)。駕駛人 時間。

駕駛人回報下列持續時間 (以微秒為單位) Timing敬上 結構:

  • 裝置上的執行時間:不包含在 驅動程式 (在主機處理器上執行)。
  • 驅動程式的執行時間:包含裝置的執行時間。

這些時間長度必須包含執行作業暫停的時間, 或因其他任務先佔情況而遭先佔行為 等待資源可供使用。

未要求驅動程式測量執行時間長度,或 發生執行錯誤,驅動程式必須回報為 UINT64_MAX。即使要求驅動程式評估執行作業 可改為回報 UINT64_MAX 次在裝置上的時間,以 或兩者皆是當駕駛人回報時,將兩個持續時間都回報為 UINT64_MAX,驅動程式的執行時間必須等於或超過 裝置。

圍欄執行作業

在 Android 11 中,NNAPI 可讓執行作業在 sync_fence 控制代碼的清單,並視需要傳回 sync_fence 物件。 會在執行完成後發出信號這樣您就能減少 序列模型和串流用途Fenced 執行也讓 與可發出訊號或等待 sync_fence。如要進一步瞭解 sync_fence,請參閱 同步處理架構

在圍欄執行作業中,架構會呼叫 IPreparedModel::executeFenced敬上 方法,對具有 等待的同步圍欄向量。如果非同步工作在下列時間前已完成 呼叫傳回,則可針對 sync_fence 傳回空白控制代碼。一個 您也必須傳回 IFencedExecutionCallback 物件,允許架構 查詢錯誤狀態和持續時間資訊。

執行完成後,以下兩項 時間值 如要查詢執行時間長度,您可以 IFencedExecutionCallback::getExecutionInfo

  • timingLaunched: 從呼叫 executeFencedexecuteFenced 的持續時間 信號傳回的 syncFence
  • timingFenced: 所有同步處理圍欄的持續時間 等待系統收到 executeFenced 信號 傳回的 syncFence

控制流程

搭載 Android 11 以上版本的裝置:NNAPI 包含兩個採用其他模型的控制流程作業 IFWHILE 做為引數,並依條件 (IF) 或重複執行 (WHILE)。適用對象 如要進一步瞭解如何實作這項功能,請參閱 控制流程

服務品質

在 Android 11 中,NNAPI 改善了 服務 (QoS),以便讓應用程式指出其相對優先順序 模型準備時間上限 完成執行作業所需的時間上限。適用對象 如需更多資訊,請參閱 服務品質

清除

當應用程式使用準備好的模型完成時,架構就會發布 參照 @1.3::IPreparedModel敬上 物件。如果 IPreparedModel 物件不再參照,則系統會針對 在建立 API 的驅動程式服務中會自動將其刪除。特定型號 目前可在驅動程式實作 破壞者。如果驅動程式服務希望 IPreparedModel 物件 不再需要該用戶端時自動刪除, IPreparedeModel 物件後方對 IPreparedModel 物件的任何參照 已透過 IPreparedModelCallback::notify_1_3

CPU 使用率

驅動程式應使用 CPU 來設定運算作業。駕駛不應 使用 CPU 執行圖形運算,因為這會幹擾 才能正確分配工作駕駛人應回報 無法處理與架構相關的部分 休息。

此架構為所有 NNAPI 作業提供 CPU 實作, 供應商定義作業。若需更多資訊,請參閲 供應商擴充功能

Android 10 推出的所有作業 (API 級別 29)。 只有參考 CPU 實作項目,可驗證 CTS 和 VTS 測試 ,行動裝置機器學習中的最佳化導入方式 建議採用 NNAPI CPU 實作。

公用函式

NNAPI 程式碼集包含可由驅動程式使用的公用程式函式 免費 Google Cloud 服務

frameworks/ml/nn/common/include/Utils.h敬上 檔案中含有各種公用程式函式,例如用於記錄和 在不同 NN HAL 版本間轉換。

  • VLogging:VLOG 是只出現在 Android LOG 的包裝函式巨集, 如果 debug.nn.vlog 已設定適當的標記,系統就會記錄訊息。 資源。 initVLogMask()敬上 必須先呼叫才能呼叫 VLOGVLOG_IS_ON 巨集的可能是 用於檢查目前是否已啟用 VLOG,這會啟用複雜的記錄功能 就會略過這個步驟屬性值必須是 下列其中一項:

    • 空字串,表示沒有任何記錄。
    • 1all 符記,表示所有記錄都已完成。
    • 標記清單,以空格、逗號或冒號分隔 指示要完成哪項記錄標記是 compilation cpuexedriverexecutionmanagermodel
  • compliantWithV1_*:如果 NN HAL 物件可以轉換,則傳回 true 至不同 HAL 版本的同類型,而不會遺失資訊適用對象 例如,在 V1_2::Model 上呼叫 compliantWithV1_0,會在發生以下情況時傳回 false: 這個模型包含 NN HAL 1.1 或 NN HAL 1.2 中導入的作業類型。

  • convertToV1_*:將 NN HAL 物件從一個版本轉換為另一個版本。 如果轉換導致資訊遺失 ( 表示,該類型的新版本無法完全代表值)。

  • 功能:nonExtensionOperandPerformanceupdate 函式可用於建構 Capabilities::operandPerformance敬上 ] 欄位。

  • 查詢類型屬性:isExtensionOperandTypeisExtensionOperationTypenonExtensionSizeOfDatanonExtensionOperandSizeOfDatanonExtensionOperandTypeIsScalartensorHasUnspecifiedDimensions

frameworks/ml/nn/common/include/ValidateHal.h敬上 檔案包含公用程式函式,可用於驗證 NN HAL 物件是否有效 指定的 Pod 版本

  • validate*:如果 NN HAL 物件有效,則傳回 true 指定的 Pod 版本原始設備製造商 (OEM) 類型和擴充功能類型 Google 搜尋會留下記錄舉例來說,如果系統傳回 falsevalidateModel 會傳回 false 模型包含一個運算,但參照的運算元索引沒有 或 HAL 版本不支援的作業。

frameworks/ml/nn/common/include/Tracing.h敬上 檔案包含用於簡化新增鍵的巨集 將「系統擷取」資訊傳送至類神經網路程式碼。 如需範例,請參閱NNTRACE_* 範例驅動程式

frameworks/ml/nn/common/include/GraphDump.h敬上 檔案包含一個公用程式函式,可用來轉儲 Model 的內容 表單,以便偵錯。

  • graphDump:以 Graphviz 撰寫模型的表示法 (.dot) 轉換為指定串流 (如有提供) 或 logcat (如果已設定) 。

驗證

如要測試 NNAPI 的實作結果,請使用 Android 架構VTS 能直接運動駕駛 (不使用 架構),而 CTS 會透過架構間接演練。這些 測試每個 API 方法,並確認 驅動程式正常運作,並提供符合精確度要求的結果。

NNAPI 的 CTS 和 VTS 精確度要求如下:

  • 浮點: Ab(預期 - 實際) <= atol + rtol * abs(預期);其中:

    • fp32 代表 atol = 1e-5f, rtol = 5.0f * 1.1920928955078125e-7
    • 對於 fp16, atol = rtol = 5.0f * 0.0009765625f
  • 量化:逐一關閉 (mobilenet_quantized 除外, 300%。

  • 布林值:完全比對

CTS 測試 NNAPI 的其中一種方法是產生固定的偽隨機圖 用來測試和比較每個驅動程式的執行結果 NNAPI 參考實作。對於搭載 NN HAL 1.2 以上版本的驅動程式,如果 結果不符合精確度條件,因此 CTS 會回報錯誤, 用於偵錯的失敗模型的 /data/local/tmp 規格檔案。 如要進一步瞭解精確度條件,請參閱 TestRandomGraph.cpp敬上 和 TestHarness.h

模糊測試

模糊測試的目的是找出當機、斷言、記憶體違規問題 或造成測試中程式碼的一般未定義行為。這些因素包括 非預期的輸入內容針對 NNAPI 模糊測試,Android 會根據 libFuzzer,也就是 能有效模糊化,因為他們根據先前測試案例的線範圍, 產生新的隨機輸入內容舉例來說,libFuzzer 偏好執行 開發新的程式碼大幅減少檢測作業所需的時間 有問題的程式碼

如要執行模糊測試來驗證驅動程式實作,請 frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp敬上 (在 Android 開放原始碼計畫中找到 libneuralnetworks_driver_fuzzer 測試公用程式),納入 取得您的驅動程式程式碼。如需進一步瞭解 NNAPI 模糊測試,請參閱 frameworks/ml/nn/runtime/test/android_fuzzing/README.md

安全性

應用程式程序直接與駕駛人的程序通訊, 驅動程式必須驗證所接收呼叫的引數。這項驗證 已經過 VTS 驗證。驗證碼位於 frameworks/ml/nn/common/include/ValidateHal.h

驅動程式也應確保應用程式不會幹擾 應用程式。

Android 機器學習測試套件

Android 機器學習測試套件 (MLTS) 是 NNAPI 基準,包含在 用於驗證供應商裝置實際模型準確率的 CTS 和 VTS。 基準測試會評估延遲時間和準確率,並比較以下字詞的結果: 並透過 TF Lite 以相同的模型和資料集為基礎確保駕駛的準確度沒有問題 優於 CPU 參考實作。

Android 平台開發人員也會使用 MLTS 來評估延遲和準確率 駕駛人。

您可以在 Android 開放原始碼計畫的兩項專案中找到 NNAPI 基準:

模型和資料集

NNAPI 基準採用下列模型和資料集。

  • MobileNetV1 浮點值,以及 u8 以不同大小的量化,針對 開放式圖片資料集 v4 的小型子集 (1500 張圖片)。
  • MobileNetV2 浮點值,並以不同大小的 u8 量化,針對 開放式圖片資料集 v4 的小型子集 (1500 張圖片)。
  • 針對文字轉語音功能,提供長短期記憶 (LSTM) 原聲模型 只會針對一小群 CMU 北極集的一小部分測試運作
  • 能自動語音辨識的 LSTM 原聲模型,根據 LibriSpeech 資料集的一部分。

詳情請參閱 platform/test/mlts/models

壓力測試

Android Machine Learning Test Suite 提供一系列當機測試, 確認駕駛人在過度使用或角落時是否仍可處理 客戶案例行為

所有當機測試都提供下列功能:

  • 懸掛偵測:如果 NNAPI 用戶端在測試期間停止運作, 測試失敗,並出現失敗原因 HANG 和測試套件 則接下來的測試
  • NNAPI 用戶端當機偵測:在用戶端當機和測試後繼續有效 失敗,並傳回失敗原因 CRASH
  • 駕駛人車禍偵測:測試能偵測駕駛人是否當機 ,這樣會導致 NNAPI 呼叫失敗。請注意,在 不會導致 NNAPI 故障且不會導致測試的驅動程式程序 資料。如要解決這類失敗情形,建議您執行 tail ,找出驅動程式相關錯誤或當機情形。
  • 指定所有可用的加速器:系統會針對所有可用加速器進行測試 可用驅動程式

所有當機測試都有以下四種結果:

  • SUCCESS:執行完成,未出現錯誤。
  • FAILURE:執行失敗。失敗原因通常是 測試模型,表示驅動程式無法編譯或執行 模型
  • HANG:測試程序沒有回應。
  • CRASH:測試程序異常終止。

如需壓力測試和當機測試完整清單,請參見 platform/test/mlts/benchmark/README.txt

使用 MLTS

如要使用 MLTS:

  1. 將目標裝置連結至工作站,並確認裝置: 管道 ADB。 匯出目標裝置「ANDROID_SERIAL」 環境變數。
  2. cd 附加至 Android 頂層來源目錄。

    source build/envsetup.sh
    lunch aosp_arm-userdebug # Or aosp_arm64-userdebug if available.
    ./test/mlts/benchmark/build_and_run_benchmark.sh
    

    基準執行結束後,結果會以 HTML 網頁的形式呈現 並傳遞至 xdg-open

詳情請參閱 platform/test/mlts/benchmark/README.txt

類神經網路 HAL 版本

本節說明 Android 和 Neural 中導入的異動內容 網路 HAL 版本。

Android 11

Android 11 導入了 NN HAL 1.3,其中包含 下方的重要變更

  • 支援 NNAPI 中已簽署的 8 位元量化功能。將 TENSOR_QUANT8_ASYMM_SIGNED敬上 運算元類型。搭載 NN HAL 1.3 且支援 NN HAL 1.3 的驅動程式 未簽署量化的作業也必須支援已簽署的變化版本 這些作業的成本執行已簽署和未簽署版本時 量化作業,駕駛必須產生相同結果,直到 偏移量為 128這項規定有五項例外狀況:CASTHASHTABLE_LOOKUPLSH_PROJECTIONPAD_V2QUANTIZED_16BIT_LSTMQUANTIZED_16BIT_LSTM 運算不支援已簽署的運算元和 其他四項運算支援已簽署量化,但不需要 就會產生相同的結果
  • 支援架構呼叫,前提是架構會呼叫 IPreparedModel::executeFenced敬上 方法,對具有 等待的同步圍欄向量。若需更多資訊,請參閲 Fenced 執行
  • 支援控制流程。新增 IFWHILE 運算,這些作業會採用 其他模型做為引數,並有條件執行 (IF) 或 重複 (WHILE)。若需更多資訊,請參閲 控制流程
  • 改善服務品質 (QoS),因為應用程式可根據 以及模型的優先等級 並指定模型的準備時間 執行作業。若需更多資訊,請參閲 服務品質
  • 支援為應用程式提供配置器介面的記憶體網域 驅動程式管理的緩衝區。這可以傳遞裝置原生的記憶 執行檢查, 在同一驅動程式上連續執行相同作業之間。如需更多資訊 請參閱記憶體網域一文。

Android 10

Android 10 導入了 NN HAL 1.2,其中包含 下方的重要變更

  • Capabilities 結構體包含所有資料類型,包括純量 並用向量進行非寬鬆的效能表現 而非已命名欄位
  • getVersionStringgetType 方法可讓架構 擷取裝置類型 (DeviceType) 和版本資訊。詳情請見 探索和指派裝置
  • 根據預設,系統會呼叫 executeSynchronously 方法來執行 同步執行。execute_1_2 方法會指示架構 以非同步的方式執行請參閱「執行」一節。
  • executeSynchronouslyexecute_1_2MeasureTiming 參數。 和 burst run 會指出驅動程式是否要測量執行作業 時間。結果會在 Timing 結構中回報。詳情請見 時機
  • 支援一或多個輸出運算元未知的執行作業 維度或排名請參閱「輸出形狀」一節。
  • 支援供應商擴充功能,這些擴充功能是由供應商定義的集合 以及資料類型駕駛人透過以下方式回報支援的擴充功能: IDevice::getSupportedExtensions 方法。詳情請見 供應商擴充功能
  • 可讓爆發物件透過以下方式控管一組爆發執行作業: 快速訊息佇列 (FMQ),用來在應用程式與驅動程式之間通訊 進而減少延遲時間詳情請見 爆發執行和快速訊息佇列
  • 支援 AHardwareBuffer,以便驅動程式執行執行作業 而非複製資料詳情請見 AHardwareBuffer
  • 改善對編譯構件快取的支援功能,以縮短時間 應用程式啟動時會進行編譯。詳情請見 編譯快取

Android 10 導入了以下運算元類型和 作業。

  • 運算元類型

    • ANEURALNETWORKS_BOOL
    • ANEURALNETWORKS_FLOAT16
    • ANEURALNETWORKS_TENSOR_BOOL8
    • ANEURALNETWORKS_TENSOR_FLOAT16
    • ANEURALNETWORKS_TENSOR_QUANT16_ASYMM
    • ANEURALNETWORKS_TENSOR_QUANT16_SYMM
    • ANEURALNETWORKS_TENSOR_QUANT8_SYMM
    • ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL
  • 作業

    • ANEURALNETWORKS_ABS
    • ANEURALNETWORKS_ARGMAX
    • ANEURALNETWORKS_ARGMIN
    • ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM
    • ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM
    • ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN
    • ANEURALNETWORKS_BOX_WITH_NMS_LIMIT
    • ANEURALNETWORKS_CAST
    • ANEURALNETWORKS_CHANNEL_SHUFFLE
    • ANEURALNETWORKS_DETECTION_POSTPROCESSING
    • ANEURALNETWORKS_EQUAL
    • ANEURALNETWORKS_EXP
    • ANEURALNETWORKS_EXPAND_DIMS
    • ANEURALNETWORKS_GATHER
    • ANEURALNETWORKS_GENERATE_PROPOSALS
    • ANEURALNETWORKS_GREATER
    • ANEURALNETWORKS_GREATER_EQUAL
    • ANEURALNETWORKS_GROUPED_CONV_2D
    • ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT
    • ANEURALNETWORKS_INSTANCE_NORMALIZATION
    • ANEURALNETWORKS_LESS
    • ANEURALNETWORKS_LESS_EQUAL
    • ANEURALNETWORKS_LOG
    • ANEURALNETWORKS_LOGICAL_AND
    • ANEURALNETWORKS_LOGICAL_NOT
    • ANEURALNETWORKS_LOGICAL_OR
    • ANEURALNETWORKS_LOG_SOFTMAX
    • ANEURALNETWORKS_MAXIMUM
    • ANEURALNETWORKS_MINIMUM
    • ANEURALNETWORKS_NEG
    • ANEURALNETWORKS_NOT_EQUAL
    • ANEURALNETWORKS_PAD_V2
    • ANEURALNETWORKS_POW
    • ANEURALNETWORKS_PRELU
    • ANEURALNETWORKS_QUANTIZE
    • ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
    • ANEURALNETWORKS_RANDOM_MULTINOMIAL
    • ANEURALNETWORKS_REDUCE_ALL
    • ANEURALNETWORKS_REDUCE_ANY
    • ANEURALNETWORKS_REDUCE_MAX
    • ANEURALNETWORKS_REDUCE_MIN
    • ANEURALNETWORKS_REDUCE_PROD
    • ANEURALNETWORKS_REDUCE_SUM
    • ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR
    • ANEURALNETWORKS_ROI_ALIGN
    • ANEURALNETWORKS_ROI_POOLING
    • ANEURALNETWORKS_RSQRT
    • ANEURALNETWORKS_SELECT
    • ANEURALNETWORKS_SIN
    • ANEURALNETWORKS_SLICE
    • ANEURALNETWORKS_SPLIT
    • ANEURALNETWORKS_SQRT
    • ANEURALNETWORKS_TILE
    • ANEURALNETWORKS_TOPK_V2
    • ANEURALNETWORKS_TRANSPOSE_CONV_2D
    • ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM
    • ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN

Android 10 針對許多現有的 作業。更新項目 主要與下列項目相關:

  • 支援 NCHW 記憶體配置
  • 支援 softmax 中排名與 4 不同的張量 正規化作業
  • 支援關聯卷積
  • 支援以下來源中的混合量化輸入: ANEURALNETWORKS_CONCATENATION

下方清單顯示修改 Android 10。全螢幕 變更的詳情 OperationCode

  • ANEURALNETWORKS_ADD
  • ANEURALNETWORKS_AVERAGE_POOL_2D
  • ANEURALNETWORKS_BATCH_TO_SPACE_ND
  • ANEURALNETWORKS_CONCATENATION
  • ANEURALNETWORKS_CONV_2D
  • ANEURALNETWORKS_DEPTHWISE_CONV_2D
  • ANEURALNETWORKS_DEPTH_TO_SPACE
  • ANEURALNETWORKS_DEQUANTIZE
  • ANEURALNETWORKS_DIV
  • ANEURALNETWORKS_FLOOR
  • ANEURALNETWORKS_FULLY_CONNECTED
  • ANEURALNETWORKS_L2_NORMALIZATION
  • ANEURALNETWORKS_L2_POOL_2D
  • ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION
  • ANEURALNETWORKS_LOGISTIC
  • ANEURALNETWORKS_LSH_PROJECTION
  • ANEURALNETWORKS_LSTM
  • ANEURALNETWORKS_MAX_POOL_2D
  • ANEURALNETWORKS_MEAN
  • ANEURALNETWORKS_MUL
  • ANEURALNETWORKS_PAD
  • ANEURALNETWORKS_RELU
  • ANEURALNETWORKS_RELU1
  • ANEURALNETWORKS_RELU6
  • ANEURALNETWORKS_RESHAPE
  • ANEURALNETWORKS_RESIZE_BILINEAR
  • ANEURALNETWORKS_RNN
  • ANEURALNETWORKS_ROI_ALIGN
  • ANEURALNETWORKS_SOFTMAX
  • ANEURALNETWORKS_SPACE_TO_BATCH_ND
  • ANEURALNETWORKS_SPACE_TO_DEPTH
  • ANEURALNETWORKS_SQUEEZE
  • ANEURALNETWORKS_STRIDED_SLICE
  • ANEURALNETWORKS_SUB
  • ANEURALNETWORKS_SVDF
  • ANEURALNETWORKS_TANH
  • ANEURALNETWORKS_TRANSPOSE

Android 9

NN HAL 1.1 是在 Android 9 中導入,且包含以下值得注意的項目 並輸入變更內容

  • IDevice::prepareModel_1_1 包含 ExecutionPreference 參數。駕駛人可以用這個方式調整準備作業 應用程式偏好節省電力,或將執行模型 快速連續通話
  • 已新增 9 項作業:BATCH_TO_SPACE_NDDIVMEANPADSPACE_TO_BATCH_NDSQUEEZESTRIDED_SLICESUBTRANSPOSE
  • 應用程式可以指定是否可以執行 32 位元浮點運算 使用 16 位元浮點範圍和/或精確度 Model.relaxComputationFloat32toFloat16trueCapabilities 結構體包含 relaxedFloat32toFloat16Performance 欄位,因此 駕駛人可向架構回報壓力

Android 8.1

初始類神經網路 HAL (1.0) 是在 Android 8.1 中發布。如要 資訊,請參閱 /neuralnetworks/1.0/