原文: 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 Studio2017ProfessionalVCAuxiliaryBuild"
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:libCUDAv10.0include"
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
总结
最后,祝您身体健康,再见!