0%

error: ‘AT_CHECK’ was not declared in this scope

今天安装复现某个包含CUDA依赖的老cpp项目的时候编译报错 error: ‘AT_CHECK’ was not declared in this scope

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
...无用信息
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_cuda.cpp:4:23: error: ‘AT_CHECK’ was not declared in this scope
#define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
^
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_cuda.cpp:9:3: note: in expansion of macro ‘CHECK_CUDA’
CHECK_CUDA(dets);
^~~~~~~~~~
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_cuda.cpp:4:23: note: suggested alternative: ‘DCHECK’
#define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
^
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_cuda.cpp:9:3: note: in expansion of macro ‘CHECK_CUDA’
CHECK_CUDA(dets);
^~~~~~~~~~
[2/2] /usr/local/cuda/bin/nvcc -DWITH_CUDA -I/root/miniconda3/lib/python3.8/site-packages/torch/include -I/root/miniconda3/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/root/miniconda3/lib/python3.8/site-packages/torch/include/TH -I/root/miniconda3/lib/python3.8/site-packages/torch/include/THC -I/usr/local/cuda/include -I/root/miniconda3/include/python3.8 -c -c /root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_kernel.cu -o /root/autodl-tmp/OrientedRepPoints_DOTA/build/temp.linux-x86_64-3.8/mmdet/ops/nms/src/nms_kernel.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''"'"'-fPIC'"'"'' -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=nms_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_75,code=sm_75 -std=c++14
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_kernel.cu: In function ‘at::Tensor nms_cuda(at::Tensor, float)’:
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_kernel.cu:77:62: warning: ‘at::DeprecatedTypeProperties& at::Tensor::type() const’ is deprecated: Tensor.type() is deprecated. Instead use Tensor.options(), which in many cases (e.g. in a constructor) is a drop-in replacement. If you were using data from type(), that is now available from Tensor itself, so instead of tensor.type().scalar_type(), use tensor.scalar_type() instead and instead of tensor.type().backend() use tensor.device(). [-Wdeprecated-declarations]
AT_ASSERTM(boxes.type().is_cuda(), "boxes must be a CUDA tensor");
^
/root/miniconda3/lib/python3.8/site-packages/torch/include/ATen/core/TensorBody.h:277:1: note: declared here
DeprecatedTypeProperties & type() const {
^ ~~
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_kernel.cu:86:50: warning: ‘T* at::Tensor::data() const [with T = float]’ is deprecated: Tensor.data<T>() is deprecated. Please use Tensor.data_ptr<T>() instead. [-Wdeprecated-declarations]
scalar_t* boxes_dev = boxes_sorted.data<scalar_t>();
^
/root/miniconda3/lib/python3.8/site-packages/torch/include/ATen/core/TensorBody.h:363:1: note: declared here
T * data() const {
^ ~~
/root/autodl-tmp/OrientedRepPoints_DOTA/mmdet/ops/nms/src/nms_kernel.cu:117:46: warning: ‘T* at::Tensor::data() const [with T = long int]’ is deprecated: Tensor.data<T>() is deprecated. Please use Tensor.data_ptr<T>() instead. [-Wdeprecated-declarations]
int64_t* keep_out = keep.data<int64_t>();
^
/root/miniconda3/lib/python3.8/site-packages/torch/include/ATen/core/TensorBody.h:363:1: note: declared here
T * data() const {
^ ~~
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1516, in _run_ninja_build
subprocess.run(
File "/root/miniconda3/lib/python3.8/subprocess.py", line 516, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "setup.py", line 194, in <module>
setup(
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/__init__.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/root/miniconda3/lib/python3.8/distutils/core.py", line 148, in setup
dist.run_commands()
File "/root/miniconda3/lib/python3.8/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/root/miniconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/install.py", line 67, in run
self.do_egg_install()
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/install.py", line 109, in do_egg_install
self.run_command('bdist_egg')
File "/root/miniconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/root/miniconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/bdist_egg.py", line 164, in run
cmd = self.call_command('install_lib', warn_dir=0)
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/bdist_egg.py", line 150, in call_command
self.run_command(cmdname)
File "/root/miniconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/root/miniconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/install_lib.py", line 11, in run
self.build()
File "/root/miniconda3/lib/python3.8/distutils/command/install_lib.py", line 107, in build
self.run_command('build_ext')
File "/root/miniconda3/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/root/miniconda3/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 79, in run
_build_ext.run(self)
File "/root/miniconda3/lib/python3.8/distutils/command/build_ext.py", line 340, in run
self.build_extensions()
File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 653, in build_extensions
build_ext.build_extensions(self)
File "/root/miniconda3/lib/python3.8/distutils/command/build_ext.py", line 449, in build_extensions
self._build_extensions_serial()
File "/root/miniconda3/lib/python3.8/distutils/command/build_ext.py", line 474, in _build_extensions_serial
self.build_extension(ext)
File "/root/miniconda3/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 196, in build_extension
_build_ext.build_extension(self, ext)
File "/root/miniconda3/lib/python3.8/site-packages/Cython/Distutils/build_ext.py", line 135, in build_extension
super(build_ext, self).build_extension(ext)
File "/root/miniconda3/lib/python3.8/distutils/command/build_ext.py", line 528, in build_extension
objects = self.compiler.compile(sources,
File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 473, in unix_wrap_ninja_compile
_write_ninja_file_and_compile_objects(
File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1233, in _write_ninja_file_and_compile_objects
_run_ninja_build(
File "/root/miniconda3/lib/python3.8/site-packages/torch/utils/cpp_extension.py", line 1538, in _run_ninja_build
raise RuntimeError(message) from e
RuntimeError: Error compiling objects for extension

首先看error,报错为 error: ‘AT_CHECK’ was not declared in this scope
观察法得将 AT_CHECK 替换为 TORCH_CHECK就可以解决问题((((

解决方法

由以上结果得bash指令

1
find . -type f -name "*.cpp" -exec sed -i 's/AT_CHECK/TORCH_CHECK/g' {} \;

运行后重新编译

1
python setup.py build_ext --inplace

编译通过,轻松秒杀

错误原因

该错误源于 PyTorchCUDA 代码中已弃用且不兼容的宏和 API 使用。(人话,代码放过期了

在现代 PyTorch 版本中 AT_CHECK 已被替换为 TORCH_CHECK,并且一些张量方法(如).data<T>() 已被弃用。
所以说只要把 AT_CHECK 统一换成 TORCH_CHECK 就可以解决这个问题了

Welcome to my other publishing channels