KEMBAR78
clone(memory_format=torch.preserve_format) is inconsistent for non-contiguous views (fails on slice, works on transpose) · Issue #156644 · pytorch/pytorch · GitHub
Skip to content

clone(memory_format=torch.preserve_format) is inconsistent for non-contiguous views (fails on slice, works on transpose) #156644

@moadabdou

Description

@moadabdou

🐛 Describe the bug

Hello,

The behavior of torch.clone() with memory_format=torch.preserve_format is inconsistent for different types of non-contiguous views.

The documentation states that for a strided tensor, the strides of the input are copied to the output. This holds true for a view created by transpose, but it fails for a view created by a stepped slice. In the case of a sliced view, .clone() returns a contiguous tensor even when explicitly told to preserve the non-contiguous memory format.

This behavior was observed on both PyTorch 2.2.2+cpu (local pip install) and 2.6.0+cu124 (on Google Colab).

Code to Reproduce:

Python

import torch

print("--- Bug Demo: Sliced View vs. Transposed View ---")
print(f"PyTorch Version Found: {torch.version}")
print("-" * 60)

--- Setup ---

original_tensor = torch.arange(25).reshape(5, 5)
print(f"Original Tensor Strides: {original_tensor.stride()}\n")

--- Case 1: The Sliced View (Fails to preserve strides) ---

sliced_view = original_tensor[::2, :]
print(f"Sliced View Strides: {sliced_view.stride()}")
sliced_clone = sliced_view.clone(memory_format=torch.preserve_format)
print(f"Clone of Sliced View Strides: {sliced_clone.stride()}")

if sliced_clone.stride() == sliced_view.stride():
print("Sliced View Test Result: ✅ PRESERVED (As Documentation Suggests)")
else:
print("Sliced View Test Result: ❌ RECALCULATED (Bug)\n")

--- Case 2: The Transposed View (Works as expected) ---

transposed_view = original_tensor.T
print(f"Transposed View Strides: {transposed_view.stride()}")
transposed_clone = transposed_view.clone(memory_format=torch.preserve_format)
print(f"Clone of Transposed View Strides: {transposed_clone.stride()}")

if transposed_clone.stride() == transposed_view.stride():
print("Transposed View Test Result: ✅ PRESERVED (As Documentation Suggests)")
else:
print("Transposed View Test Result: ❌ RECALCULATED (Bug)")
print("-" * 60)

Versions

Collecting environment information...
PyTorch version: 2.6.0+cu124
Is debug build: False
CUDA used to build PyTorch: 12.4
ROCM used to build PyTorch: N/A

OS: Ubuntu 22.04.4 LTS (x86_64)
GCC version: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Clang version: 14.0.0-1ubuntu1.1
CMake version: version 3.31.6
Libc version: glibc-2.35

Python version: 3.11.13 (main, Jun 4 2025, 08:57:29) [GCC 11.4.0] (64-bit runtime)
Python platform: Linux-6.1.123+-x86_64-with-glibc2.35
Is CUDA available: False
CUDA runtime version: 12.5.82
CUDA_MODULE_LOADING set to: N/A
GPU models and configuration: Could not collect
Nvidia driver version: Could not collect
cuDNN version: Probably one of the following:
/usr/lib/x86_64-linux-gnu/libcudnn.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_adv.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_cnn.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_engines_precompiled.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_engines_runtime_compiled.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_graph.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_heuristic.so.9.2.1
/usr/lib/x86_64-linux-gnu/libcudnn_ops.so.9.2.1
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

CPU:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 46 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Vendor ID: GenuineIntel
Model name: Intel(R) Xeon(R) CPU @ 2.20GHz
CPU family: 6
Model: 79
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
Stepping: 0
BogoMIPS: 4400.43
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt arat md_clear arch_capabilities
Hypervisor vendor: KVM
Virtualization type: full
L1d cache: 32 KiB (1 instance)
L1i cache: 32 KiB (1 instance)
L2 cache: 256 KiB (1 instance)
L3 cache: 55 MiB (1 instance)
NUMA node(s): 1
NUMA node0 CPU(s): 0,1
Vulnerability Gather data sampling: Not affected
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Mitigation; PTE Inversion
Vulnerability Mds: Vulnerable; SMT Host state unknown
Vulnerability Meltdown: Vulnerable
Vulnerability Mmio stale data: Vulnerable
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Vulnerable
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1: Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers
Vulnerability Spectre v2: Vulnerable; IBPB: disabled; STIBP: disabled; PBRSB-eIBRS: Not affected; BHI: Vulnerable
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Vulnerable

Versions of relevant libraries:
[pip3] numpy==2.0.2
[pip3] nvidia-cublas-cu12==12.5.3.2
[pip3] nvidia-cuda-cupti-cu12==12.5.82
[pip3] nvidia-cuda-nvrtc-cu12==12.5.82
[pip3] nvidia-cuda-runtime-cu12==12.5.82
[pip3] nvidia-cudnn-cu12==9.3.0.75
[pip3] nvidia-cufft-cu12==11.2.3.61
[pip3] nvidia-curand-cu12==10.3.6.82
[pip3] nvidia-cusolver-cu12==11.6.3.83
[pip3] nvidia-cusparse-cu12==12.5.1.3
[pip3] nvidia-cusparselt-cu12==0.6.2
[pip3] nvidia-nccl-cu12==2.21.5
[pip3] nvidia-nvjitlink-cu12==12.5.82
[pip3] nvidia-nvtx-cu12==12.4.127
[pip3] nvtx==0.2.12
[pip3] optree==0.16.0
[pip3] pynvjitlink-cu12==0.6.0
[pip3] torch==2.6.0+cu124
[pip3] torchao==0.10.0
[pip3] torchaudio==2.6.0+cu124
[pip3] torchdata==0.11.0
[pip3] torchsummary==1.5.1
[pip3] torchtune==0.6.1
[pip3] torchvision==0.21.0+cu124
[pip3] triton==3.2.0
[conda] Could not collect

cc @svekars @sekyondaMeta @AlannaBurke @albanD

Metadata

Metadata

Assignees

No one assigned

    Labels

    module: docsRelated to our documentation, both in docs/ and docblocksmodule: python frontendFor issues relating to PyTorch's Python frontendtriagedThis issue has been looked at a team member, and triaged and prioritized into an appropriate module

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions