原文: https://blog.csdn.net/h8832077/article/details/85646816
pytorch 1.0 一個月之前發布了。pytorch其實筆者很早就接觸過,那時候驚嘆於它的簡潔、動態及良好的社區支持。但是那時候,pytorch在c++上的支持並不好,工業界很難用,基本上只屬於一種比較好的算法驗證框架。
但是,pytorch 1.0 的發布終結了這一現況,現在,它有了良好的c++前向預測支持,再加上它本身不遜於tensorflow的運行速度,python式的開發邏輯(這點非常棒),支持onnx格式。。。除了沒有tensorflow那樣多的功能函數(這點也造成了tensorflow的冗長),實在是很難找到別的缺點。
為什么要自己編譯pytorch
pytorch的官方網站上,其實有編好的pytorch各種版本(windows/linux/Mac環境下,python/c++兩種語言,從這也看出pytorch對windows的用戶還是挺友好的),但是目前c++版本好像只支持release模式。如果你是一個初學者,可以選擇跳過本文直接去官網下;但如果你是一個研究者,需要變動源碼的contributor,或和我一樣,需要Debug版本和Cpu版本,或者特定CUDA版本的pytorch,你也可以選擇這條更為艱辛但收獲更多的路。
需要准備
1.python(最好是anaconda)
2.CUDA \ CUDNN(如果你需要GPU版本)
3.VS 2017最新版
4.GIT工具
5.cmake工具
6.intel MKL(如果沒有的話,pytorch默認選擇用eigen)
編譯步驟
- 找到一個路徑,執行
git clone -b v1.0.0 https://github.com/pytorch/pytorch.git
這里你當然也可以選擇自己需要的版本。
- 在目錄中,執行
git submodule update --init --recursive
這一步是循環更新需要的第三方庫,它們在third_party中。
- 打開cmd,執行以下命令(你可以把它們保存在一個bat中,一起執行)
set "VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build"
set CMAKE_GENERATOR=Visual Studio 15 2017
set DISTUTILS_USE_SDK=1
set USE_OPENCV=1
set USE_CUDA=1
set CUDNN_INCLUDE_DIR="D:\lib\CUDA\v10.0\include"
call "%VS150COMNTOOLS%\vcvarsall.bat" x64
這里要確認VS150COMNTOOLS和CUDNN_INCLUDE_DIR中的目錄是否存在,不在的話你需要根據自己的情況變更一下。沒有opencv的讀者不需要加
set USE_OPENCV=1。
如果你需要編譯debug模式,請加上
DEBUG=1
- 對於安裝MKL,並且想在pytorch中應用的讀者,你需要更改cmake/Modules/FindMKL.cmake 第72行
SET(INTEL_COMPILER_DIR “C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows”)
為你自己的mkl路徑(一般是/intel_mkl/compilers_and_libraries_2019.1.144/windows)
如果你沒有安裝NINJA或者提示任何有關錯誤,請關閉ninja編譯使用vs,具體加上下面這句
set USE_NINJA=OFF
- 對於安裝了CUDA的讀者,你需要更改tools/setup_helpers/cuda.py第10行
WINDOWS_HOME = glob.glob(C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.*)
將glob里的搜索地址改為你CUDA的安裝路徑
6.在cmd中,輸入
python setup.py build
即可進行編譯
輸入
python setup.py install
如果需要wheel文件,可以輸入
python setup.py bdist_wheel
會在編譯好之后,將編好的pytorch復制到你的默認python環境中,可以直接使用
中文系統,編譯信息中有亂碼
找到torch/utils/collect_env.py中第 43~44行
output = output.decode("ascii")
err = err.decode("ascii")
改為
output = output.decode("gb2312")
err = err.decode("gb2312")
參考
如果你在windows上編pytorch碰到一些問題,可以follow一個大神
https://github.com/peterjc123/pytorch-scripts
總結
最后,祝您身體健康,再見!