Deeplearning4j-使用Cuda 9.1和 Cudnn7.1 加速模型訓練
Deeplearning4j-使用Cuda 9.1和 Cudnn7.1 加速模型訓練
一、解除安裝Cuda (可選)
我本機原本安裝的版本為 Cuda 8.0
,因為Dl4j更新版本之後,支援 Cuda 9.1
,因此需要先對原有軟體進行解除安裝。
我電腦的作業系統為win 10
,在你安裝完成以後,會有如下圖所示的安裝軟體:
除了圖中用紅框標註的這三個,全部解除安裝。
即可完成cuda的解除安裝。
二、安裝Cuda。
下載地址:
連結:https://pan.baidu.com/s/14yvW1C3M32TZyeN-kRXEyw 密碼:z9k6
為了保證結果的可復現。 Cuda和Cudnn的安裝地址已經放在上面了。
在安裝的時候,需要注意使用自定義安裝
,
在安裝的時候需要勾掉以下屬性
因為你不是 cuda 開發人員,只是使用的使用者,因此不需要以下三項:
- Documentation: cuda開發文件
- Samples: cuda示例
- VS Studio Integration: VS開發cuda的整合外掛。
也不安裝Driver components
,是害怕和你現有的軟體衝突,導致顯示器顯示不正常。
在無限下一步之後安裝完畢,在 CMD 視窗中使用nvcc -V
三、使用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非常簡單,只需要開啟對應的壓縮包:
將圖中所有的檔案解壓縮到Cuda
的安裝目錄即可:
4.2 使用Cudnn加速程式
使用Cudnn對dl4j程式進行加速,還需要新增以下依賴到pom檔案中:
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-cuda-9.1</artifactId>
<version>${dl4j.version}</version>
</dependency>
再次執行程式,就不會發現報錯。
五、總結
程式執行示例為: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