TPU v4: An Optically Reconfigurable Supercomputer for Machine Learning with Hardware Support for Embeddings

本论文是 Google 发表在Proceedings of the 50th Annual International Symposium on Computer Architecture ISCA ‘23 2023上的Industry Section工作。

Google 在 ASIC (Application Specific Integrated Circuit, 专用集成芯片) 上的工作始于 2015 年第一代 TPU (Tensor Processing Unit), 在2017、2018、2021年分别推出了 v2, v3, v4 版本,核心数量从 64 个以 4 倍增长的速度达到 4096 个,此后在 2023 年推出 TPU v5e/v5p,2024年推出 TPU v6,具备 1836 TOPS1,但是还是低于英伟达 H100 的 3026 TOPS (高于 A100 的 624 TOPS2),尽管算力具备差距,其基于 Palomar OCS (Optical Communcation Switch, 光交换机) 的网络提高了计算集群的性能。

TPU v4 是谷歌首次引入 OCS 优化通信,并提出 Sparse Core 优化稀疏计算的版本,下面将重点介绍这两方面。

Entry:Zotero link URL link

NCCL: Ring based Reduce-Scatter/All-gather 分析

NCCL (音 “Nickel”) 是一个独立的库,包含用于 GPU 的标准通信例程。它已针对使用 PCIe、NVLink、NVswitch 以及使用 InfiniBand Verbs 或 TCP/IP 套接字的平台进行了优化,以实现高带宽。NCCL 支持单个节点或跨多个节点安装的任意数量的 GPU,并且可以在单进程或多进程(例如 MPI)应用程序中使用。

2017 年百度将 HPC 领域的 Ring AllReduce 算法引入机器学习领域,支持 GPU 的告诉通信。本文主要分析 NCCL 的 Reduce-Scatter/All-Gather 的算法逻辑。

Megatron-DeepSpeed:训练 345M GBT-2 数据准备

随着大语言模型的快速发展,分布式训练成为训练大规模模型的关键技术。Megatron-LM 和 DeepSpeed 是当前最流行的两种框架,它们结合使用可以大幅提升训练效率,降低显存占用。

本文将介绍如何利用 Megatron-DeepSpeed 训练一个 3.45亿参数(345M)的 GPT-2 模型,重点讲解数据预处理和训练的关键步骤。

ZeRO++: Extremely Efficient Collective Communication for Giant Model Training

本论文是Guanhua Wang, Heyang Qin, Sam Ade Jacobs, Connor Holmes, Samyam Rajbhandari, Olatunji Ruwase, Feng Yan, Lei Yang, Yuxiong He发表在 ICML'24上的工作。

本工作主要通过量化和分级通信,分别优化了训练中 ZeRO3 中的三种不同集合通信过程,使跨节点通信的总量从 3M 降低到 0.75M.

Entry:Zotero link URL link

Baseline: Faasm

Faasm 是来自 Imperial College London 的 Simon Shillaker 和 Peter Pietzuch 与 ATC'20上提出的工作。

Faasm 通过 WebAssembly 提供的软件故障隔离来隔离执行函数的内存,同时允许在同一地址空间内的函数之间共享内存区域以避免高昂的数据移动成本。其提供了 Faaslets 运行时,使用标准 Linux cgroups 来隔离 CPU 和网络等资源,并提供低级 POSIX 主机接口以便进行网络、文件系统访问和动态加载,并通过快照技术减少恢复 Faaslets 初始化时间。

本文主要介绍如何部署 Faasm 并在上面开发 Benchmark 应用。

Wastime: `#[!no_std]` Support

在 v21.0.0 的 Release 版本中,wasmtime 包允许在 #![no_std] 的平台构建,但是只支持编译过程中的 Cargo 特性,目前支持的 Cargo 特性有:runtime, gc, component-model

官方提供了 Example 来表明如何构建这样的 wasmtime

GDB Notebook

利用 GDB 可以做四种主要的事情来帮助调试:

  • 启动程序,指定参数
  • 使程序在指定条件下停止
  • 检查程序停止时发生了什么
  • 更改程序中的内容

截至目前,GDB 15.1 支持的语言包括 Ada, Assembly, C, C++, D, Fortran, Go, Objective-C, OpenCL, Modula-2, Pascal ,Rust.

下面将介绍 GDB 调试的主要用法。

Hugo:配置Callouts

Callouts 是 Obsidian 中增强显示的工具,丰富了原始 Markdown 中具备的标签。

本文主要介绍如何将 Callouts 移植到 Hugo 中,使得本地 Obsidian 预览结果和 Hugo 渲染出来的 Callouts Block 具备一致的效果.

Note
  • 增加可折叠
  • 修复嵌套时样式被覆盖
Nginx:使用 RTMP 模块进行直播

HLS 是最常见的视频流媒体协议,HLS 是一种自适应流媒体技术,可以根据用户的设备和网络条件对播放媒体内容,以获得最佳播放性能。

借助 Nginx RTMP 模块,为服务器添加 RTMP 和 HLS流 直播功能。

Hugo & Obsidian 联动

使用最好的笔记管理软件 Obsidian 进行笔记整理和论文阅读记录,使用 Hugo 将这些内容进行渲染,使用 Git 作为多机器版本控制工具,最终发布到自己的网站,便于查看。

本文将介绍其中的配置和整体联动的思路。