1. 程式人生 > >DL4J中文文件/配置/CuDNN

DL4J中文文件/配置/CuDNN

與cuDNN一起使用DL4J

DL4J支援CUDA,但可以進一步通過cuDNN加速。大多數2D 卷積神經網路層(如ConvolutionLayer、SubsamplingLayer等),以及LSTM和BatchNormalization層都支援cuDNN。

為了可以使用cuDNN,你首先要切換ND4J到CUDA後端。這可以通過在pom.xml檔案中nd4j-cuda-8.0nd4j-cuda-9.0, 或 nd4j-cuda-9.2 替換nd4j-native來完成。理想的情況下在nd4j-cuda-8.0-platformnd4j-cuda-9.0-platform, 或 nd4j-cuda-9.2-platform上新增依賴項以自動包括來自所有平臺的二進位制檔案:

<dependency>
	<groupId>org.nd4j</groupId>
	<artifactId>nd4j-cuda-8.0-platform</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

<dependency>
	<groupId>org.nd4j</groupId>
	<artifactId>nd4j-cuda-9.0-platform</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

<dependency>
	<groupId>org.nd4j</groupId>
	<artifactId>nd4j-cuda-9.2-platform</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

為了讓DL4J 載入 cuDNN,我們惟一要做的是新增對deeplearning4j-cuda-8.0deeplearning4j-cuda-9.0, 或 deeplearning4j-cuda-9.2的依賴, 例如:

<dependency>
	<groupId>org.deeplearning4j</groupId>
	<artifactId>deeplearning4j-cuda-8.0</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

<dependency>
	<groupId>org.deeplearning4j</groupId>
	<artifactId>deeplearning4j-cuda-9.0</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

<dependency>
	<groupId>org.deeplearning4j</groupId>
	<artifactId>deeplearning4j-cuda-9.2</artifactId>
	<version>1.0.0-beta2</version>
</dependency>

cuDNN的實際庫沒有捆綁,因此請確保從NVIDIA下載並安裝適合你的平臺的包

注意cuDNN和CUDA有多個組合被支援。當前,DL4J的支援下面的組合:

CUDA Version cuDNN Version
8.0 6.0
9.0 7.0
9.2 7.1

要安裝,只需將庫提取到本地庫使用的系統路徑中找到的目錄即可。最簡單的方法是將它放在預設目錄中的CUDA之外的其他庫中。 (/usr/local/cuda/lib64/ on Linux, /usr/local/cuda/lib/ on Mac OS X, and C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\, 或 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin\ on Windows).

或者,對於CUDA 9.2,cuDNN與用於CUDA的JavaCPP Presets 的“redist”包捆綁在一起。在同意許可之後,我們可以新增以下依賴項,來取代安裝CUDA和cuDNN:

 <dependency>
     <groupId>org.bytedeco.javacpp-presets</groupId>
     <artifactId>cuda</artifactId>
     <version>9.2-7.1-1.4.2</version>
     <classifier>linux-x86_64-redist</classifier>
 </dependency>
 <dependency>
     <groupId>org.bytedeco.javacpp-presets</groupId>
     <artifactId>cuda</artifactId>
     <version>9.2-7.1-1.4.2</version>
     <classifier>linux-ppc64le-redist</classifier>
 </dependency>
 <dependency>
     <groupId>org.bytedeco.javacpp-presets</groupId>
     <artifactId>cuda</artifactId>
     <version>9.2-7.1-1.4.2</version>
     <classifier>macosx-x86_64-redist</classifier>
 </dependency>
 <dependency>
     <groupId>org.bytedeco.javacpp-presets</groupId>
     <artifactId>cuda</artifactId>
     <version>9.2-7.1-1.4.2</version>
     <classifier>windows-x86_64-redist</classifier>
 </dependency>

還要注意,預設情況下,DL4j將使用根據cuDNN可用的最快演算法,但是記憶體使用可能溢位,導致奇怪的啟動錯誤。當這種情況發生時,嘗試通過使用通過網路配置設定的NO_WORKSPACE模式來減少記憶體使用, 替換預設的ConvolutionLayer.AlgoMode.PREFER_FASTEST,例如:

    // 對於整個網路
    new NeuralNetConfiguration.Builder()
            .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE)
            // ...
    // 或對於單個層
    new ConvolutionLayer.Builder(h, w)
            .cudnnAlgoMode(ConvolutionLayer.AlgoMode.NO_WORKSPACE)
            // ...

翻譯:風一樣的男子

有任何問題請聯絡微信

如果您覺得我的文章給了您幫助,請為我買一杯飲料吧!以下是我的支付寶,意思一下我將非常感激!