Loading...
正在加载...
请稍候

《Born》第2章:Born 的设计哲学与架构全景

QianXun (QianXun) 2026年06月13日 13:32

在写第一行代码之前,我们先回答一个问题:一个从零开始的深度学习框架,应该长什么样?

这个问题没有标准答案。PyTorch 选择了「Pythonic 的动态图」,TensorFlow 选择了「静态计算图 + XLA」,JAX 选择了「函数式变换」。Born 的选择是:Go 风格的生产优先架构


核心设计哲学

1. 纯 Go,零 CGO

Born 的每一个算子、每一层反向传播、每一次 GPU 调度,都是纯 Go 代码。没有 #cgo LDFLAGS,没有 import "C"

这意味着什么?

  • go build 就是全部——不需要 CMake、不需要 conda、不需要 Docker
  • 交叉编译 trivial:GOOS=linux GOARCH=arm64 go build
  • 静态链接——部署时只需要一个二进制文件

2. 泛型张量:Tensor[T, B]

Born 的核心数据结构是一个泛型张量:

type Tensor[T DType, B Backend] struct {
    shape  Shape
    dtype  DType
    data   []T
    backend B
}

T 是数据类型(f32f64i32),B 是后端(CPUWebGPU)。编译期就能捕获 f32 张量和 f64 张量混用的错误。

3. 装饰器模式 Backend 抽象

type Backend interface {
    Add(a, b Tensor) Tensor
    MatMul(a, b Tensor) Tensor
    ReLU(x Tensor) Tensor
    // ...
}

CPU 后端和 WebGPU 后端实现同一接口。你的模型代码写一次,backend := cpu.New()backend := webgpu.New() 就能切换。

4. 延迟求值(Lazy Evaluation)

WebGPU 后端不立即执行每个算子,而是将操作加入命令队列,在需要读取结果时批量提交。这隐藏了 CPU↔GPU 的通信延迟。


架构分层

Born 的代码库分为五个层次:

┌─────────────────────────────────────┐
│  Layer 5: 应用层 (examples/, cmd/)   │  MNIST, LLaMA 聊天机器人
├─────────────────────────────────────┤
│  Layer 4: 模型层 (models/, tokenizer/)│  LLaMA, Mistral, GGUF 加载
├─────────────────────────────────────┤
│  Layer 3: 神经网络 (nn/)              │  Linear, Conv2D, Transformer
├─────────────────────────────────────┤
│  Layer 2: 张量引擎 (tensor/)          │ 张量分配、算子调度、内存管理
├─────────────────────────────────────┤
│  Layer 1: 后端实现 (backend/)         │  CPU (AVX2 SIMD) / WebGPU (WGSL)
└─────────────────────────────────────┘

每一层只依赖下一层,没有跨层调用。


关键架构决策(ADR)

Born 用 ADR(Architecture Decision Record)记录每一个关键设计决策:

  • ADR-001:选择纯 Go 而非 CGO — 为了单二进制部署
  • ADR-002:选择 WebGPU 而非 CUDA — 为了零依赖跨平台 GPU 加速
  • ADR-003:泛型张量 Tensor[T, B] — 编译期类型安全
  • ADR-004:装饰器模式 Backend — 同一模型跑在不同硬件上
  • ADR-005:延迟求值 — 隐藏 GPU 通信延迟
  • ADR-006:梯度 Tape 自动微分 — 反向传播 = 正向算子组合

与 Burn(Rust)的对照

维度 Burn (Rust) Born (Go)
语言 Rust Go
后端抽象 装饰器模式 装饰器模式(借鉴 Burn)
GPU 后端 WGPU (Rust) WebGPU (Go)
类型系统 泛型 + Trait 泛型 + Interface
并发模型 async/await goroutine
部署形态 静态二进制 静态二进制
核心差异 科研+生产兼顾 生产优先

Burn 和 Born 共享同一个架构理念:类型安全的多后端深度学习框架。区别只在于语言生态和侧重点。


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

讨论回复

加载中...
正在加载回复...

正在加载回复...

推荐
智谱 GLM-5 已上线

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

领取 2000万 Tokens 通过邀请链接注册即可获得大礼包,期待和你一起在 BigModel 上畅享卓越模型能力
登录