Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to build cpp functions on Windows #2

Closed
jeroenmollink opened this issue Jun 29, 2020 · 5 comments
Closed

Unable to build cpp functions on Windows #2

jeroenmollink opened this issue Jun 29, 2020 · 5 comments

Comments

@jeroenmollink
Copy link

jeroenmollink commented Jun 29, 2020

Thanks for sharing this great repository. I'm interested to apply this approach to some of my own data, but I am struggling with the installation. When trying to train a model (python streaming/train.py) I get the following error:

Traceback (most recent call last):
File "streaming/train.py", line 22, in
from streaming.torch_utils.streaming_trainer import StreamingCheckpointedTrainer, StreamingTrainerOptions
File "C:\Users\j.mollink\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\streaming_trainer.py", line 6, in
from .scnn import StreamingCNN
File "C:\Users\j.mollink\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\scnn.py", line 43, in
cpp_functions = load(name="cpp_functions", sources=[filename], verbose=False)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 969, in load
keep_intermediates=keep_intermediates)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1174, in _jit_compile
with_cuda=with_cuda)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1241, in _write_ninja_file_and_build_library
verify_ninja_availability()
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1297, in verify_ninja_availability
raise RuntimeError("Ninja is required to load C++ extensions")
RuntimeError: Ninja is required to load C++ extensions

I then tried to instal Ninja with pip

pip install ninja

That worked, but yielded the following error, which is a bit beyond my knowledge.

C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py:270: UserWarning: Error checking compiler version for cl: [WinError 2] The system cannot find the file specified
warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
INFO: Could not find files for the given pattern(s).
Traceback (most recent call last):
File "streaming/train.py", line 22, in
from streaming.torch_utils.streaming_trainer import StreamingCheckpointedTrainer, StreamingTrainerOptions
File "C:\Users\j.mollink\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\streaming_trainer.py", line 6, in
from .scnn import StreamingCNN
File "C:\Users\j.mollink\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\scnn.py", line 43, in
cpp_functions = load(name="cpp_functions", sources=[filename], verbose=False)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 969, in load
keep_intermediates=keep_intermediates)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1174, in _jit_compile
with_cuda=with_cuda)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1267, in _write_ninja_file_and_build_library
with_cuda=with_cuda)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1640, in _write_ninja_file_to_build_library
with_cuda=with_cuda)
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\site-packages\torch\utils\cpp_extension.py", line 1742, in _write_ninja_file
'cl']).decode().split('\r\n')
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\subprocess.py", line 411, in check_output
**kwargs).stdout
File "C:\Users\j.mollink\Anaconda3\envs\stream2\lib\subprocess.py", line 512, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['where', 'cl']' returned non-zero exit status 1.

Do you have any ideas what might be causing this? I am working on Windows 10, 64 bit, CUDA 10.1 and the nightly built torch and torchvision.

Thanks,
Jeroen

@hanspinckaers
Copy link
Collaborator

Hi! Thanks for trying the code.

Seems to be a problem with windows and pytorch cpp extensions. Maybe this can help? https://discuss.pytorch.org/t/error-with-cpp-extentions/67559/4

Cheers,
Hans

@jeroenmollink
Copy link
Author

jeroenmollink commented Jun 30, 2020

Thanks for the quick reply! Indeed, my Visual Studio installation was not equipped with command line tools. Now it does, but it yields the following error. It has something to do with the build.ninja files.

Traceback (most recent call last):
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\utils\cpp_extension.py", line 1510, in _run_ninja_build
env=env)
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\subprocess.py", line 512, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "streaming/train.py", line 22, in
from streaming.torch_utils.streaming_trainer import StreamingCheckpointedTrainer, StreamingTrainerOptions
File "C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\streaming_trainer.py", line 6, in
from .scnn import StreamingCNN
File "C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\scnn.py", line 43, in
cpp_functions = load(name="cpp_functions", sources=[filename], verbose=False)
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\utils\cpp_extension.py", line 969, in load
keep_intermediates=keep_intermediates)
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\utils\cpp_extension.py", line 1174, in _jit_compile
with_cuda=with_cuda)
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\utils\cpp_extension.py", line 1274, in _write_ninja_file_and_build_library
error_prefix="Error building extension '{}'".format(name))
File "C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\utils\cpp_extension.py", line 1524, in _run_ninja_build
raise RuntimeError(message)
RuntimeError: Error building extension 'cpp_functions': [1/2] cl /showIncludes -DTORCH_EXTENSION_NAME=cpp_functions -DTORCH_API_INCLUDE_EXTENSION_H -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\torch\csrc\api\include -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\TH -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\THC -IC:\Users\j.mollink\Anaconda3\envs\stream\Include -D_GLIBCXX_USE_CXX11_ABI=0 /MD /wd4819 /wd4251 /wd4244 /wd4267 /wd4275 /wd4018 /wd4190 /EHsc -c "C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp" /Focpp_functions.o
FAILED: cpp_functions.o
cl /showIncludes -DTORCH_EXTENSION_NAME=cpp_functions -DTORCH_API_INCLUDE_EXTENSION_H -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\torch\csrc\api\include -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\TH -IC:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\THC -IC:\Users\j.mollink\Anaconda3\envs\stream\Include -D_GLIBCXX_USE_CXX11_ABI=0 /MD /wd4819 /wd4251 /wd4244 /wd4267 /wd4275 /wd4018 /wd4190 /EHsc -c "C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp" /Focpp_functions.o
Microsoft (R) C/C++ Optimizing Compiler Version 19.26.28806 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(23): error C2664: 'at::Tensor at::cudnn_convolution_backward_weight(c10::IntArrayRef,const at::Tensor &,const at::Tensor &,c10::IntArrayRef,c10::IntArrayRef,c10::IntArrayRef,int64_t,bool,bool)': cannot convert argument 1 from 'c10::ArrayRef' to 'c10::IntArrayRef'
C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(24): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\ATen/Functions.h(209): note: see declaration of 'at::cudnn_convolution_backward_weight'
C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(45): error C2664: 'at::Tensor at::cudnn_convolution_backward_input(c10::IntArrayRef,const at::Tensor &,const at::Tensor &,c10::IntArrayRef,c10::IntArrayRef,c10::IntArrayRef,int64_t,bool,bool)': cannot convert argument 1 from 'c10::ArrayRef' to 'c10::IntArrayRef'
C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(46): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Users\j.mollink\Anaconda3\envs\stream\lib\site-packages\torch\include\ATen/Functions.h(207): note: see declaration of 'at::cudnn_convolution_backward_input'
C:\Users\j.mollink\OneDrive - Agendia Inc\Documents\PycharmProjects\pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(70): warning C4003: not enough arguments for function-like macro invocation 'END_HANDLE_TH_ERRORS_RET'
ninja: build stopped: subcommand failed.

Any thoughts? Thanks again!

Jeroen

@hanspinckaers
Copy link
Collaborator

Hi Jeroen,

Seems like the cudnn functions have other signatures on windows or the compiler is more strict.

This is the key part of the error:

pathology-streaming-pipeline\streaming\torch_utils\cpp_functions.cpp(45): error C2664: ‘at::Tensor at::cudnn_convolution_backward_input(c10::IntArrayRef,const at::Tensor &,const at::Tensor &,c10::IntArrayRef,c10::IntArrayRef,c10::IntArrayRef,int64_t,bool,bool)’: cannot convert argument 1 from ‘c10::ArrayRef’ to ‘c10::IntArrayRef’

You can fix this error by changing ArrayRef to IntArrayRef in cpp_functions.cpp. It's possible other type errors will arise that you could fix using simple search replace as well.

I'm sorry, I never tested the code on windows!

@jeroenmollink
Copy link
Author

No worries at all, your help is really appreciated.

To make it work, I had to replace all instances of ArrayRef<long int> with IntArrayRef.

So yes, it compiles correctly now and it succesfully ran a few epochs on some images. Curious to see what comes out when using the full data set.

So thanks for your help!

Cheers,
Jeroen

@hanspinckaers hanspinckaers changed the title Unable to import StreamingCNN Unable to build cpp functions on Windows Jul 14, 2020
@hanspinckaers
Copy link
Collaborator

Hi Jeroen,

I'm closing this issue. I will add a link to this issue and #3 to the README for people with Windows. Thanks for your help!

Hans

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants