Windows 10 + Visual Studio 2017 + CUDA 10 环境下编译 pytorch 1.0
原文: 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
总结
最后,祝您身体健康,再见!
每一个不曾起舞的日子,都是对生命的辜负。
But it is the same with man as with the tree. The more he seeks to rise into the height and light, the more vigorously do his roots struggle earthward, downward, into the dark, the deep - into evil.
其实人跟树是一样的,越是向往高处的阳光,它的根就越要伸向黑暗的地底。----尼采