microsoft / microsoft/onnxruntime

Empty strided tensors are contiguous

Open
#11,262 0 comments 0 reactions 1 assignee View on GitHub

@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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.