spconv icon indicating copy to clipboard operation
spconv copied to clipboard

Unable to transform SparseConv3d with torch.jit.trace.

Open sun-sey opened this issue 2 years ago • 2 comments

I've seen that some issues can be resolved by choosing the appropriate ConvAlgo. However, I have tried running all kinds of ConvAlgo but it didn't work out.

The conversion of SubMConv3d works fine. But when downsampling and upsampling, torch.jit.trace doesn't seem to track it. What should I do?

The following error occurs.

spconv-cu117 == 2.2.6 torch == 1.12.1

File "/home/ssy/Projects/python_spconv/networks.py", line 217, in traced_model = torch.jit.trace(model, [pt_fea, idx, sparse_shape]) File "/home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py", line 759, in trace return trace_module( File "/home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py", line 1001, in trace_module _check_trace( File "/home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context return func(*args, **kwargs) File "/home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py", line 534, in _check_trace traced_outs = run_mod_and_filter_tensor_outputs(traced_func, inputs, "trace") File "/home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py", line 449, in run_mod_and_filter_tensor_outputs raise TracingCheckError( torch.jit._trace.TracingCheckError: Tracing failed sanity checks! encountered an exception while running the trace with test inputs. Exception: The following operation failed in the TorchScript interpreter. Traceback of TorchScript (most recent call last): /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py(440): forward /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/nn/modules/module.py(1182): _slow_forward /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/nn/modules/module.py(1194): _call_impl /home/ssy/Projects/python_spconv/networks.py(199): forward /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/nn/modules/module.py(1182): _slow_forward /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/nn/modules/module.py(1194): _call_impl /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(976): trace_module /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(759): trace /home/ssy/Projects/python_spconv/networks.py(217): RuntimeError: RuntimeError: /io/build/temp.linux-x86_64-cpython-39/spconv/build/core_cc/src/csrc/sparse/convops/spops/ConvGemmOps/ConvGemmOps_indice_conv.cc(129) nhot_profile > 0 assert faild. this shouldn't happen

    At:
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/ops.py(854): indice_conv
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/functional.py(92): forward
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/cuda/amp/autocast_mode.py(105): decorate_fwd
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(443): run_mod_and_filter_tensor_outputs
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(534): _check_trace
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/autograd/grad_mode.py(27): decorate_context
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(1001): trace_module
      /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/torch/jit/_trace.py(759): trace
      /home/ssy/Projects/python_spconv/networks.py(217): <module>

ERROR: Graphs differed across invocations! Graph diff: graph(%self.1 : torch.SparseNetworks, %pt_fea : Tensor, %xy_ind : Tensor, %sparse_shape : Tensor): %spconv_layer4 : torch.spconv.pytorch.conv.SubMConv3d = prim::GetAttrname="spconv_layer4" %spconv_layer3 : torch.spconv.pytorch.conv.SparseInverseConv3d = prim::GetAttrname="spconv_layer3" %spconv_layer2 : torch.spconv.pytorch.conv.SparseConv3d = prim::GetAttrname="spconv_layer2" %spconv_layer : torch.spconv.pytorch.conv.SubMConv3d = prim::GetAttrname="spconv_layer" %103 : int = prim::Constantvalue=1, scope: __module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:324:0 %104 : int = prim::Constantvalue=128, scope: __module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:321:0 %105 : int = prim::Constantvalue=3, scope: __module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:321:0 %bias.1 : Tensor = prim::GetAttrname="bias" %weight.1 : Tensor = prim::GetAttrname="weight" %108 : int[] = prim::ListConstruct(%105, %104), scope: __module.spconv_layer %109 : Tensor = aten::view(%weight.1, %108), scope: __module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:321:0 %features.1 : Tensor = aten::mm(%pt_fea, %109), scope: _module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:319:0 %features.3 : Tensor = aten::add(%features.1, %bias.1, %103), scope: __module.spconv_layer # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:324:0 %112 : int = prim::Constantvalue=1, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/ops.py:170:0 %113 : int = prim::Constantvalue=0, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/ops.py:170:0 %114 : int = prim::Constantvalue=4, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:139:0 %115 : int = prim::Constantvalue=351, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:139:0 %116 : bool = prim::Constantvalue=0, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %117 : Device = prim::Constantvalue="cuda:0", scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %118 : NoneType = prim::Constant(), scope: __module.spconv_layer2 %119 : int = prim::Constantvalue=3, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %120 : int = prim::Constantvalue=-1, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %121 : int = prim::Constantvalue=100, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %122 : int = prim::Constantvalue=27, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %123 : int = prim::Constantvalue=2, scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %bias.3 : Tensor = prim::GetAttrname="bias" %weight.3 : Tensor = prim::GetAttrname="weight" %126 : int[] = prim::ListConstruct(%123, %122, %121), scope: __module.spconv_layer2 %ten.1 : Tensor = aten::full(%126, %120, %119, %118, %117, %116), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:156:0 %128 : int[] = prim::ListConstruct(%122), scope: __module.spconv_layer2 %ten.3 : Tensor = aten::zeros(%128, %119, %118, %117, %116), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:124:0 %130 : int[] = prim::ListConstruct(%115, %114), scope: __module.spconv_layer2 %ten.13 : Tensor = aten::empty(%130, %119, %118, %117, %116, %118), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/cppcore.py:139:0 %outids : Tensor = aten::slice(%ten.13, %113, %113, %115, %112), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/ops.py:170:0 %133 : int = aten::size(%outids, %113), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:445:0 %134 : Tensor = prim::NumToTensor(%133), scope: _module.spconv_layer2 - %features.5 : Tensor = ^SparseConvFunction[inplace=0, module="spconv.pytorch.functional", Subgraph=<Graph>](ConvAlgo.Native, <spconv.tools.CUDAKernelTimer object at 0x7f25b65c8580>, 0, 0, Activation.None)(%features.3, %weight.3, %ten.1, %ten.3, %134, %bias.3), scope: _module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:440:0 ? ^^^^^ + %features.5 : Tensor = ^SparseConvFunction[inplace=0, module="spconv.pytorch.functional", Subgraph=<Graph>](ConvAlgo.Native, <spconv.tools.CUDAKernelTimer object at 0x7f25b6662a00>, 0, 0, Activation.None)(%features.3, %weight.3, %ten.1, %ten.3, %134, %bias.3), scope: __module.spconv_layer2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:440:0 ? ^^^^^ %136 : (Tensor, Tensor, Tensor, Tensor) = prim::TupleConstruct(%features.5, %outids, %ten.1, %ten.3) %10 : Tensor, %11 : Tensor, %12 : Tensor, %13 : Tensor = prim::TupleUnpack(%136) %137 : int = prim::Constantvalue=0, scope: __module.spconv_layer3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:432:0 %bias.5 : Tensor = prim::GetAttrname="bias" %weight.5 : Tensor = prim::GetAttrname="weight" %140 : int = aten::size(%xy_ind, %137), scope: __module.spconv_layer3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:432:0 %141 : Tensor = prim::NumToTensor(%140), scope: _module.spconv_layer3 - %features.7 : Tensor = ^SparseInverseConvFunction[inplace=0, module="spconv.pytorch.functional", Subgraph=<Graph>](ConvAlgo.Native, <spconv.tools.CUDAKernelTimer object at 0x7f25b65c8580>, 0, 0, Activation.None)(%10, %weight.5, %12, %13, %141, %bias.5), scope: _module.spconv_layer3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:427:0 ? ^^^^^ + %features.7 : Tensor = ^SparseInverseConvFunction[inplace=0, module="spconv.pytorch.functional", Subgraph=<Graph>](ConvAlgo.Native, <spconv.tools.CUDAKernelTimer object at 0x7f25b6662a00>, 0, 0, Activation.None)(%10, %weight.5, %12, %13, %141, %bias.5), scope: _module.spconv_layer3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/conv.py:427:0 ? ^^^^^ %143 : NoneType = prim::Constant() %16 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:241:0 %17 : int = aten::size(%pt_fea, %16) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:241:0 %18 : Tensor = prim::NumToTensor(%17) %19 : int = aten::Int(%18) %20 : int = aten::Int(%18) %21 : int = prim::Constantvalue=3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %22 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %23 : Device = prim::Constantvalue="cuda:0" # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %24 : NoneType = prim::Constant() %25 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %26 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %27 : NoneType = prim::Constant() %28 : Tensor = aten::to(%xy_ind, %21, %22, %23, %24, %25, %26, %27) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %29 : int = prim::Constantvalue=4 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %30 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %31 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %32 : NoneType = prim::Constant() %indices : Tensor = aten::to(%28, %29, %30, %31, %32) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:243:0 %34 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %35 : int = prim::Constantvalue=200 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %36 : int = prim::Constantvalue=200 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %37 : int = prim::Constantvalue=200 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %38 : int[] = prim::ListConstruct(%34, %35, %36, %37, %20) %39 : int = prim::Constantvalue=6 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %40 : NoneType = prim::Constant() %41 : Device = prim::Constantvalue="cuda:0" # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %42 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %ret : Tensor = aten::zeros(%38, %39, %40, %41, %42) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:121:0 %44 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:122:0 %45 : int = aten::size(%indices, %44) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:122:0 %ndim : Tensor = prim::NumToTensor(%45) %47 : int = aten::Int(%ndim) %48 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:123:0 %49 : int = aten::size(%indices, %48) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:123:0 %50 : Tensor = prim::NumToTensor(%49) %51 : int = aten::Int(%50) %52 : int = prim::Constantvalue=-1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:124:0 %53 : int[] = prim::ListConstruct(%52, %47) %flatted_indices : Tensor = aten::view(%indices, %53) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:124:0 %55 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %56 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %57 : int = prim::Constantvalue=9223372036854775807 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %58 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %59 : Tensor = aten::slice(%flatted_indices, %55, %56, %57, %58) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %60 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %61 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %62 : Tensor = aten::select(%59, %60, %61) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %63 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %64 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %65 : int = prim::Constantvalue=9223372036854775807 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %66 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %67 : Tensor = aten::slice(%flatted_indices, %63, %64, %65, %66) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %68 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %69 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %70 : Tensor = aten::select(%67, %68, %69) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %71 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %72 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %73 : int = prim::Constantvalue=9223372036854775807 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %74 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %75 : Tensor = aten::slice(%flatted_indices, %71, %72, %73, %74) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %76 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %77 : int = prim::Constantvalue=2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %78 : Tensor = aten::select(%75, %76, %77) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %79 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %80 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %81 : int = prim::Constantvalue=9223372036854775807 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %82 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %83 : Tensor = aten::slice(%flatted_indices, %79, %80, %81, %82) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %84 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %85 : int = prim::Constantvalue=3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %86 : Tensor = aten::select(%83, %84, %85) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:125:0 %87 : int[] = prim::ListConstruct(%51, %19) %88 : Tensor = aten::view(%pt_fea, %87) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:127:0 %89 : Tensor?[] = prim::ListConstruct(%62, %70, %78, %86) %90 : bool = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:127:0 %res : Tensor = aten::index_put(%ret, %89, %88, %90) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:127:0 %92 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %93 : int = prim::Constantvalue=4 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %94 : int = prim::Constantvalue=1 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %95 : int = prim::Constantvalue=2 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %96 : int = prim::Constantvalue=3 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %97 : int[] = prim::ListConstruct(%92, %93, %94, %95, %96) %98 : Tensor = aten::permute(%res, %97) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %99 : int = prim::Constantvalue=0 # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %100 : Tensor = aten::contiguous(%98, %99) # /home/ssy/anaconda3/envs/torch_cpp/lib/python3.9/site-packages/spconv/pytorch/core.py:250:0 %101 : NoneType = prim::Constant() %102 : Tensor = aten::mean(%100, %101) # /home/ssy/Projects/python_spconv/networks.py:204:0 return (%102) First diverging operator: Node diff: - %spconv_layer4 : torch.spconv.pytorch.conv.___torch_mangle_0.SubMConv3d = prim::GetAttrname="spconv_layer4" ? ^ + %spconv_layer4 : torch.spconv.pytorch.conv.___torch_mangle_4.SubMConv3d = prim::GetAttrname="spconv_layer4" ?

Here is the code.

import spconv.pytorch as spconv import torch.nn as nn

class SparseNetworks(nn.Module): def init(self): super().init() self.spconv_layer = spconv.SubMConv3d(3, 128, indice_key='sp', kernel_size=1, stride=1, padding=0, algo=spconv.ConvAlgo.Native) self.spconv_layer2 = spconv.SparseConv3d(128, 128, kernel_size=3, stride=2, padding=1, indice_key='spconv', algo=spconv.ConvAlgo.Native) self.spconv_layer3 = spconv.SparseInverseConv3d(128, 128, kernel_size=3, indice_key='spconv', algo=spconv.ConvAlgo.Native) self.spconv_layer4 = spconv.SubMConv3d(128, 128, indice_key='sp2', kernel_size=1, stride=1, padding=0, algo=spconv.ConvAlgo.Native)

def forward(self, pt_fea, xy_ind, sparse_shape):

    ret = spconv.SparseConvTensor(pt_fea, xy_ind, sparse_shape, batch_size=1)
    x = self.spconv_layer(ret)
    x = self.spconv_layer2(x)
    x = self.spconv_layer3(x)
    x = self.spconv_layer4(x)
    
    # return ret.features, ret.indices
    return ret.dense().mean()

if name == "main": model = SparseNetworks().eval().cuda() pt_fea = torch.randn((100, 3)).type(torch.FloatTensor).cuda() sparse_shape = torch.Tensor([200, 200, 200]).cuda() idx = torch.randint(low=0, high=99, size=(100, 3)).type(torch.FloatTensor).cuda() batch_size = torch.zeros((100,1)).type(torch.FloatTensor).cuda()

idx = torch.cat((batch_size, idx), dim=1).int()
print('forward result is ', model(pt_fea, idx, sparse_shape))
traced_model = torch.jit.trace(model, [pt_fea, idx, sparse_shape])
traced_model.save('my_model.pt')

sun-sey avatar Mar 07 '23 09:03 sun-sey

same problem

First diverging operator: Node diff: - %final : torch.spconv.pytorch.conv.___torch_mangle_227.SubMConv3d = prim::GetAttrname="final" ? ^^^ + %final : torch.spconv.pytorch.conv.___torch_mangle_464.SubMConv3d = prim::GetAttrname="final" ? ^^^

yangqifan913 avatar Feb 06 '24 07:02 yangqifan913