Win10+RTX2080深度學習環境搭建:tensorflow、mxnet、pytorch、caffe

GPU爲RTX2080,系統爲更新到最新版本的Win10python

準備工做

  • 安裝VS2015,到官網地址older-download下載安裝
  • 安裝Matlab,筆者安裝的是Matlab2017b
  • 安裝Anaconda3-4.4.0-Windows-x86_64.exe(到anaconda archive下載),筆者曾下載並安裝了最新版的Anaconda3-2018.12-Windows-x86_64.exe,在使用conda安裝包時發生SSLError錯誤,據github issue所說是最新版win10和最新版anaconda有衝突,4.4版本沒有這個問題,4.4對應的python版本爲3.6
  • 安裝CUDA 10.0,到cuda-toolkit-archive根據本身的平臺下載安裝,安裝好後能夠看到環境變量多了CUDA_PATH、CUDA_PATH_10_0等,以及path中也多了bin和libnvvp路徑
  • 安裝CUDNN 7.4,到cudnn-archive根據CUDA版本下載安裝,下載下來後將其中的全部文件(bin、include、lib文件夾)拷貝到cuda的目錄,合併對應的文件夾

設置conda國內鏡像源

爲conda設置國內鏡像源,默認國外的鏡像源會比較慢。git

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes

這時目錄"C:\Users\用戶名"下的.condarc文件內容變爲github

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
show_channel_urls: true

若是有default能夠刪除。apache

conda 深度學習環境

# 建立conda環境
conda create -n py36DL python=3.6
# 更新pip
pip install --upgrade pip
# 若報錯
easy_install pip
# 激活環境
activate py36DL
# 安裝ipython,後面用於測試庫是否安裝成功
conda install ipython

tensorflow、mxnet、pytorch安裝

注意:下面的全部安裝都是在激活了的py36DL環境中進行的windows

tensorflow

筆者經過官網、經過conda、經過豆瓣鏡像源安裝tensorflow在import時都會失敗,報「ImportError: DLL load failed: 找不到指定的模塊」的錯誤,最終成功的安裝方式以下:bash

fo40225/tensorflow-windows-wheel找到對應的版本下載whl,筆者下載的是tensorflow_gpu-1.12.0-cp36-cp36m-win_amd64.whl的avx2版本(有兩個壓縮包,解壓出whl文件),若是安裝不成功的話能夠試試sse2版本,這裏神奇的地方是該whl文件應該是在cuda100cudnn73avx2下編譯的,可是個人環境是cuda100和cudnn74,居然也是能夠安裝成功的,筆者久經磨難,喜極而泣app

下載下來後經過pip安裝函數

# 切換到whl目錄
pip install tensorflow_gpu-1.12.0-cp36-cp36m-win_amd64.whl

# 進入ipython驗證
import tensorflow as tf
tf.VERSION
# '1.12.0'

mxnet

mxnet安裝比較簡單,這裏直接經過豆瓣鏡像源用pip安裝。學習

pip install -i https://pypi.doubanio.com/simple/ mxnet-cu100

# 進入ipython驗證
import mxnet
mxnet.__version__
# '1.3.1'

mxnet的官網顯示支持到cu92,實際已經有了cu100版本。

pytorch

pytorch的安裝也很簡單,在官網,選擇pip、Python3.六、CUDA10.0,顯示

pip3 install https://download.pytorch.org/whl/cu100/torch-1.0.0-cp36-cp36m-win_amd64.whl
pip3 install torchvision

這裏先把連接https://download.pytorch.org/whl/cu100/torch-1.0.0-cp36-cp36m-win_amd64.whl拷貝到IDM下載whl文件,而後離線安裝

# 切換到whl路徑
pip install torch-1.0.0-cp36-cp36m-win_amd64.whl
pip install torchvision

#進入ipython驗證
import torch
torch.__version
# '1.0.0'

Caffe安裝

筆者使用的是happynear/caffe-windows版本的caffe,下載解壓,同時下載第三方庫拷貝到項目windows/thirdparty/文件夾,Copy .\windows\CommonSettings.props.example to .\windows\CommonSettings.props,打開Caffe.sln,根據github上的README修改配置文件.\windows\CommonSettings.props,編譯成功後再參考README配置python和matlab,注意使用時須要將thirdparty/bin目錄添加到path環境變量,不然運行時會報錯

修改環境變量後以管理員運行CMD,運行

echo %path%

當即生效,不用重啓系統。

配置文件修改

主要修改項以下:

  • UseCuDNN:true
  • CudaVersion:10.0
  • PythonSupport:true
  • MatlabSupport:true
  • CudaArchitecture:compute_50,sm_50;compute_52,sm_52;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70;compute_75,sm_75;
  • CuDnnPath:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDNN-100。需替換爲你的cudnn7.4的路徑
  • PythonDir:D:\Anaconda3\envs\py36DL。替換爲你的python路徑
  • MatlabDir:D:\Program Files\MATLAB\R2017b。替換爲你的matlab路徑

根據wiki,RTX2080的Compute capability (version)爲7.5,目前只有CUDA10.0支持7.5,所以CudaArchitecture中若是加入compute_75,sm_75;的話須要CUDA爲10.0,不然會報錯。若是裝的是CUDA9.2,在不加compute_75,sm_75;的狀況下也是能夠編譯成功的。

編譯時常見錯誤

  • 將警告視爲錯誤
    在報錯的工程上右鍵,選擇 屬性→C/C++→將警告視爲錯誤,改成否,生成項目。要是某個項目文件報這個錯的話,也能夠在相應文件上右鍵,進行一樣操做。

  • The Windows SDK version 10.0.10586.0 was not found
    在報錯的工程上右鍵,選擇 重定SDK版本目標,選擇 目標平臺版本(默認就一項 8.1),點擊肯定,生成項目。

運行時錯誤

  • Check failed: error == cudaSuccess (74 vs. 0) misaligned address
    根據cuDNN bug in Caffe with "group" in conv layer (misaligned address) #5729,在 cudnn_conv_layer.cpp 文件void CuDNNConvolutionLayer<Dtype>::Reshape函數size_t total_max_workspace = ...代碼前加入對齊代碼以下

    this is a bug of Caffe, I solved it by modifying cudnn_conv_layer.cpp and aligning the address to be multiples of 32.
    You can insert tow lines of code before size_t total_max_workspace = ... as follow:

size_t m=32;
max_workspace = (max_workspace + m-1) / m * m; //align address to be multiples of m

BTW, I think there is another bug, these lines should be put in else block:

for (int g = 0; g < (this->group_ * CUDNN_STREAMS_PER_GROUP); g++) {
  workspace[g] = reinterpret_cast<char *>(workspaceData)+g*max_workspace;
}

參考

相關文章
相關標籤/搜索