I followed the instruction of pytorch/extension-script to register custom c++ operator.
But I changed the version of PyTorch because my network speed is poor. My Dockerfile is as follows:
FROM ubuntu:xenial
RUN apt-get update -y \
&& apt-get install -y git cmake vim make wget gnupg build-essential software-properties-common gdb zip
# Install OpenCV
RUN apt-get install -y libopencv-dev
# Install Miniconda
RUN wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \
&& chmod +x miniconda.sh \
&& ./miniconda.sh -b -p ~/local/miniconda \
&& rm ./miniconda.sh
# Symlink the Miniconda activation script to /activate
RUN ln -s ~/local/miniconda/bin/activate /activate
# Install PyTorch
RUN . /activate && conda install pytorch torchvision cpuonly -c pytorch
# Download LibTorch
RUN wget https://download.pytorch.org/libtorch/nightly/cpu/libtorch-shared-with-deps-latest.zip
RUN unzip libtorch-shared-with-deps-latest.zip && rm libtorch-shared-with-deps-latest.zip
WORKDIR /home
I changed this line:
RUN . /activate && conda install pytorch torchvision cpuonly -c pytorch
When I run : make -j
, I got following error:
(base) root@4c6b54e7fed4:/home/example_app/build# make -j
Scanning dependencies of target warp_perspective
[ 25%] Building CXX object warp_perspective/CMakeFiles/warp_perspective.dir/op.cpp.o
In file included from /libtorch/include/c10/util/ArrayRef.h:19:0,
from /libtorch/include/c10/core/MemoryFormat.h:5,
from /libtorch/include/ATen/core/TensorBody.h:5,
from /libtorch/include/ATen/Tensor.h:11,
from /libtorch/include/ATen/Context.h:4,
from /libtorch/include/ATen/ATen.h:5,
from /libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /libtorch/include/torch/script.h:3,
from /home/example_app/warp_perspective/op.cpp:2:
/libtorch/include/c10/util/C++17.h:20:2: error: #error You need C++14 to compile PyTorch
#error You need C++14 to compile PyTorch
^
/home/example_app/warp_perspective/op.cpp: In function 'at::Tensor warp_perspective(at::Tensor, at::Tensor)':
/home/example_app/warp_perspective/op.cpp:54:48: warning: 'T* at::Tensor::data() const [with T = float]' is deprecated [-Wdeprecated-declarations]
/*data=*/image.data<float>());
^
In file included from /libtorch/include/ATen/Tensor.h:11:0,
from /libtorch/include/ATen/Context.h:4,
from /libtorch/include/ATen/ATen.h:5,
from /libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /libtorch/include/torch/script.h:3,
from /home/example_app/warp_perspective/op.cpp:2:
/libtorch/include/ATen/core/TensorBody.h:322:7: note: declared here
T * data() const {
^
/home/example_app/warp_perspective/op.cpp:58:46: warning: 'T* at::Tensor::data() const [with T = float]' is deprecated [-Wdeprecated-declarations]
/*data=*/warp.data<float>());
^
In file included from /libtorch/include/ATen/Tensor.h:11:0,
from /libtorch/include/ATen/Context.h:4,
from /libtorch/include/ATen/ATen.h:5,
from /libtorch/include/torch/csrc/api/include/torch/types.h:3,
from /libtorch/include/torch/script.h:3,
from /home/example_app/warp_perspective/op.cpp:2:
/libtorch/include/ATen/core/TensorBody.h:322:7: note: declared here
T * data() const {
^
/home/example_app/warp_perspective/op.cpp: At global scope:
/home/example_app/warp_perspective/op.cpp:69:78: error: no matching function for call to 'torch::jit::RegisterOperators::RegisterOperators(const char [25], at::Tensor (*)(at::Tensor, at::Tensor))'
torch::jit::RegisterOperators("my_ops::warp_perspective", &warp_perspective);
^
In file included from /libtorch/include/torch/script.h:6:0,
from /home/example_app/warp_perspective/op.cpp:2:
/libtorch/include/torch/csrc/jit/custom_operator.h:20:3: note: candidate: torch::jit::RegisterOperators::RegisterOperators(std::vector<torch::jit::Operator>)
RegisterOperators(std::vector<Operator> operators) {
^
/libtorch/include/torch/csrc/jit/custom_operator.h:20:3: note: candidate expects 1 argument, 2 provided
/libtorch/include/torch/csrc/jit/custom_operator.h:17:3: note: candidate: constexpr torch::jit::RegisterOperators::RegisterOperators()
RegisterOperators() = default;
^
/libtorch/include/torch/csrc/jit/custom_operator.h:17:3: note: candidate expects 0 arguments, 2 provided
/libtorch/include/torch/csrc/jit/custom_operator.h:16:18: note: candidate: constexpr torch::jit::RegisterOperators::RegisterOperators(const torch::jit::RegisterOperators&)
struct TORCH_API RegisterOperators {
^
/libtorch/include/torch/csrc/jit/custom_operator.h:16:18: note: candidate expects 1 argument, 2 provided
/libtorch/include/torch/csrc/jit/custom_operator.h:16:18: note: candidate: constexpr torch::jit::RegisterOperators::RegisterOperators(torch::jit::RegisterOperators&&)
/libtorch/include/torch/csrc/jit/custom_operator.h:16:18: note: candidate expects 1 argument, 2 provided
warp_perspective/CMakeFiles/warp_perspective.dir/build.make:62: recipe for target 'warp_perspective/CMakeFiles/warp_perspective.dir/op.cpp.o' failed
make[2]: *** [warp_perspective/CMakeFiles/warp_perspective.dir/op.cpp.o] Error 1
CMakeFiles/Makefile2:122: recipe for target 'warp_perspective/CMakeFiles/warp_perspective.dir/all' failed
make[1]: *** [warp_perspective/CMakeFiles/warp_perspective.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
How can I fix this problem? Looking forward to your replay.