1. 程式人生 > >Deeplearning4j-使用Cuda 9.1和 Cudnn7.1 加速模型訓練

Deeplearning4j-使用Cuda 9.1和 Cudnn7.1 加速模型訓練

Deeplearning4j-使用Cuda 9.1和 Cudnn7.1 加速模型訓練


一、解除安裝Cuda (可選)

我本機原本安裝的版本為 Cuda 8.0,因為Dl4j更新版本之後,支援 Cuda 9.1,因此需要先對原有軟體進行解除安裝。

我電腦的作業系統為win 10,在你安裝完成以後,會有如下圖所示的安裝軟體:

cuda安裝包.png-94.8kB

除了圖中用紅框標註的這三個,全部解除安裝。

即可完成cuda的解除安裝。

二、安裝Cuda。

下載地址:

連結:https://pan.baidu.com/s/14yvW1C3M32TZyeN-kRXEyw 密碼:z9k6

為了保證結果的可復現。 Cuda和Cudnn的安裝地址已經放在上面了。

在安裝的時候,需要注意使用自定義安裝

cuda安裝導引.png-155.9kB

在安裝的時候需要勾掉以下屬性

去掉選項.png-149.3kB

因為你不是 cuda 開發人員,只是使用的使用者,因此不需要以下三項:

  1. Documentation: cuda開發文件
  2. Samples: cuda示例
  3. VS Studio Integration: VS開發cuda的整合外掛。

也不安裝Driver components,是害怕和你現有的軟體衝突,導致顯示器顯示不正常。

在無限下一步之後安裝完畢,在 CMD 視窗中使用nvcc -V

命令檢視 cuda 版本。

cuda版本.png-20kB

三、使用Cuda9.1加速 dl4j

dl4j使用gpu後端加速非常容易,只需要切換pom檔案為:

<dependency>
    <groupId>org.nd4j</groupId>
    <artifactId>nd4j-cuda-9.1-platform</artifactId>
    <version>${nd4j.version}</version>
</dependency>

即可成功執行程式。

在執行程式之後可以看到如下的提示語:

o.n.l.f.Nd4jBackend - Loaded [JCublasBackend] backend
o.n.n.NativeOpsHolder - Number of threads used for NativeOps: 32
o.n.n.Nd4jBlas - Number of threads used for BLAS: 0
o.n.l.a.o.e.DefaultOpExecutioner - Backend used: [CUDA]; OS: [Windows 10]
o.n.l.a.o.e.DefaultOpExecutioner - Cores: [8]; Memory: [3.5GB];
o.n.l.a.o.e.DefaultOpExecutioner - Blas vendor: [CUBLAS]
o.n.l.j.o.e.CudaExecutioner - Device opName: [GeForce GTX 1050 Ti]; CC: [6.1]; Total/free memory: [4294967296]
o.d.n.m.MultiLayerNetwork - Starting MultiLayerNetwork with WorkspaceModes set to [training: SINGLE; inference: SEPARATE]

但是同樣可以看到如下的報錯:

o.d.n.l.c.ConvolutionLayer - cuDNN not found: use cuDNN for better GPU performance by including the deeplearning4j-cuda module. For more information, please refer to: https://deeplearning4j.org/cudnn
java.lang.ClassNotFoundException: org.deeplearning4j.nn.layers.convolution.CudnnConvolutionHelper
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_152]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_152]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[na:1.8.0_152]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_152]
    at java.lang.Class.forName0(Native Method) ~[na:1.8.0_152]

這是因為還沒有安裝 Cudnn 引起的報錯,但是這並不影響程式的正常執行。

四、安裝Cudnn並且使用Cudnn加速

4.1 安裝 Cudnn7.1

安裝Cudnn非常簡單,只需要開啟對應的壓縮包:

cudnn壓縮包.png-64.2kB

將圖中所有的檔案解壓縮到Cuda的安裝目錄即可:

Cuda安裝目錄.png-61.2kB

4.2 使用Cudnn加速程式

使用Cudnn對dl4j程式進行加速,還需要新增以下依賴到pom檔案中:

<dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-cuda-9.1</artifactId>
    <version>${dl4j.version}</version>
</dependency>

再次執行程式,就不會發現報錯。

cudnn加速無報錯.png-57.5kB

五、總結

程式執行示例為:https://github.com/sjsdfg/dl4j-tutorials/blob/master/src/main/java/lesson6/LenetMnistExample.java

即使用 Lenet 網路進行手寫數字識別,總共對全部資料集,訓練1個epoch

機器執行配置為:16G RAM, I7-7700HQ, 1050TI 4G視訊記憶體

cpu cuda9.1 cuda9.1+cudnn7.1
2.586min 0.754min 0.457min

如果使用更好的機器,則會有更明顯的加速效果。


更多文件可以檢視 https://github.com/sjsdfg/deeplearning4j-issues
你的star是我持續分享的動力

完整程式碼和pom檔案可檢視: https://github.com/sjsdfg/dl4j-tutorials