Windows下的PyTorch编译踩坑
问题1:
pytorch\aten\src\ATen\native\quantized\cpu\qembeddingbag_unpack.cpp(131): error C2039: "Fused8BitRowwiseQuantizedSBFloatToFloat": 不是 "fbgemm" 的成员
类似的,“XXX不是XXX的成员”的问题很有可能由相同的原因引起。
我这里的问题是git checkout
的时候忘记更新依赖版本了。理论上的正确操作是git checkout
之后再git submodule update --init --recursive
操作。如果不小心编译了一半,修改了submodule里的文件的话,可以先git submodule deinit --all -f
清除所有文件后再重新初始化submodule。这个重新初始化的过程不消耗流量,数据已经在第一次更新submodule的时候保存到本地了。
问题2:在编译torch/csrc/stub.c
时,遇到
VC\Tools\MSVC\14.29.30133\include\cstdlib(19): error C2061: syntax error: identifier 'noexcept'
这个是由于编译器把C++头文件cstdlib
当成C源代码来编译了,导致C++专有语法noexcept
认不出来报错。我这里产生问题的原因是Python的pyconfig.h
中不分青红皂白地写了#include <cmath>
这句话,相当于默认当成C++头文件使用了,因而在编译stub.c
的时候引入了C++语法导致报错。
我的解决方法:把
#include <cmath>
改成
#ifdef __cplusplus
#include <cmath>
#else
#include <math.h>
#endif
然后就是test模块里的一堆bug= =
比如说什么模块导错了、数据类型不对一类的,见啥改啥就行了