microsoft / microsoft/onnxruntime
Empty strided tensors are contiguous
Open
@Lafi7e is already working on this.
Since Apr 19, 2022.
- Dominant language
- C++
- Stars
- 21.9k
- Forks
- 4.2k
- Avg merge
- 4d 8h
- Merged PRs (30d)
- 179
Description
Empty-strided tensors are contiguous:
ort_t = torch.empty_strided(size=(3,3), stride=(0,0), device=device)
At frame 0, p_tensor->IsContiguous() incorrectly returns true. Also, p_tensor->SizeInBytes() returns 36, but only 1 bigger than the offset of the last element according to stride needs to be allocated so 4 should be returned in this case.
#0 onnxruntime::Tensor::InitOrtValue (elt_type=0x7fb7cb745500 <onnxruntime::PrimitiveDataType<float>::Type()::prim_data_type>, shape=..., allocator=..., ort_value=...) at /home/ashari/onnxruntime/onnxruntime/core/framework/tensor.cc:51
#1 0x00007fb7c9945200 in torch_ort::eager::aten::empty_strided (size=..., stride=..., dtype_opt=..., layout_opt=..., device_opt=..., pin_memory_opt=...) at /home/ashari/onnxruntime/orttraining/orttraining/eager/ort_aten.cpp:397
#2 0x00007fb7c99c15aa in c10::impl::detail::WrapFunctionIntoFunctor_<c10::CompileTimeFunctionPointer<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>), &torch_ort::eager::aten::empty_strided>, at::Tensor, c10::guts::typelist::typelist<c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > >::operator()(c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>) (this=0x4f791b0, args=..., args=..., args=..., args=..., args=..., args=...)
at /home/ashari/venv/ort_issue_11224/lib/python3.8/site-packages/torch/include/ATen/core/boxing/impl/WrapFunctionIntoFunctor.h:13
#3 c10::impl::wrap_kernel_functor_unboxed_<c10::impl::detail::WrapFunctionIntoFunctor_<c10::CompileTimeFunctionPointer<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>), &torch_ort::eager::aten::empty_strided>, at::Tensor, c10::guts::typelist::typelist<c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > >, at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)>::call(c10::OperatorKernel*, c10::DispatchKeySet, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>) (functor=0x4f791b0, args=..., args=..., args=..., args=..., args=..., args=...)
at /home/ashari/venv/ort_issue_11224/lib/python3.8/site-packages/torch/include/ATen/core/boxing/impl/make_boxed_from_unboxed_functor.h:424
#4 0x00007fb7eafe7de9 in c10::callUnboxedKernelFunction<at::Tensor, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > (
unboxed_kernel_func=0x7fb7c99c12b0 <c10::impl::wrap_kernel_functor_unboxed_<c10::impl::detail::WrapFunctionIntoFunctor_<c10::CompileTimeFunctionPointer<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>), &torch_ort::eager::aten::empty_strided>, at::Tensor, c10::guts::typelist::typelist<c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > >, at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)>::call(c10::OperatorKernel*, c10::DispatchKeySet, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)>, functor=0x4f791b0, dispatchKeySet=..., args=..., args=..., args=..., args=..., args=..., args=...)
at /home/ashari/ApolloOnnxRT2/build/debug_full/cmake-build/vcpkg-src/buildtrees/onnxruntime/pytorch.git/aten/src/ATen/core/boxing/KernelFunction_impl.h:57
#5 0x00007fb7eafe84b3 in c10::KernelFunction::call<at::Tensor, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > (this=0x2d6f088, opHandle=..., dispatchKeySet=...,
args=..., args=..., args=..., args=..., args=..., args=...) at /home/ashari/ApolloOnnxRT2/build/debug_full/cmake-build/vcpkg-src/buildtrees/onnxruntime/pytorch.git/aten/src/ATen/core/boxing/KernelFunction_impl.h:67
#6 c10::Dispatcher::redispatch<at::Tensor, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> >(c10::TypedOperatorHandle<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)> const&, c10::DispatchKeySet, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>) const (this=0x7fb803fae218 <c10::Dispatcher::realSingleton()::_singleton>, op=..., currentDispatchKeySet=..., args=..., args=..., args=..., args=..., args=..., args=...)
at /home/ashari/ApolloOnnxRT2/build/debug_full/cmake-build/vcpkg-src/buildtrees/onnxruntime/pytorch.git/aten/src/ATen/core/dispatch/Dispatcher.h:557
#7 0x00007fb7eae9369b in c10::TypedOperatorHandle<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)>::redispatch(c10::DispatchKeySet, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>) const (
this=0x7fb803fbfba8 <at::_ops::empty_strided::redispatch(c10::DispatchKeySet, c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>)::op>, currentDispatchKeySet=...,
args=..., args=..., args=..., args=..., args=..., args=...) at /home/ashari/ApolloOnnxRT2/build/debug_full/cmake-build/vcpkg-src/buildtrees/onnxruntime/pytorch.git/aten/src/ATen/core/dispatch/Dispatcher.h:419
#8 at::_ops::empty_strided::redispatch (dispatchKeySet=..., size=..., stride=..., dtype=..., layout=..., device=..., pin_memory=...) at aten/src/ATen/Operators_2.cpp:2892
#9 0x00007fb7eb3d0f1b in at::(anonymous namespace)::empty_strided (size=..., stride=..., dtype=..., layout=..., device=..., pin_memory=...) at aten/src/ATen/RegisterBackendSelect.cpp:190
#10 0x00007fb7eb3d14ba in c10::impl::detail::WrapFunctionIntoFunctor_<c10::CompileTimeFunctionPointer<at::Tensor (c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>), &at::(anonymous namespace)::empty_strided>, at::Tensor, c10::guts::typelist::typelist<c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool> > >::operator()(c10::ArrayRef<long>, c10::ArrayRef<long>, c10::optional<c10::ScalarType>, c10::optional<c10::Layout>, c10::optional<c10::Device>, c10::optional<bool>) (this=0x2f43860, args=..., args=..., args=..., args=..., args=..., args=...)
System information
- OS Platform and Distribution (e.g., Linux Ubuntu 16.04): Ubuntu 20.04
- ONNX Runtime installed from (source or binary): source
- ONNX Runtime version: 06026fe8e61160107a27bb727b3a747ded39d3a3
- Python version: 3.8
- GCC/Compiler version (if compiling from source): clang 12
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.