Windows 10 + Visual Studio 2017 + CUDA 10 环境下编译 pytorch 1.0

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)

编译步骤

  1. 找到一个路径,执行
git clone -b v1.0.0 https://github.com/pytorch/pytorch.git 

这里你当然也可以选择自己需要的版本。

  1. 在目录中,执行
git submodule update --init --recursive

这一步是循环更新需要的第三方库,它们在third_party中。

  1. 打开cmd,执行以下命令(你可以把它们保存在一个bat中,一起执行)
set "VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build"
set CMAKE_GENERATOR=Visual Studio 15 2017 Win64
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
  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)

  1. 对于安装了CUDA的读者,你需要更改tools/setup_helpers/cuda.py第10行

WINDOWS_HOME = glob.glob(C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.*)

将glob里的搜索地址改为你CUDA的安装路径
6.在cmd中,输入

扫描二维码关注公众号,回复: 5511766 查看本文章
python setup.py build

即可进行编译
输入

python setup.py install

会在编译好之后,将编好的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

总结

最后,祝您身体健康,再见!

猜你喜欢

转载自blog.csdn.net/h8832077/article/details/85646816