簡體   English   中英

Nd4j (Deeplearning4J) 是否太大而無法在 android 移動應用程序中實際使用?

[英]Is Nd4j (Deeplearning4J) too large to actually use in an android mobile app?

經過幾周的開發,我終於在 Android 應用程序中創建了一個 AI,該應用程序使用 Nd4j 庫提供的矩陣操作 API 工作。 按照此文檔,這些已通過 gradle 導入到項目中。

不幸的是,我發現 Nd4j 依賴於一些致命的大型運行時庫,尤其是libnd4jcpu.so ,每個 abi 平台大約150mb ,導致 apk 大小超過半 GB。 您可以在 Google Play 商店中找到的平均應用大小約為 11.5MB。

Google Play 上 Android App Bundles 的壓縮下載大小限制為 150MB

如何減少 Dl4j 依賴項的大小的問題在之前的 StackOverflow 問題中提出。 但是,無法提供任何解決方案,只是對您支持的平台更具選擇性 同樣,對於每個 abi 平台,這仍然意味着最小 APK 大小至少為 ~200MB。

人們不得不想知道,為什么 Deeplearning4J 社區首先努力支持 Android 移動開發,以及為什么運行時庫依賴項大小這一不可避免的問題沒有像文檔中提到的那樣多。

我肯定在這里遺漏了一些東西嗎?

“Nd4j”實際上是庫 + 自包含的 c++ 庫編譯為每個平台的本機二進制文件,捆綁到 jar 以實現快速性能。 您通常希望在構建中去除這些依賴項。 你可以在這里看到如何做到這一點:

https://github.com/bytedeco/javacpp-presets/wiki/Reducing-the-Number-of-Dependencies

Nd4j 依賴 javacpp 進行打包。 簡而言之,如果您使用 nd4j-native-platform 或者您可以只使用 nd4j-native 依賴項(無分類器),您可以在 maven/gradle 構建中指定 -Dplatform=android-x86_64 或 android-arm64 ) + 適用於您平台的分類器。

編輯我的回復有點抱歉,今天早上我沒有時間完整閱讀您的問題。 讓我逐點回應。

首先:“人們不得不想知道為什么 Deeplearning4J 社區首先努力支持 Android 移動開發......”

  1. 首先,公平點,我想為此努力。 在這里與我們合作時請保持開放的態度。 一般來說,人們有特定的要求,並根據他們的具體情況與我們合作。 有時我們通過#2 幫助他們最小化二進制大小。

  2. 關於這一點:“尤其是 libnd4jcpu.so,每個 abi 平台大約 150mb”,因為通常人們會使用不同的應用程序。 誠然,我們更關注操作覆蓋率而不是二進制大小。 我們有一個可以提供幫助的縮小器: https://github.com/eclipse/deeplearning4j/tree/master/libnd4j/minifier如果您可以更具體一點,我很樂意為您的用例提供幫助,但這不是“請自行閱讀有關它的文檔和 go”的經驗。

我肯定在這里遺漏了一些東西嗎?

如果任何人有機會閱讀這篇文章,都會遇到與我相同的情況:我已經切換到新的org.jetbrains.kotlinx Multik library ,它提供了我需要 nd4j 的相同基本 NDArray 操作。 在使用應用程序對其進行測試后,它幾乎沒有增加任何大小,但減少了功能,例如,到目前為止,您還不能使用 Multik 反轉矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM