本頁概述如何實作 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::getType
、
IDevice::getVersionString
、
IDevice: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
: 從呼叫executeFenced
到executeFenced
的持續時間 信號傳回的syncFence
。timingFenced
: 所有同步處理圍欄的持續時間 等待系統收到executeFenced
信號 傳回的syncFence
。
控制流程
搭載 Android 11 以上版本的裝置:NNAPI
包含兩個採用其他模型的控制流程作業 IF
和 WHILE
做為引數,並依條件 (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
是只出現在 AndroidLOG
的包裝函式巨集, 如果debug.nn.vlog
已設定適當的標記,系統就會記錄訊息。 資源。initVLogMask()
敬上 必須先呼叫才能呼叫VLOG
。VLOG_IS_ON
巨集的可能是 用於檢查目前是否已啟用VLOG
,這會啟用複雜的記錄功能 就會略過這個步驟屬性值必須是 下列其中一項:- 空字串,表示沒有任何記錄。
1
或all
符記,表示所有記錄都已完成。- 標記清單,以空格、逗號或冒號分隔
指示要完成哪項記錄標記是
compilation
cpuexe
、driver
、execution
、manager
和model
。
compliantWithV1_*
:如果 NN HAL 物件可以轉換,則傳回true
至不同 HAL 版本的同類型,而不會遺失資訊適用對象 例如,在V1_2::Model
上呼叫compliantWithV1_0
,會在發生以下情況時傳回false
: 這個模型包含 NN HAL 1.1 或 NN HAL 1.2 中導入的作業類型。convertToV1_*
:將 NN HAL 物件從一個版本轉換為另一個版本。 如果轉換導致資訊遺失 ( 表示,該類型的新版本無法完全代表值)。功能:
nonExtensionOperandPerformance
和update
函式可用於建構Capabilities::operandPerformance
敬上 ] 欄位。查詢類型屬性:
isExtensionOperandType
、isExtensionOperationType
、nonExtensionSizeOfData
、nonExtensionOperandSizeOfData
、nonExtensionOperandTypeIsScalar
、tensorHasUnspecifiedDimensions
。
frameworks/ml/nn/common/include/ValidateHal.h
敬上
檔案包含公用程式函式,可用於驗證 NN HAL 物件是否有效
指定的 Pod 版本
validate*
:如果 NN HAL 物件有效,則傳回true
指定的 Pod 版本原始設備製造商 (OEM) 類型和擴充功能類型 Google 搜尋會留下記錄舉例來說,如果系統傳回false
,validateModel
會傳回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 基準:
platform/test/mlts/benchmark
敬上 (基準應用程式)platform/test/mlts/models
敬上 (模型和資料集)
模型和資料集
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:
- 將目標裝置連結至工作站,並確認裝置:
管道
ADB。
匯出目標裝置「
ANDROID_SERIAL
」 環境變數。 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這項規定有五項例外狀況:CAST
、HASHTABLE_LOOKUP
、LSH_PROJECTION
、PAD_V2
和QUANTIZED_16BIT_LSTM
。QUANTIZED_16BIT_LSTM
運算不支援已簽署的運算元和 其他四項運算支援已簽署量化,但不需要 就會產生相同的結果 - 支援架構呼叫,前提是架構會呼叫
IPreparedModel::executeFenced
敬上 方法,對具有 等待的同步圍欄向量。若需更多資訊,請參閲 Fenced 執行。 - 支援控制流程。新增
IF
和WHILE
運算,這些作業會採用 其他模型做為引數,並有條件執行 (IF
) 或 重複 (WHILE
)。若需更多資訊,請參閲 控制流程: - 改善服務品質 (QoS),因為應用程式可根據 以及模型的優先等級 並指定模型的準備時間 執行作業。若需更多資訊,請參閲 服務品質。
- 支援為應用程式提供配置器介面的記憶體網域 驅動程式管理的緩衝區。這可以傳遞裝置原生的記憶 執行檢查, 在同一驅動程式上連續執行相同作業之間。如需更多資訊 請參閱記憶體網域一文。
Android 10
Android 10 導入了 NN HAL 1.2,其中包含 下方的重要變更
Capabilities
結構體包含所有資料類型,包括純量 並用向量進行非寬鬆的效能表現 而非已命名欄位getVersionString
和getType
方法可讓架構 擷取裝置類型 (DeviceType
) 和版本資訊。詳情請見 探索和指派裝置。- 根據預設,系統會呼叫
executeSynchronously
方法來執行 同步執行。execute_1_2
方法會指示架構 以非同步的方式執行請參閱「執行」一節。 executeSynchronously
、execute_1_2
的MeasureTiming
參數。 和 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_ND
、DIV
、MEAN
、PAD
、SPACE_TO_BATCH_ND
、SQUEEZE
、STRIDED_SLICE
、SUB
、TRANSPOSE
。 - 應用程式可以指定是否可以執行 32 位元浮點運算
使用 16 位元浮點範圍和/或精確度
Model.relaxComputationFloat32toFloat16
到true
。Capabilities
結構體包含relaxedFloat32toFloat16Performance
欄位,因此 駕駛人可向架構回報壓力
Android 8.1
初始類神經網路 HAL (1.0) 是在 Android 8.1 中發布。如要
資訊,請參閱
/neuralnetworks/1.0/
。