Error while running simple pytorch code in the C++ front end

Hi guys,

I am new to PyTorch or any other neural network package. I was running the example program of printing out a torch tensor in the installation page. I am able to successfully build it. But, while running the ‘make’ command, I am getting error. The details are given below.

I have installed (copied and unzipped) Pytorch C++ frontend in Centos 6.9. It has GNU C++ compiler 4.4.7, and I use a separately installed CMake of version 3.15.0.

Then, I wrote the code ‘first_example.cpp’

#include <torch/torch.h>
#include

int main() {
torch::Tensor tensor = torch::rand({2, 3});
std::cout << tensor << std::endl;
}

I compiled it using the CMakeLists.txt:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-app)

find_package(Torch REQUIRED)

add_executable(first_example first_example.cpp)
target_link_libraries(example-app “${TORCH_LIBRARIES}”)
set_property(TARGET example-app PROPERTY CXX_STANDARD 11)

with command:

/full/path/to/cmake -DCMAKE_PREFIX_PATH=full/path/to/libtorch …

This compiled OK.

– The C compiler identification is GNU 4.4.7
– The CXX compiler identification is GNU 4.4.7
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Detecting C compile features
– Detecting C compile features - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Detecting CXX compile features
– Detecting CXX compile features - done
– Looking for pthread.h
– Looking for pthread.h - found
– Performing Test CMAKE_HAVE_LIBC_PTHREAD
– Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
– Looking for pthread_create in pthreads
– Looking for pthread_create in pthreads - not found
– Looking for pthread_create in pthread
– Looking for pthread_create in pthread - found
– Found Threads: TRUE
– Found torch: /export/apps/pytorch/libtorch/lib/libtorch.so
– Configuring done
– Generating done
– Build files have been written to: /export/apps/pytorch/libtorch/examples_dir/build

Now, when I run the ‘make’ command, I get the following error.

In file included from /export/apps/pytorch/libtorch/include/c10/core/Backend.h:5,
from /export/apps/pytorch/libtorch/include/c10/core/Layout.h:3,
from /export/apps/pytorch/libtorch/include/ATen/core/Tensor.h:4,
from /export/apps/pytorch/libtorch/include/ATen/Tensor.h:2,
from /export/apps/pytorch/libtorch/include/ATen/Context.h:4,
from /export/apps/pytorch/libtorch/include/ATen/ATen.h:5,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/all.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/torch.h:3,
from /export/apps/pytorch/libtorch/examples_dir/first_example.cpp:1:
/export/apps/pytorch/libtorch/include/c10/core/TensorTypeIdRegistration.h:16:18: error: atomic: No such file or directory
In file included from /export/apps/pytorch/libtorch/include/c10/core/Device.h:3,
from /export/apps/pytorch/libtorch/include/c10/core/Allocator.h:6,
from /export/apps/pytorch/libtorch/include/ATen/ATen.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/all.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/torch.h:3,
from /export/apps/pytorch/libtorch/examples_dir/first_example.cpp:1:
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:34: error: ‘constexpr’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:35: error: ‘constexpr’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:36: error: ‘constexpr’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:37: error: ‘constexpr’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:38: error: ‘constexpr’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:41: error: expected constructor, destructor, or type conversion before ‘int’
/export/apps/pytorch/libtorch/include/c10/core/DeviceType.h:44: error: ‘COMPILE_TIME_MAX_DEVICE_TYPES’ was not declared in this scope
In file included from /export/apps/pytorch/libtorch/include/c10/core/Device.h:5,
from /export/apps/pytorch/libtorch/include/c10/core/Allocator.h:6,
from /export/apps/pytorch/libtorch/include/ATen/ATen.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/all.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/torch.h:3,
from /export/apps/pytorch/libtorch/examples_dir/first_example.cpp:1:
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:71: error: expected ‘;’ before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:75: error: expected ‘;’ before ‘const’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:75: error: expected ‘;’ before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:80: error: expected ‘;’ before ‘const’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:80: error: expected ‘;’ before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:83: error: expected ‘;’ before ‘}’ token
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:28: error: looser throw specifier for ‘virtual c10::Error::~Error()’
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/…/…/…/…/include/c++/4.4.7/exception:63: error: overriding ‘virtual std::exception::~exception() throw ()’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:49: error: ‘nullptr’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:57: error: ‘nullptr’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:86: error: expected nested-name-specifier before ‘handler_t’
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:86: error: using-declaration for non-member at class scope
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:86: error: expected ‘;’ before ‘=’ token
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:86: error: expected unqualified-id before ‘=’ token
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:95: error: ‘handler_t’ has not been declared
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:102: error: ‘handler_t’ does not name a type
/export/apps/pytorch/libtorch/include/c10/util/Exception.h:109: error: ‘c10::Error::Error’ names constructor
In file included from /export/apps/pytorch/libtorch/include/c10/core/Allocator.h:6,
from /export/apps/pytorch/libtorch/include/ATen/ATen.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/data.h:3,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/all.h:4,
from /export/apps/pytorch/libtorch/include/torch/csrc/api/include/torch/torch.h:3,
from /export/apps/pytorch/libtorch/examples_dir/first_example.cpp:1:
/export/apps/pytorch/libtorch/include/c10/core/Device.h:18: error: expected nested-name-specifier before ‘DeviceIndex’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:18: error: ‘DeviceIndex’ has not been declared
/export/apps/pytorch/libtorch/include/c10/core/Device.h:18: error: expected ‘;’ before ‘=’ token
/export/apps/pytorch/libtorch/include/c10/core/Device.h:18: error: expected unqualified-id before ‘=’ token
/export/apps/pytorch/libtorch/include/c10/core/Device.h:30: error: variable ‘c10::Device c10::final’ has initializer but incomplete type
/export/apps/pytorch/libtorch/include/c10/core/Device.h:31: error: expected primary-expression before ‘using’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:31: error: expected ‘}’ before ‘using’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:31: error: expected ‘,’ or ‘;’ before ‘using’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:35: error: expected ‘)’ before ‘type’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:45: error: expected unqualified-id before ‘const’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:45: error: expected ‘)’ before ‘const’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:49: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:55: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:60: error: variable or field ‘set_index’ declared void
/export/apps/pytorch/libtorch/include/c10/core/Device.h:60: error: ‘DeviceIndex’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/core/Device.h:65: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:70: error: ‘DeviceIndex’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/Device.h:75: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:80: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:85: error: expected initializer before ‘noexcept’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:89: error: expected unqualified-id before ‘private’
/export/apps/pytorch/libtorch/include/c10/core/Device.h:91: error: ‘DeviceIndex’ does not name a type
/export/apps/pytorch/libtorch/include/c10/core/Device.h: In function ‘void c10::validate()’:
/export/apps/pytorch/libtorch/include/c10/core/Device.h:93: error: ‘index_’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/core/Device.h:95: error: ‘is_cpu’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/core/Device.h:95: error: ‘index_’ was not declared in this scope
/export/apps/pytorch/libtorch/include/c10/core/Device.h: At global scope:
/export/apps/pytorch/libtorch/include/c10/core/Device.h:102: error: expected ‘,’ or ‘…’ before ‘&’ token
/export/apps/pytorch/libtorch/include/c10/core/Device.h:104: error: expected declaration before ‘}’ token
make[2]: *** [CMakeFiles/first_example.dir/first_example.cpp.o] Error 1
make[1]: *** [CMakeFiles/first_example.dir/all] Error 2
make: *** [all] Error 2

I also compiled with the g++ command as follows:

g++ -std=c++0x -I /export/apps/pytorch/libtorch/include/torch/csrc/api/include/ first_example.cpp

I get the same error as above.

I am not sure what the issue is. Can anyone help?

It’s always good to look at the very first error, in your case /export/apps/pytorch/libtorch/include/c10/core/TensorTypeIdRegistration.h:16:18: error: atomic: No such file or directory. So gcc 4.4 does not have support for #include <atomic>, you need to find a newer gcc.

Best regards

Thomas

1 Like

Thank you very much tom, and sorry about the delayed response.

As you suggested, installing a newer version of GCC might partially resolve the issue. However, I have few doubts too regarding that.

  1. The current version of GCC is 9.1. Should I go for the latest version, or is there an upper bound to the GCC compiler I should use?
  2. Does PyTorch C++ frontend have dependencies on versions of MPI and/or any other packages that you are aware of? Is there a documentation or blog that you know which is informative on the matter.

Furthermore, the reason I have chosen this path is because I do not have GPU card. But, I do have a cluster that runs on Rocks Cluster. As mentioned in the link (under the Philosophy heading), the C++ frontend exploits multi-threading and Python does not.

I have built PyTorch successfully with gcc 4.9 - gcc 8. There is a list in the README.

PyTorch will make use of multiple threads all right for its ops, it will be very specific circumstances when it’s insufficient.

Best regards

Thomas

Thank you again Tom.