Eclipse Deeplearning4J (DL4J) 是包含深度學習工具和庫的框架,專為充分利用 Java? 虛擬機 (JVM) 而編寫。它具有為 Java 和 Scala 語言編寫的分布式深度學習庫,并且內置集成了 Apache Hadoop 和 Spark。Deeplearning4j有助于彌合使用 Python 語言的數據科學家和使用 Java 語言的企業開發人員之間的鴻溝,從而簡化了在企業大數據應用程序中部署深度學習的過程。
DL4J 可在分布式 CPU 和圖形處理單元 (GPU) 上運行。社區版本和企業版本均已面市。
Eclipse Deeplearning4J 框架
Skymind
Skymind 是總部位于舊金山的人工智能 (AI) 初創企業,由 DL4J 首席開發人員 Adam Gibson 聯合他人一起創辦。Skymind 銷售面向 DL4J 生態系統的商業支持服務和培訓服務。此外,該公司的 Skymind Intelligence Layer 平臺可填補 Python 應用程序與企業 JVM 之間的空白。
IBM? PowerAI 團隊已將 DL4J 移植到 PowerAI 上。隨后,該團隊與 Skymind 協作,將 DL4J 融入 IBM POWER8? 架構,包括使用 NVLink 提供 NVIDIA? GPU 支持。
DL4J 是由來自舊金山和東京的一群開源貢獻者協作開發的。2014 年末,他們將其發布為 Apache 2.0 許可證下的開源框架。主要是作為一種平臺來使用,通過這種平臺來部署商用深度學習算法。創立于 2014 年的 Skymind 是 DL4J 的商業支持機構。
2017 年 10 月,Skymind 加入了 Eclipse 基金會,并且將 DL4J 貢獻給開源 Java Enterprise Edition 庫生態系統。有了 Eclipse 基金會的支持,人們能夠更加肯定 DL4J 項目必將得到妥善監管,同時也確保為商業開發提供合適的開源許可證。Java AI 開發人員已將 DL4J 視為成熟且安全的框架,因此,這些新建立的伙伴關系將吸引企業在商業領域使用 DL4J。
企業大數據應用程序中的深度學習
數據科學家使用 Python 來開發深度學習算法。相比之下,企業大數據應用程序傾向于使用 Java 平臺。因此,為填補缺口并在大數據應用程序中部署深度學習,DL4J 的開發人員必須對若干解決方案進行創新。
Keras應用程序編程接口 (API) 規范的采用,有助于從其他框架(例如,TensorFlow、Caffe、Microsoft? Cognitive Toolkit (CNTK) 和 Theano)導入深度學習模型。Keras API 可通過 JVM 語言(例如,Java、Scala、Clojure 乃至 Kotlin)來訪問,從而使深度學習模型可供 Java 開發人員使用。
不熟悉 Keras?閱讀教程:“Keras 入門”
在 JVM 上運行深度學習高性能計算負載時,將面臨著諸多挑戰。內存管理和垃圾回收等 Java 功能可能會影響性能,使用較大內存時尤為如此。DL4J 繞過了其中部分限制。
Deeplearning4j 框架中的庫
Deeplearing4j既指的是框架軟件分發版,又指的是框架中的特定庫。DL4J 框架包含以下庫:
DL4J 庫
ND4J 庫
Datavec 庫
Libnd4j 庫
RL4J 庫
Jumpy 庫
Arbiter 庫
Deeplearning4j 庫
Deeplearning4j 庫實際上是神經網絡平臺。它包含各種工具,用于配置神經網絡和構建計算圖形。開發人員使用此庫來構建由數據管道和 Spark 集成的神經網絡模型。
除核心庫外,DL4J 庫還包含許多其他庫,用于實現特定功能:
deeplearning4j-core。deeplearning4j-core 庫包含了運行 DL4J 所需的全部功能,例如,用戶界面 (UI)。它還具有構建神經網絡所需的各種工具和實用程序。
deeplearning4j-cuda。deeplearning4j-cuda 庫支持 DL4J 在使用 NVIDIA CUDA? 深度神經網絡庫 (CuDNN) 的 GPU 上運行。此庫支持標準化以及卷積神經網絡和遞歸神經網絡。
deeplearning4j-graph。deeplearning4j-graph 庫執行圖形處理來構建 DeepWalk 中所使用的圖形矢量化模型,DeepWalk 是一個無監督學習算法,用于學習圖形中每個頂點的矢量表示法。您可以使用這些學到的矢量表示法對圖形中的相似數據進行分類、分群或搜索。
deeplearning4j-modelimport。deeplearning4j-modelimport 庫從 Keras 導入模型,Keras 又可從 Theano、TensorFlow、Caffe 和 CNTK 導入模型。這是關鍵的 DL4J 庫,支持將模型從其他框架導入 DL4J。
deeplearning4j-nlp-parent。deeplearning4j-nlp-parent 庫支持將 DL4J 與外部自然語言處理 (NLP) 插件和工具相集成。此接口遵循非結構化信息管理架構 (UIMA),后者最初是由 IBM 開發的用于內容分析的開放標準。此庫還包含適用于英語、中文、日語和韓語的文本分析。
deeplearning4j-nlp。deeplearning4j-nlp 庫是 NLP 工具(如 Word2Vec 和 Doc2Vec)的集合。Word2Vec 是一個用于處理文本的雙層神經網絡。Word2Vec 對于在“矢量空間”中對相似詞語矢量進行分組十分有用。Doc2Vec 是 Word2Vec 的一個擴展,用于學習將標簽與詞語相關聯,而不是將不同詞語關聯起來。
deeplearning4j-nn。deeplearning4j-nn 庫是核心庫的精簡版本,減少了依賴關系。它使用構建器模式來設置超參數,同時配置多層網絡,支持使用設計模式在 Java 中構造神經網絡。
deeplearning4j-scaleout。deeplearning4j-scaleout 庫是各種庫的集合,適用于配備 Amazon Web Services 服務器以及封裝 Spark 并行代碼,以便在多達 96 核的常規服務器(而不是 Spark)上運行。此庫還有助于在 Spark 以及包含 Kafka 和其他視頻分析流選項的 Spark 上配置 NLP。
deeplearning4j-ui-parent。deeplearning4j-ui-parent 庫實際上是 DL4J UI,包含神經網絡訓練啟發式方法和可視化工具。
ND4J 庫
N-Dimensional Arrays for Java (ND4J) 是科學計算C++庫,類似于 Python 的 NumPy。它支持 JVM 上運行的多種語言,例如,Java、Scala、Clojure 和 Kotlin。您可以使用 ND4J 來執行線性代數或操作矩陣。ND4J 可與 Hadoop 或 Spark 進行集成并由此實現擴展,同時可在分布式 CPU 和 GPU 上運行。
Java AI 開發人員可以使用 ND4J 在 Java 中定義N維數組,這使其能夠在 JVM 上執行張量運算。ND4J 使用 JVM 外部的“堆外”內存來存儲張量。JVM 僅保存指向此外部內存的指針,Java 程序通過 Java 本機接口 (JNI) 將這些指針傳遞至 ND4JC++后端代碼。此結構配合來自本機代碼(例如,基本線性代數子程序 (BLAS) 和 CUDA 庫)的張量使用時,可提供更佳的性能。ND4J 與 Spark 集成,并且可使用不同后端在 CPU 或 GPU 上運行。Scala API ND4S 有助于實現這種集成。在稍后部分中討論 DL4J 如何使用硬件加速時,將再次探討 ND4J 架構。
Datavec 庫
DataVec 庫的主要功能是將數據格式化為張量。通過這種預處理,神經網絡能夠訪問和使用數據。DataVec 執行抽取、轉換和加載 (ETL) 操作,同時還支持通過一系列數據轉換連接到各種數據源和輸出張量。DL4J 支持眾多數據類型,包括圖像、逗號分隔值 (CSV)、屬性關聯文件格式 (ARFF) 和純文本。DL4J 還支持 Apache Camel 集成。
libnd4j 庫
Libnd4j 是一個純C++庫,支持 ND4J 訪問屬于 BLAS 和 Intel Math Kernel Library 的線性代數函數。它與 JavaCPP 開源庫緊密結合運行。JavaCPP 不屬于 DL4J 框架項目,但支持此代碼的開發人員是相同的。
Jumpy 庫
Jumpy 是一個 Python 庫,支持 NumPy 無需移動數據即可使用 ND4J 庫。此庫實現了針對 NumPy 和Pyjnius的包裝器。MLlib 或 PySpark 開發人員可以使用 Jumpy,以便在 JVM 上使用 NumPy 數組。
Arbiter 庫
DL4J 使用此工具來自動調優神經網絡。可使用諸如網格搜索、隨機搜索和貝葉斯方法之類的各種方法來優化具有許多超參數的復雜模型,從而提高性能。
Deeplearning4J 的優勢
DL4J 具有眾多優勢。讓我們來了解一下其中的三大優勢。
Python 可與 Java、Scala、Clojure 和 Kotlin 實現互操作性。
Python 為數據科學家所廣泛采用,而大數據編程人員則在 Hadoop 和 Spark 上使用 Java 或 Scala 來開展工作。DL4J 填補了之間的鴻溝,開發人員因而能夠在 Python 與 JVM 語言(例如,Java、Scala、Clojure 和 Kotlin)之間遷移。
通過使用Keras API,DL4J 支持從其他框架(例如,TensorFlow、Caffe、Theano 和 CNTK)遷移深度學習模型。甚至有人建議將 DL4J 作為 Keras 官方貢獻的后端之一。
分布式處理
DL4J 可在最新分布式計算平臺(例如,Hadoop 和 Spark)上運行,并且可使用分布式 CPU 或 GPU 實現加速。通過使用多個 GPU,DL4J 可以實現與 Caffe 相媲美的性能。DL4J 也可以在許多云計算平臺(包括 IBM Cloud)上運行。
并行處理
DL4J 包含單線程選項和分布式多線程選項。這種減少迭代次數的方法可在集群中并行訓練多個神經網絡。因此,DL4J 非常適合使用微服務架構來設計應用程序。
Eclipse DL4J 應用程序
DL4J 具有各種應用程序,從圖形處理到 NLP,皆涵蓋在內。借助內置數據預處理和矢量化工具,DL4J 能夠異常靈活地處理許多不同的數據格式。Keras API 還使其更便于使用來自其他框架的預先訓練模型。
典型的 DL4J 應用程序包括:
安全性應用程序,例如欺詐檢測和網絡入侵檢測
在客戶關系管理、廣告推送和客戶忠誠度及維系方面使用的推薦系統
面向物聯網和其他流數據的回歸和預測分析
傳統面部識別和圖像識別應用程序
語音搜索和語音轉錄應用程序
針對硬件或工業應用程序的預防性診斷和異常檢測
支持 DL4J 的平臺
理論上,任何支持 JVM 且運行 Java V1.7 或更高版本的 64 位平臺均可支持 DL4J。DL4J 使用 ND4J 來訪問受支持的 GPU。ND4J 則依賴于其他軟件,例如 CUDA 和 CuDNN。
實際上,商用 DL4J 需要生產級 Java 平臺。IBM Open Platform for Apache Hadoop and Apache Spark 已在 PowerAI 上完成了 DL4J 框架認證。Cloudera 也已在其 Enterprise Data Hub CDH5 上完成了 DL4J 認證,Hortonworks 同樣也在其 Data Platform\HDP2.4 上完成了認證。
有關安裝 ND4J 和其他必備軟件的更多信息,請查看ND4J 入門文檔。
從源代碼構建 DL4J
在其他框架中,使用預先構建的二進制文件來安裝框架有時更為方便。但對于 DL4J,最好是從源代碼構建和安裝 DL4J,以便確保正確處理多種依賴關系。安裝為多步驟的復雜過程,適合生產級安裝。Apache Maven V3.3.9 或更高版本可對構建和依賴關系進行管理。對于集成開發環境,可以使用 IntelliJ IDEA 或 Eclipse。
專家建議使用“uber-jar”方法來構建 DL4J 應用程序。此方法支持使用 .rpm 或 .deb 包在“uber-jar”內部分發依賴關系,并將部署與開發隔離開來。
有關使用 DL4J 構建應用程序的更多信息,請閱讀快速入門指南。
Power 架構上的 DL4J
DL4J 團隊官方在 DL4J 存儲庫中為 IBM Power? 維護 DL4J。Maven 負責管理構建和安裝過程。ND4J 具有兩個用于 Power 架構的本機平臺后端:第一個在 POWER8 CPU 上運行,第二個則使用 NVLink 互連在 NVIDIA GPU 上運行。
ND4J CPU 后端nd4j-native-platform運行 OpenBLAS 庫的優化版本。為實現加速,ND4J CPU 后端在 POWER8 處理器上使用矢量/標量浮點單元。
ND4J GPU 后端nd4j-cuda-8.0-platform可在使用 NVLink 接口與 POWER8 處理器互連的 NVIDIA GPU 上運行 CUDA 或 cuDNN。
有關在 Power 架構上安裝 DL4J 的更多信息,請訪問https://deeplearning4j.org/power。
注:在 POWER8 平臺上,首選的 Java 級別為 V8。為 POWER8 而調優的唯一 Java 7 發行版為 Java 7.1 SR1 或更高版本。
DL4J 如何使用硬件加速?
DL4J 分別依靠 ND4J 和 ND4S 這兩種特定于平臺的后端來使用硬件加速。ND4J 和 ND4S Java 與 Scala API 用于封裝 BLAS 庫,例如,Jblas、Netlib-blas 和 Jcublas。
ND4J 具有兩種級別的運算。高級運算包括卷積、快速傅立葉變換、各種損失函數、變換(例如,sigmoid 變換或 tanh 變換)和約簡。通過 ND4J API 調用時,BLAS 會實施低級運算。BLAS 運算包括矢量加法、標量乘法、點乘、線性組合和矩陣乘法。
ND4J 在特定于平臺架構的后端上運行。CPU 后端帶有nd4j-native前綴,GPU 后端帶有nd4j-cuda-
最后,ND4J 實現特定于 BLAS 的數據緩沖區,用于存儲 BLAS 處理的數組和原始數據字節。根據后端,此存儲抽象層具有不同的實現。JVM 與后端之間通過 JNI 進行通信。
結束語
Deeplearning4j 是深度學習工具和庫框架,專為充分利用 Java 虛擬機而編寫。DL4J 框架旨在用于在生產級服務器上部署商用深度學習算法。它具有為 Java 和 Scala 而編寫的分布式深度學習庫,并且內置了與 Hadoop 和 Spark 的集成。DL4J 可在分布式 CPU 和 GPU 上運行,提供了社區版本和企業版本。Skymind 作為其商業支持機構,為企業版本提供專業的服務和支持。
-
JAVA
+關注
關注
19文章
2967瀏覽量
104752 -
python
+關注
關注
56文章
4797瀏覽量
84689 -
深度學習
+關注
關注
73文章
5503瀏覽量
121162
原文標題:Deeplearning4j 入門
文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論