由于用的计算卡比较老,官方下载的pytorch gpu版本不支持显卡,在使用gpu部分时显示
no kernel image is available for execution on the device
就起了自己编译pytorch包的念头,中间遇到几个坑,记录一下
0,安装nvidia 驱动,cudatool,anaconda, vs2017就不说了,网上到处有
1,github下载中断问题
git clone --recursive https://github.com/pytorch/pytorch cd pytorch
github上clone pytorch总是失败,在网上找到如下设置,保证足够缓存
git config --global http.postbuffer 1048576000
git config --global http.lowspeedlimit 0
git config --global http.lowspeedtime 999
git clone --recursive https://github.com/pytorch/pytorch #建议早上6点到8点下载,否则网不好会中断
cd pytorch
#这一步是从v1.3.1上创建自己的分支
git checkout -b mybuild v1.3.1
# 更新分支对应的模块,我一开始忘了这一步,于是各种错误:(
git submodule sync
git submodule update --init --recursive
2,安装anaconda,并安装相应的包
conda install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing
3,设置编译器等环境变量
一开始我是按照官网说明设置的,使用visual studio编译,需要设置
set USE_NINJA=0 才能编译
但发现如果用visual studio编译时,编译cu文件是单线程,奇慢无比而且会莫名奇妙的锁死不动,几个小时都编译不完,后来发现第二步中conda安装了ninja,尝试用Ninja编译,并行速度简直上了天。
我所用的编译设置如下
#set CMAKE_GENERATOR=Visual Studio 15 2017
#set USE_NINJA=0
set CMAKE_GENERATOR=Ninja #大小写必须一致
set TORCH_PACKAGE_NAME=pytorch #安装时包的名字
set CMAKE_GENERATOR_TOOLSET_VERSION=14.16 #这个vs2017最新版本
set DISTUTILS_USE_SDK=1
for /f "usebackq tokens=*" %i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -version [15^,16^) -products * -latest -property installationPath`) do call "%i\VC\Auxiliary\Build\vcvarsall.bat" x64 -vcvars_ver=%CMAKE_GENERATOR_TOOLSET_VERSION%
set CUDAHOSTCXX=%VCToolsInstallDir%\bin\Hostx86\x64\cl.exe
set PYTORCH_BUILD_VERSION=1.3.1 #版本号
set PYTORCH_BUILD_NUMBER=001
python setup.py install
4,磁盘空间
编译这玩意儿需要31G的磁盘空间,:(
5,编译成功安装完成后
cuda install cudatoolkit=10.1
conda install torchvision -c pytorch --no-deps # --no-deps是为了防止自动下载安装官网pytorch
6,测试
import torch
x=torch.rand(5,3)
device = torch.device("cuda")
y=torch.ones_like(x,device=device)
x=x.to(device)
z=x+y
print(z)
:-) :-) :-) :-)