“张量”是现代AI和深度学习的基石,更是TensorRT、PyTorch这些工具统一处理数据的“通用货币”。
❓ 张量是什么?
简单来说,张量就是一个多维数组,是标量、向量、矩阵向更高维度的自然推广。
标量 (0阶张量):一个单一的数字,比如你的体温
36.5℃。向量 (1阶张量):一维数字数组,比如一个RGB颜色
[255, 0, 0]。矩阵 (2阶张量):二维数字网格,比如一张灰度图,每个格子存一个像素值。
高阶张量 (3阶及以上):立方体或更高维的数字容器。比如一张彩色图片就是3阶张量,维度是
[高, 宽, 通道(RGB)];而一段视频是4阶张量,一次处理的一批视频就是5阶张量。
从数学对象的角度看,张量的关键在于它的性质不随坐标系改变而变化,但作为开发者,我们完全可以把它当“多维数组”用,不必深究背后的数学。
💡 为什么AI计算非要“张量化”?
把一切数据都表示成张量,主要有三大原因:
统一的数据表示:无论处理的是图片、文本、语音还是点云,都能统一表达为张量,这为构建通用框架(如PyTorch)和处理流程(如TensorRT优化)提供了基础。
极致的并行计算:AI核心运算(如矩阵乘法)天生适合并行。GPU拥有数千个计算核心,其硬件架构就是为同时处理大量数据而生的。当处理一个图片批次时,GPU能同时对所有图片的同一位置像素进行卷积,获得成百上千倍的加速。
自动微分的基础:现代深度学习框架之所以能自动计算梯度,正是因为整个模型从输入到输出都被表示成了一个巨大的“计算图”,而在这张图上流动的数据,就是张量。
🛠️ “怎样做”:GPU加速的张量操作实战
理论说再多,都不如看几段torch代码来得直接。以下是张量在GPU上从创建到运算,再到用TensorRT加速的完整过程:
第一步:创建与转移
# 创建两个随机的5x5矩阵,并直接放到GPU上 import torch a = torch.randn(5, 5, device='cuda') b = torch.randn(5, 5, device='cuda') print(f"张量 a 在: {a.device}") # cuda:0第二步:GPU上的并行运算
这行代码c = a @ b启动后,GPU会自动将5x5的矩阵乘法拆分为成百上千个线程并行计算,你几乎感觉不到延迟。# 矩阵乘法,瞬间完成并行加速 c = a @ b print(f"结果形状: {c.shape}") # torch.Size([5, 5])第三步:自动微分示例
张量是自动求导的基石。设置requires_grad=True,计算图就会被自动跟踪。# 演示:PyTorch如何基于张量自动计算梯度 x = torch.ones(2, 2, requires_grad=True) y = x + 2 z = y * y * 3 out = z.mean() out.backward() # 自动触发反向传播 print(x.grad) # 输出out对x的梯度第四步:走向终极加速 (TensorRT)
上面代码都是在框架内即时运行(Eager Mode),而TensorRT更进一步。它会把你基于张量运算定义的模型编译成一个高度优化的、专为推理设计的“引擎”。它会对你模型中的张量运算进行算子融合、精度量化等优化,让你的模型在Jetson上跑得更快。
✨ 总结框图
下面这张图梳理了张量在AI世界中的角色、优势和应用流程。
简单来说,张量是AI的数据语言,GPU是它的加速引擎,而TensorRT则是让这个引擎在Jetson上满负荷运转的终极调校师。