MLSys 学习笔记 1

1. GPU ECC(Error‑Correcting Code)

  • 原理:在显存(VRAM)中为每 N 位数据生成冗余校验位,常见为 SECDED(单错纠正、双错检测)。
  • 实现
    • 专业级卡(Tesla/Quadro/A100、AMD Instinct)默认支持 ECC,消费级卡多关闭或不支持。
    • ECC 逻辑集成在内存控制器,对程序透明。
  • 优缺点
    • 优点:避免显存位翻转导致的 Silent Data Corruption,可监控纠错/未纠错计数。
    • 缺点:约 12.5% 显存开销、5–12% 带宽与延迟损失。
  • 开启与监控(NVIDIA 举例):
1
2
3
4
5
6
7
8
9
10
# 查看 ECC 状态
nvidia-smi -i 0 --query-gpu=ecc.mode.current --format=csv

# 启用 ECC(需重启驱动/机器)
sudo nvidia-smi -i 0 --ecc-mode=ENABLED

# 监控纠错计数
nvidia-smi \
--query-gpu=memory.ecc.corrected.volatile,memory.ecc.uncorrected.volatile \
--format=csv

2. NVIDIA Persistence Mode(持久化模式)

  • 作用:驱动在无客户端时依然保持 GPU 上下文初始化,减少短作业启动延迟;保持稳定 P‑state。
  • 命令
1
2
3
4
5
6
7
8
# 启用持久化模式
sudo nvidia-smi -pm 1

# 禁用持久化模式
sudo nvidia-smi -pm 0

# 查看状态
nvidia-smi -q -d PERSISTENCE
  • 注意:功耗略增;可配合 nvidia-persistenced 守护进程跨重启生效。

3. Ring Reduce(All‑Reduce)算法概览

  • 分段(Scatter):将张量平分 N 段,每轮只在环上沿顺时针传递一段。
  • Reduce‑Scatter:经过 N–1 轮,每段在环上累加所有节点后恰好落在一个归属节点上。
  • All‑Gather:再用同样方式广播各段结果,让所有节点拿到完整聚合值。
  • 通信成本
    • Reduce‑Scatter:每节点发送/接收 数据量
    • All‑Gather:同理
    • 合计 All‑Reduce:

4. Reduce‑Scatter 详细示例(4 节点、向量长 4)

  1. 初始数据
1
2
3
4
Node 0: [ 1,  2,  3,  4]
Node 1: [ 5, 6, 7, 8]
Node 2: [ 9, 10, 11, 12]
Node 3: [13, 14, 15, 16]
  1. 分段规则:下标 0→Seg 0,1→Seg 1,…,3→Seg 3。
  2. 3 轮累加
Segment 轮 1 累加结果 轮 2 累加结果 轮 3 累加结果 最终归属节点 全局和
0 5 + 1 = 6 9 + 6 = 15 13 + 15 = 28 Node 3 28
1 10 + 6 = 16 14 + 16 = 30 2 + 30 = 32 Node 0 32
2 15 + 11 = 26 3 + 26 = 29 7 + 29 = 36 Node 1 36
3 4 + 16 = 20 8 + 20 = 28 12 + 28 = 40 Node 2 40
  1. 结果:各节点分别持有自己负责 Segment 的全局和,为后续 All‑Gather 做准备。