从前面的发展过程也可以看到,网络本身从早期的几十 M(transformer)发展到现在几百个 B(GPT-3、PaLM),消耗的语料库也是越来越大,难道大就是好吗?OpenAI 的一些学者给出了 NLP 模型的 scaling laws(非 embedding 参数个数、数据集大小、训练计算时间)
总结下来:小模型不 work -> 不花钱(硬件、计算时间)不 work。真的对科研单位很不友好的结论。据说当年 OpenAI 成立的初衷是走“反大公司”(也许暗指 Google)的路线,认为 AI 技术不应该仅仅被大公司拥有,但是其非盈利的属性很快就向资本低了头(微软下了手)。为了克服这样一个大规模的计算问题,其实很早就有一些 infrastructure 方面的工作展开,纯粹的硬件堆叠也需要相应的配套软件才能发挥最大的效能。
lingvo
较早出现在 TF 上面的 lingvo 框架是专门为 seq2seq 建模提供的,这里可以看见通过它刷 paper 的效率还是很高的。它本身可以看成是一种设计好的编程习惯,通过一些共同的抽象,如 model/task/layer/input generator/params/experiment configurations/job runners 获得较为一致的封装。其实之前通过 estimator 自己写的库的结构感觉也差不太多,只是没有这么多人员 share 过也不如它如此 polished,不如它这么成熟了。
PaLM
Google 在 2022 年又提出了个新名词 PaLM(pathways LM),这是一个 dense decoder only 的 transformer 模型,训练使用了 pathways 系统,这是一个更为底层的编程框架,为什么我们会需要这样一个系统呢?
系统
我们知道
- 现代的 CPU 和加速器(如 TPU/GPU)之间使用了带宽较高的 PCIe 连接,这一般是通过带宽 x lane 数目决定的,PCIe 4.0 每条 lane 可以有 2GB/s 的速度,最多 32 条 lane 支持 64GB/s 的传输速率,而 PCIe 5.0 每条的速度能达到 4GB/s。
- 同时加速器之间可以通过一些特殊的连接(NVLink)完成同主机上的连接,如 NVIDIA 这个系统第二代速度就有 300GB/s,第三代 600GB/s(A100),第四代到了 990GB/s(H100)
TPU 是个很奇葩的存在,因为 Google 仅仅在自己的数据中心里面用,不单卖(单买的是 edge computing 用的只支持 tf-lite 的 coral 设备)。可以参看这篇了解一些细节
- 一台 TPU node 是一个高性能的 CPU 主机搭配一块 TPU 板子,这块板子好像是 PCIe 3.0 16 通道的连接(16GB/s)
- TPUv4 整块板子有 32GiB 的存储(相当于“显存”),带宽达到了 1200GBps
- 一块板子上有四颗 TPU 芯片,每个芯片有两个 TensorCore,每个 TensorCore 有 4 个 MXU、一个矢量单元,一个向量单元
- 而 TPU 芯片之间使用 ICI(Inter-Core Interconnect),在 TPUv2 时这个带宽就到了 496Gb/s,每片拥有 4 个连接(形成 2D torus 结构),而 v4 每片拥有 6 个连接(3D torus 结构)
- 1024 台 TPU node 可以组成 TPU pod(4096 个 TPU chip,算力超过 1.1 exaflops),这个 3D torus 可以获得类似 16x16x16 的结构
之前的计算框架比较难以解决一些复杂的情况,参看访问 TPU 方式:
- 通过 TPU VM 直接连接到 TPU node/host,用户代码在 TPU node 上执行
- 通过 User VM,而 User VM 与 TPU node 之间通过 gRPC 通信,用户无法直接访问 TPU node
这导致之前的一些计算框架出现了一些限制:
- JAX/PyTorch 使用的是类似第一种方式,好处是进行 collective op 的时候可以利用 ICI 的高速连接;但是这种结构非常难以支持 MPMD(为了避免死锁)。这意味着要么一个人独享这个硬件(难以虚拟化)
- TF v1 使用的类似后者,控制器单独在一个地方执行,而 heavy lifting 的事情是 TPU node 承接的。但是这个设计过于简单(认为不需要太多的 TPU node),因此一旦任务变得复杂庞大,其中通过网络(DCN,datacenter network)进行的操作就会变得非常的昂贵
但是并不是后者一无是处,因为这个单独的 controller 的存在,使得我们实现 SPMD 内部的执行顺序非常容易,但是(由于没有 scheduler)仍然不能解决 MPMD 问题里面的执行顺序。
Pathways 的出现就是为了解决这些计算框架下产生的不能很好的规模化、支持 MPMD 的问题,它会考虑到 ICI/DCN 的连接,甚至能让程序执行在多个 TPU pod 之上(一般 TPU pod 内部都仅仅使用 ICI)。这是一个极为复杂的工程性的问题,但是 Google 之前就积累了不少相关的技术,如 XLA、TF graph 与 executor。下面稍微看一下系统构架
- 在 Pathways 中一个核心的组件是 resource manager,它管理的是被抽象成为设备岛的东西(简单的理解成为 TPU pod),岛之间使用 DCN 连接。
- 用户需要通过一个客户端启动自己的程序,它需要向 resource manager 注册,并生成一个设备位置无关的中间表示形式(MLIR),该表示被逐步的优化、下放到更低层的时候会考虑到很多细节,比如网络连接等,然后交由 TPU nodes 去执行
- 这些计算通过 Plaque 进行协调
一些神奇的事情:
- NVIDIA / Microsoft 他们也有一个自己的系统,参看这篇。
- TPUv4 还有一个“孪生”的 TPUv4i,纯用来做 inference,由于推断过程中不需要做 gradient 这类 collective op 的操作,因此可以减少在 ICI 上面的开销,也可以降低功耗,这可能在 v2/v3 上重视(被同时用作训练和推断)不够
模型
PaLM 拥有 540B 参数,主要使用的 dense decoder-only transformer,如此庞大的计算规模甚至需要多个 TPU pod。同时研究还发现模型达到一定的程度之后,性能会突飞猛进(超过 power law)。其中引入了一个让 LM 获得 chain of thought 的策略,即使用 chain of thought prompting 训练。
PaLM 也用了很多之前的工作,它提到了下面这些
- SwiGLU 激活函数
- parallel layers:不再先执行 attention,然后 MLP,而是将输入 layer normalized 之后分别通过 attention 与 MLP 再与自己加起来。这可能是对 TPU 做的性能优化
- multi-query attention:对 decoding 有较大的性能帮助
- RoPE embedding:没有用 absolution / relative position embedding,还挺神奇是深圳的一家 NLP 相关的公司提出来的
PaLM-E
这几天 Google 忙不迭的发布了 PaLM-E,在 PaLM 的基础上它进一步融合了图像输入、机器人控制,
- 输入除了文本,这里加入了 ViT 生成的图像 token,应该还有一些其他传感器的数据可以使用类似的方式作为输入
- 输出是 LLM 产生的 token,这些信息里面有一部分被传递给更底层的模型用来执行机器人的行为
- 同时在某些情况下,PaLM-E 需要处理 control loop:它生成的指令通过机器人完成的过程中,传感器、视觉的反馈又被用来决定是否出现了问题是否需要调整策略,直到任务被完成
看起来 Google 之前发布 Bard 想要赶在 ChatGPT + bing 之前,这次 PaLM-E 是为了 GPT-4 吗?