Antkillerfarm Hacking V7.5

DL acceleration » 并行 & 框架 & 优化(七)——LLM System, Alpa

2024-06-27 :: 6012 Words

LLM Inference(续)

上图是一个通常的多batch的LLM的Inference过程。其中黄色表示用户的prompt,蓝色表示LLM生成的文本,红色表示结束符号。

这是改进后的continuous batching的示意图。

https://www.anyscale.com/blog/continuous-batching-llm-inference

How continuous batching enables 23x throughput in LLM inference while reducing p50 latency


https://www.zhihu.com/tardis/zm/art/647813179

大模型文本生成——解码策略(Top-k & Top-p & Temperature)

https://b23.tv/OfdfBnz

如何设置大模型推理参数,top_k,top_p, temperature, num_beams

https://blog.csdn.net/HUSTHY/article/details/125990877

Contrastive Search Decoding——一种对比搜索解码文本生成算法

https://zhuanlan.zhihu.com/p/656707466

DoLa:层对比解码改善LLM的真实性


投机采样使用两个模型:一个是原始目标模型,另一个是比原始模型小得多的近似模型。近似模型用于进行自回归串行采样,而大型模型则用于评估采样结果。

https://zhuanlan.zhihu.com/p/651359908

大模型推理妙招—投机采样(Speculative Decoding)


LLM Inference的性能评估主要有以下几个方面:

  • Time To First Token (TTFT)
  • Time Per Output Token (TPOT)
  • Latency:模型为用户生成完整响应所需的总时间。latency = (TTFT) + (TPOT) * (the number of tokens to be generated)
  • Throughput:一个推理服务器每秒可以为所有用户和请求生成的输出token数量。

https://www.databricks.com/blog/llm-inference-performance-engineering-best-practices

LLM Inference Performance Engineering: Best Practices

vLLM

https://docs.vllm.ai/en/latest/

Easy, fast, and cheap LLM serving for everyone

LLM System

RAG

Retrieval Augmented Generation(检索增强生成):通过检索获取相关的知识并将其融入Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将RAG的核心理解为“检索+生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和Prompt工程,将召回的知识合理利用,生成目标答案。

https://zhuanlan.zhihu.com/p/668082024

一文搞懂大模型RAG应用

https://blog.csdn.net/v_JULY_v/article/details/137711599

RAG进阶之通用文档处理:从RAGFlow、TextMonkey到mPLUG-DocOwl 1.5

https://zhuanlan.zhihu.com/p/695299235

RAG路线图: Reliable, Adaptable, and Attributable Language Models with Retrieval


假设有一个10w的外部数据,我们的原始输入Prompt长度为100,长度限制为4k,通过查询-检索的方式,我们能将最有效的信息提取集中在这4k的长度中,与Prompt一起送给大模型,从而让大模型得到更多的信息。此外,还能通过多轮对话的方式不断提纯外部数据,达到在有限的输入长度限制下,传达更多的信息给大模型。

https://blog.csdn.net/qq_40491305/article/details/130898052

一文看懂LlamaIndex用法,为LLMs学习私有知识

向量数据库

向量搜索在搜索、推荐、NLP等众多应用领域被广泛的使用,典型的互联网业务,包括电商、出行、点评、地图等都大量使用相关技术。随着ChatGPT带来的AI技术应用新热潮,向量数据库又一次地获得了更多的关注。它可以解决LLM不长记性(Memory,记忆)的问题。

普遍认为LLM+Vector Search+API pool会变成复杂AI场景的标准解决方案。

类似Pinecone,Weaviate,Qdrant,Chroma这样的专用向量数据库最初是为了解决ChatGPT的记忆能力不足而出现的Workaround。

最发布的ChatGPT 3.5的上下文窗口只有4K Token,也就是不到两千个汉字。然而当下GPT 4的上下文窗口已经发展到了128K,扩大了32倍,足够塞进一整篇小说了。而且未来还会更大。这时候,用作临时周转的垫脚石——向量数据库SaaS就处在一个尴尬的位置上了。

https://www.zhihu.com/question/603117242

为什么各大VC最近都在投向量数据库?

https://zhuanlan.zhihu.com/p/668509885

向量数据库凉了吗?

其他

gradient_accumulation_steps用于处理当模型的参数数量超过GPU内存容量时的情况。在训练大型模型时,尤其是在使用较小的GPU进行训练时,可能会遇到内存不足的问题。这时,可以使用梯度累积来分割批次,从而使得每个小批次的计算都在GPU的内存限制范围内。

如果设置了gradient_accumulation_steps=N,那么模型会先对N个批次的数据进行前向和反向传播,将这些批次的梯度累积起来,然后才进行一次权重更新。这样,实际上的批次大小相当于 per_device_train_batch_size * N。

参考

https://mp.weixin.qq.com/s/39MYrsB3gXpfzTTOgQjDwg

幻方AI DeepSeek模型背后的万卡集群建设

Alpa

Alpa是一个自动探索分布式策略的工具。

论文:

《Alpa: Automating Inter- and Intra-Operator Parallelism for Distributed Deep Learning》

代码:

https://github.com/openxla/xla/tree/main/xla/hlo/experimental/auto_sharding

文档:

https://alpa.ai/index.html


在介绍Alpa之前,先介绍一下Google的optimization库:

https://github.com/google/or-tools

文档:

https://developers.google.com/optimization

ILP可以分为下列几种类型:

(1)纯整数线性规划(Pure integer linear programming):指全部决策变量都必须取整数值的整数线性规划。有时,也称为全整数规划。

(2)混合整数线性规划(Mimed integer linear programming):指决策变量中有一部分必须取整数值,另一部分可以不取整数值的整数线性规划。

(3)0-1型整数线性规划(Zero-one integer linear programming):指决策变量只能了取值0或1的整数线性规划。

ILP相关的库还有pyomo、cyipopt等。


为了评估不同Sharding策略的好坏,我们需要对Sharding策略建立cost model。

这里的cost主要包括:

  • Communication cost
  • Computation cost
  • Memory cost
  • Resharding cost

其中,Memory cost为该ILP问题的约束条件,其他几个为决策变量的影响因子。

Resharding cost是不同sharding之间切换产生的开销:


MLIR中有mesh dialect用于描述Sharding Spec:

module @sharding_test {
  mesh.mesh @mesh_2d(shape = 4x8)

  func.func @matmul_on_operand_shard_batch_and_k(%arg0: tensor<32x1000x4096xf32>, %arg1: tensor<32x4096x8192xf32>) -> tensor<32x1000x8192xf32> {
    %sharding_annotated = mesh.shard %arg0 to <@mesh_2d, [[0], [], [1]]> annotate_for_users : tensor<32x1000x4096xf32>
    %sharding_annotated_0 = mesh.shard %arg1 to <@mesh_2d, [[0], [1]]> annotate_for_users : tensor<32x4096x8192xf32>
    %0 = tosa.matmul %sharding_annotated, %sharding_annotated_0 : (tensor<32x1000x4096xf32>, tensor<32x4096x8192xf32>) -> tensor<32x1000x8192xf32>
    %sharding_annotated_1 = mesh.shard %0 to <@mesh_2d, [[0]], partial = sum[1]> : tensor<32x1000x8192xf32>
    return %sharding_annotated_1 : tensor<32x1000x8192xf32>
  }
}

如何用数学语言表示一个二维的one-hot:

\[\begin{aligned} \forall (v,u) \in E, \ & \forall i \in [0, k_v), & \sum_{j \in [0, k_u)}\mathbf{e}_{vu} [i,j] \leq \mathbf{s}_v[i] \\ & \forall j \in [0, k_u), & \sum_{i \in [0, k_v)}\mathbf{e}_{vu} [i,j] \leq \mathbf{s}_u[j] \\ \end{aligned}\]


参考:

https://zhuanlan.zhihu.com/p/487588274

用ILP和DP自动探索DL分布式策略——Alpa

https://zhuanlan.zhihu.com/p/571836701

Alpa论文解读

工具

FairScale是由Facebook Research开发的PyTorch扩展库。FSDP就是首发于这个库。


https://zhuanlan.zhihu.com/p/412118353

Kokkos:一个异构并行计算通用平台

数据流并行

数据流并行是Pipeline并行的高阶版本。广义的数据流希望通过图编译找到全局最优策略,本质上是一种把编译器当万金油的惰性做法,深度学习框架在系统调度这种比较粗放的尺度,围绕数据流做了这么多年的自动并行化,最后业界主流实际上的并行策略还是预设的这些Pipeline、Tensor并行的组合,而不是编译器搜出来的自动化的并行策略。

参考

https://mp.weixin.qq.com/s/_1Yr_BbFhlNEW7UtYvAaoA

分布式深度学习,93页ppt概述最新DDL技术发展

https://mp.weixin.qq.com/s/jC5v9BKQvlxa2_6cikXV9w

分布式算法与优化,118页pdf

https://zhuanlan.zhihu.com/p/58806183

深度学习的分布和并行处理系统

https://zhuanlan.zhihu.com/p/56991108

一文说清楚Tensorflow分布式训练必备知识

https://mp.weixin.qq.com/s/r951Iasr4dke6MPHsUO0TA

开源DAWN,Stanford的又一力作

https://mp.weixin.qq.com/s/2jrMDeMcb47zpPfFLEcnIA

深度学习平台技术演进

https://mp.weixin.qq.com/s/L4CMKS53pNyvhhqvQhja0g

5种商业AI产品的技术架构设计

https://mp.weixin.qq.com/s/IqjKdAlGYREqCR9XQB5N1A

伯克利AI分布式框架Ray,兼容TensorFlow、PyTorch与MXNet

https://mp.weixin.qq.com/s/aNX_8UDYI_0u-MwMTYeqdQ

开发易、通用难,深度学习框架何时才能飞入寻常百姓家?

https://mp.weixin.qq.com/s/UbAHB-uEIvqYZCB7xIAJTg

机器学习新框架Propel:使用JavaScript做可微分编程

https://mp.weixin.qq.com/s/Ctl65r4iZNEOBxiiX2I2eQ

Momenta王晋玮:让深度学习更高效运行的两个视角

https://zhuanlan.zhihu.com/p/371499074

OneFlow——让每一位算法工程师都有能力训练GPT

Fork me on GitHub