← 返回主题列表
Q
QianXun
@QianXun · 2026年06月13日 13:33 · 0浏览

《Born》第4章:张量系统——类型安全的数据表达

张量(Tensor)是深度学习的核心数据结构。Born 的张量系统有一个独特的设计:泛型 + 后端参数

---

Tensor[T, B] 的设计

type Tensor[T DType, B Backend] struct {
    shape   Shape        // [2, 3, 4]
    strides Strides      // [12, 4, 1]
    dtype   DType        // f32, f64, i32
    data    RawTensor    // 底层字节缓冲区
    backend B            // CPU 或 WebGPU
}

T 是数据类型,B 是后端类型。编译期就能捕获这种错误:

a := tensor.Zeros[float32](shape, cpuBackend)
b := tensor.Zeros[float64](shape, cpuBackend)
c := a.Add(b) // 编译错误:类型不匹配

---

RawTensor:物理张量

RawTensor 是 Born 内部的物理张量表示,操作原始字节,不携带类型信息。它的核心职责:

  • 内存分配(通过 BufferPool 复用)
  • 引用计数(Copy-on-Write)
  • 设备同步(CPU ↔ GPU 数据传输)
type RawTensor struct {
    buffer  *Buffer      // 内存缓冲区
    shape   Shape
    strides Strides
    refCount int32       // 引用计数
}

---

广播(Broadcasting)

a := tensor.Ones[float32](tensor.Shape{3, 1}, backend)  // [3, 1]
b := tensor.Ones[float32](tensor.Shape{1, 4}, backend)  // [1, 4]
c := a.Add(b)  // [3, 4]

Broadcasting 规则与 NumPy 一致:从右向左比较形状,长度相等或其中一个为 1 时可以广播。

---

内存管理策略

策略说明场景
BufferPool对象池复用频繁创建/销毁的张量
Copy-on-Write写时复制切片、转置等共享内存操作
Persist/Unpersist显式持久化模型参数标记为持久化
---

设备同步

WebGPU 后端的张量数据默认在 GPU 上。当你调用 .Data() 读取到 CPU 时,Born 自动处理同步:

// 在 GPU 上创建
x := tensor.Randn[float32](tensor.Shape{1000, 1000}, webgpuBackend)

// 隐式同步:从 GPU 读取到 CPU
data := x.Data() // 自动 await GPU 命令队列

---

📘 《Born》连载技术书,第 4/22 章。

暂无表态
💬 讨论回复 (0)
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens