Tensor

📅 2026/7/16 17:23:00
Tensor
在计算机科学、深度学习如 PyTorch、TensorFlow以及 AI 编译器如 MLIR、XLA的语境下Tensor张量是承载一切 AI 计算的核心数据结构。如果用最通俗的话来定义Tensor 就是一个“穿了铠甲”的多维数据容器。无论是在显卡GPU里狂飙的矩阵乘法还是在 AI 编译器里流转的中间表示IR理解 Tensor 都可以从它的外在数学形态和底层物理存储两个维度展开。1. 外在形态高维数据的“多面手”从数学和编程的角度来看Tensor 是对标量、向量和矩阵的高维泛化。你可以通过它的维度Rank / Dimension来直观认识它0 维张量 (Rank 0) —— 标量 (Scalar)就是一个孤零零的数字。例如1.0。1 维张量 (Rank 1) —— 向量 (Vector)一排数字组成的数组。例如一行特征值[1.0, 2.0, 3.0]。2 维张量 (Rank 2) —— 矩阵 (Matrix)有行有列的表格。3 维张量 (Rank 3)像一本“书”有长、宽、页数。在计算机视觉中一张彩色图片长×\times×宽×\times×RGB 3通道就是一个 3 维 Tensor。4 维张量 (Rank 4)像一排“书架”。在深度学习训练时我们往往把多张图片打包成一个批次Batch Size×\times×通道数×\times×高×\times×宽这就是一个标准的 4 维 Tensor。Tensor 的三大核心DNAShape形状每一维度的元素个数。比如形状为[3, 224, 224]的 Tensor。DataType数据类型里面存的是什么数字比如f32单精度浮点数、i8量化整数。Layout内存布局决定了高维数据是怎么平铺在物理内存里的。2. 物理本质在内存里它只是一条“直线”这是非编译器开发者最容易忽视的一点虽然 Tensor 在数学上是高维的但计算机的物理内存显存/内存永远是一维线性的。当你在 PyTorch 里定义一个[2, 3]的矩阵时在显存里它其实只是连续躺着的 6 个数字。为了让你能在上层用tensor[i][j]方便地访问数据Tensor 的底层结构体如 MLIR 中的MemRefDescriptor或 PyTorch 的底层实现通常包含了以下几个核心指针和参数Base Pointer基地址指针指向这块连续物理内存的起点。Offset偏移量从起点开始往后数多少个元素才是真正的数据。Strides步长这是高维映射到一维的魔法所在。步长决定了当你把某个维度的坐标111时底层指针需要在物理内存上向前跳跃多少个格子。 举个例子步长魔术假设有一个形状为[2, 3]的二维 Tensor在物理内存里存的顺序是[A, B, C, D, E, F]。它的步长Strides是[3, 1]。当你想找tensor[0][1]时物理位置等于0×31×110 \times 3 1 \times 1 10×31×11对应B。当你想找tensor[1][0]第二行第一列时物理位置等于1×30×131 \times 3 0 \times 1 31×30×13指针直接跳过 3 个格子对应D。这也是为什么在 AI 框架里做Tensor 转置Transpose/Permute往往快得不可思议——因为编译器根本没有去挪动显存里的数字它只是悄悄把步长Strides的数值从[3, 1]改成了[1, 3]就把矩阵给旋过来了3. 在 AI 编译器如 MLIR中Tensor 是如何被操纵的在你之前关心的编译系统Compiler世界里Tensor 的生命周期会经历从抽象语义到硬件贴身肉搏的降级Lowering过程① 高层图阶段纯粹的数学符号在线性代数层如 MLIR 的linalg方言Tensor 仅仅是一个值Value。它是不可变的只表示数据流// 语义两个张量相加生成一个新的张量 %result linalg.add ins(%t1, %t2 : tensor2x3xf32) - tensor2x3xf32在这个阶段编译器只关心算子的数学融合比如把 Add 和 ReLU 融合成一个算子不需要关心内存怎么分配。② 中间解构阶段Bufferization内存化硬件不懂什么叫抽象的“值”硬件需要具体的“地址”。于是编译器会运行一个关键的 Pass 叫Bufferization把抽象的tensor转换成手握物理内存指针的memref内存引用// 语义在堆区分配一块 2x3 的 f32 物理内存把相加结果写进去 %mem memref.alloc() : memref2x3xf32③ 低层降级阶段硬件指令最终这个memref会被进一步 Lower 成 LLVM IR变成裸指针并在最终生成汇编代码时映射为 GPU 的LD/ST加载/存储指令或 CPU 的 SIMD单指令多数据向量寄存器操作。总结Tensor是整个现代人工智能帝国的砖瓦。在应用层它是科学家玩弄高维数据的数学画板在底层它是编译器优化专家和硬件工程师通过指针、步长Strides和连续内存块压榨计算性能的终极战场。正是因为 Tensor 能够把复杂的现实世界图像、语言、音频高度抽象成规整的数字阵列显卡和 AI 芯片才能毫无顾忌地全速轰鸣。