大语言模型系统:【CMU 11-868】课程学习笔记05——深度学习框架设计(Deep Learning Framework Design)
大语言模型系统:【CMU 11-868】课程学习笔记05——深度学习框架设计(Deep Learning Framework Design)
前言
【CMU 11-868】课程面向研究生开设,聚焦“从算法到工程”的大语言模型系统构建全过程。课程内容包括但不限于:
- GPU 编程与自动微分:掌握 CUDA kernel 调用、并行编程基础,以及深度学习框架设计原理
- 模型训练与分布式系统:学习高效的训练算法、通信优化(ZeRO、FlashAttention)、分布式训练框架(DDP、GPipe、Megatron-LM)。
- 模型压缩与加速:量化(GPTQ)、稀疏化(MoE)、编译技术(JAX、Triton)、以及推理时的服务化设计(vLLM、CacheGen)。
- 前沿技术与系统实践:涵盖检索增强生成(RAG)、多模态 LLM、RLHF 系统,以及端到端的在线维护和监控。
一、如何设计一个深度学习框架(How to design a deep learning framework)
1.1 TensorFlow 的设计理念(Design ideas in TensorFlow)
1️⃣ 深度学习框架(Deep Learning Frameworks (also for LLMs))
- 可灵活定义任何神经网络;
- 支持未来的自定义算子/层;
- 对机器学习工程师而言高效实用;
- 隐藏底层细节(无需编写cuda);
- 自动微分(无需手动推导梯度计算);
- 在大规模训练和推理中具有高效性;
- 能根据数据和模型大小自动扩展;
- 自动硬件加速;
2️⃣ 深度学习编程框架(Deep Learning Programming Framework)
- 使用数据流图(数据在计算图中流动)来制定机器学习计算;
- TensorFlow是一个用于表达机器学习算法的接口,也是一个用于执行此类算法的实现工具;
- PyTorch是一个用于张量计算、深度学习和自动微分的编程框架;
| 方面 | PyTorch | TensorFlow | JAX | NumPy |
|---|---|---|---|---|
| 主要用途 | 深度学习 | 深度学习 | 数值计算与机器学习 | 数值计算 |
| 编程范式 | 动态(即时执行,Eager) | 静态图(Graph)或即时执行 | 函数式编程(函数变换) | 过程式 |
| 自动求导 | 动态计算图 Autograd | 静态 / 动态计算图 | 基于函数变换的 grad / jit |
不支持 |
| 硬件支持 | CPU / GPU / TPU | CPU / GPU / TPU | CPU / GPU / TPU | 仅 CPU |
| 易用性 | 非常 Pythonic | 学习曲线稍陡 | Pythonic + 函数式 | 非常简单,原生 Python |
| 生态系统 | PyTorch Lightning、TorchVision 等 | TensorBoard、TFX 等 | 与 NumPy 高度集成 | 无完整生态 |
| 并行能力 | DataParallel / DDP 多 GPU | tf.distribute 多 GPU / TPU |
pmap 多 GPU / TPU |
不支持并行 |
3️⃣ TensorFlow框架(TensorFlow)
核心思想:将数值计算表示为计算图。
- 图节点是具有任意数量输入和输出的运算;
- 图的边是在节点之间流动的张量;
- 张量:多维数组。
4️⃣ 作为张量的数据(Data as a Tensor)
张量是多维数组。是向量和矩阵的推广。
tf.constant([[1, 2], [3, 4]])是一个元素类型为int32的2x2张量。
PyTorch对应的语法为:torch.tensor([[1., 2.], [3., 4.]])。
5️⃣ Tensorflow中的计算图(Computation Graph in Tensorflow)
对于下面的过程:
h = 𝑅 𝐸 𝐿 𝑈 ( 𝑊 𝑥 + 𝑏 ) ℎ = 𝑅𝐸𝐿𝑈(𝑊𝑥 + 𝑏) h=RELU(Wx+b)
TensorFlow框架的代码实现如下:
import tensorflow as tf
b = tf.Variable(tf.zeros((100,)))
W = tf.Variable(tf.random_uniform((784, 100), -1, 1))
x = tf.placeholder(tf.float32, (1, 784))
h = tf.nn.relu(tf.matmul(x, W) + b)
1.2 TensorFlow/PyTorch 中的基本图节点类型(Basic Graph node types in Tensorflow/Pytorch)
1️⃣ 变量节点(Variable Node)
定义:tf.Variable(initial_value=None, trainable=None, name=None)。
- 变量是有状态的节点,它们会输出其当前值。
- 状态在图的多次执行中被保留。‘
- 主要是参数。
示例:b = tf.Variable(tf.zeros((100,)))。
h = 𝑅 𝐸 𝐿 𝑈 ( 𝑊 𝑥 + 𝑏 ) ℎ = 𝑅𝐸𝐿𝑈(𝑊𝑥 + 𝑏) h=RELU(Wx+b)

2️⃣ 占位符节点(Placeholder Node (Tensorflow v1))
定义:tf.placeholder
- 表示输入、标签……;
- 值在执行时输入;
- TensorFlow v2中的占位符无需明确定义;
示例:x = tf.placeholder(tf.float32, (1, 784))。
h = 𝑅 𝐸 𝐿 𝑈 ( 𝑊 𝑥 + 𝑏 ) ℎ = 𝑅𝐸𝐿𝑈(𝑊𝑥 + 𝑏) h=RELU(Wx+b)
3️⃣ 数学运算(Mathematical Operations)
- 矩阵乘法:
tf.linalg.matmul(a, b)(PyTorch:torch.matmul(a, b)); - 元素相加:
tf.math.add(a, b)(PyTorch:torch.add(a, b)); - 激活函数:
tf.nn.relu(a)(ReLU: R e L u ( x ) = { 0 , x ≤ 0 x , x > 0 ReLu(x)=\begin{cases}0, & x\leq0 \\ x, & x>0\end{cases} ReLu(x)={0,x,x≤0x>0,PyTorch:torch.nn.ReLU(a))。
示例: h = R e L U ( W x + b ) h=ReLU(Wx + b) h=ReLU(Wx+b)。

4️⃣ 运行图(Running the Graph)
在TensorFlow v1中,要通过会话部署图:绑定到特定的执行上下文(例如CPU、GPU)。
with tf.Session() as s:
…
s.run()

5️⃣ 定义损失(Defining Loss)
- 为标签使用占位符;
- 使用标签和预测构建损失节点;
prediction = tf.nn.softmax(...) #Output of neural network
label = tf.placeholder(tf.float32, [100, 10])
cross_entropy = -tf.reduce_sum(label * tf.log(prediction), axis=1)
6️⃣ 梯度计算(Gradient Computation)
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
tf.train.GradientDescentOptimizer是一个优化器对象;tf.train.GradientDescentOptimizer(lr).minimize(cross_entropy)会向计算图中添加优化操作;- TensorFlow 图节点附加了梯度运算;
- 通过自动微分计算相对于参数的梯度;
1.3 总体设计原则(Overall design principles)
1️⃣ TensorFlow的核心构造(Core TensorFlow Constructs)
- 所有节点都返回张量;
- 节点的计算方式对于TensorFlow框架是无法区分的(How a node computes is indistinguishable to TensorFlow);
- 在TensorFlow v1中:元编程——构建用于实际计算的图。此时尚未进行任何计算!
- TensorFlow 2 版本具有即时执行模式,计算会立即执行(本质上是构建图并应用计算)。
2️⃣ 设计原则(Design Principles)
- 基本运算符的数据流图;
- 延迟执行(两阶段):
- 1、定义程序,即带有占位符的符号数据流图,本质上是构建计算图;
- 2、在可用设备集上执行程序的优化版本。
3️⃣ 动态流控制(Dynamic Flow Control)
问题:支持包含条件和迭代控制流的机器学习算法,例如
- 循环神经网络(RNN)和长短期记忆网络(LSTM);
- 自回归解码器(Autoregressive decoder);
解决方案:添加条件(if语句)和迭代(while循环)编程结构。
4️⃣ TensorFlow架构(TensorFlow Architecture)
核心部分采用C++编写,非常低的开销;
具有用于指定/驱动运算的不同前端,支持Python和C++,同时易于添加更多语言;

5️⃣ TensorFlow实现(TensorFlow Implementation)
- 半解释型;
- 每个基本操作调用一次GPU内核;
- 可通过自定义C++进行批量操作;
- 保证数据流图中的基本类型安全(图构建时出错)。

二、动手实现一个迷你Tensorflow(Hands-on practice to implement a mini-tensorflow)
作业链接:https://github.com/llmsystem/llmsys_code_examples/tree/mai n/mini_tensorflow。
请按照说明在以下位置填写代码:
https://github.com/llmsystem/llmsys_code_examples/blob/mai n/mini_tensorflow/mini_tensorflow.ipynb。
完整代码提供于:
三、程序在TensorFlow框架的执行(Execution in Tensorflow)
1️⃣ Tensorflow执行关键组件(Tensorflow Execution Key Components)
类似于MapReduce、Apache Hadoop、Apache Spark等。

2️⃣ 客户端(Client)

3️⃣ 主节点(Master)

4️⃣ 计算图划分(Computation Graph Partition)


5️⃣ 执行(Execution)

6️⃣ 同步与异步(Synchronous vs Asynchronous)
- 由节点决定:用于屏障的队列节点;
- 同步速度几乎与异步相当;
- 默认模型是异步的;
7️⃣ 容错(Fault Tolerance)
假设:
- 细粒度操作:“任务不太可能频繁失败,以至于单个操作需要容错能力” );
- “许多学习算法不需要强一致性”;
解决方案:用户级检查点(提供2个操作):
save():将一个或多个张量写入检查点文件;restore():从检查点文件中读取一个或多个张量。
8️⃣ 性能(Performance)
单节点性能:

分布式吞吐量:

推荐课外阅读资料
TensorFlow论文:https://www.usenix.org/system/files/conference/osdi16/osdi16-abadi.pdf。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)