乱谈府

乱谈府

大模型框架

27
2025-04-12
大模型框架

本文是书籍 # AI Engineering: Building Applications with Foundation Models 读书笔记的另一部分。

相较与上篇博文聚焦于大模型的调优技术。本文是整体构建一个 AI 系统的框架,但有些知识点较为零散,随时同步笔记更新。

整体 AI 框架

整个 AI 模型架构可以体现为:
image.png

从最基础的 query 和 response 流程开始,逐步增加不同的组件:

  • Enhance Context 增强上下文内容:包括 RAG,agent 等相关技术,加入各种数据库等,加强模型回复性能。
  • Put in Guardrails 加入防护:包括输入和输出的防护,屏蔽输入的敏感信息,防止输出隐私泄露等问题,过程中要权衡好性能和延迟的关系。
  • Add Model Router and Gateway 添加模型路由和网关:针对不同的提问,可以使用不同的模型进行回复。先使用模型(router)进行意图判断和下一步行动的预测,这里的模型可以使用一些基础模型或小的分类器模型,再分发给不同的模型进行后续处理。整个流程可以 routing - retrieval - generation - scoring 去理解。网关主要用于调用不同的模型(整合 API),有一些相关库例如:Portkey’s AI GatewayMLflow AI GatewayWealthsimple’s LLM GatewayTrueFoundryKong, and Cloudflare.
  • Reduce Latency with Caches 使用缓存机制减少延迟。包含精确的缓存和语义缓存,用于快速响应。
  • Add Agent Patterns 根据具体的需求添加不同的代理模式,由于实现整体的工作流。

整个过程中需要用不同的监控指标去评估各个模块的性能,借助日志记录运行流程,以便快速排查问题。并且收集反馈的过程尽量做到无缝集成,例如 openai 主动询问哪个回复更好。

一些常见的模型框架包括 LangChainLlamaIndexFlowiseLangflow,Haystack 等等。

基本模型相关概念

模型规模衡量

大模型现在多以 Transformer 为基础架构,衡量模型大小的关键值如下:

  • The models dimension determines the sizes of the key, query, value, and output projection matrices in the transformer block. Q,K,V 值和输出投影矩阵的大小。
  • The number of transformer blocks. Transformer 块的数量。
  • The dimension of the feedforward layer.
  • The vocabulary size.

参数估算:例如,如果模型具有 70 亿个参数,并且每个参数使用 2 个字节(16 位)存储,则我们可以计算出使用此模型进行推断所需的 GPU 内存至少为 140 亿个字节(14 GB)。
但如果模型稀疏,参数估计会有偏差。例如MoE (mixture-of-experts) 技术,MOE 模型分为不同的参数组,每个组都是专家。只有一个专家的子集有效(用于处理每个令牌)。混合 8x7b 是八位专家的混合物,每个专家都有 70 亿个参数。如果没有两个专家共享任何参数,则其应有 8×70 亿个参数。但是,由于某些参数正在共享,它只有 467 亿参数。

模型计算要求的更标准化的单元是 FLOP (floating point operation)
FLOPs 测量一项任务的计算要求,FLOP/s 测量机器的峰值性能。两者写的比较相似,为避免混淆,OpenAI 等会用 FLOP/s-day 去衡量。

1 FLOP/s-day = 60 × 60 × 24 = 86,400 FLOPs

总结,衡量模型的规模:

  • Number of parameters
  • Number of tokens a model was trained on
  • Number of FLOPs

Post-Training 训练后步骤

关于 RLHF
RLHF 依靠奖励模型(reward model)。给定一对(提示,响应),奖励模型输出了响应效果的分数。独立评估每个样本也被称为点评估(pointwise evaluation)。
奖励模型可以在另一个模型(例如预训练或 SFT 模型)上从头开始训练或微调。

采样 Sampling

模型通过采样过程后进行构建输出。通常输出会取对数 logprobs

有如下多种采样策略:

  • Temperature:温度越高,选取最高 logit 值的可能性就越小。温度越低,模型输出值越一致(T=0)。通常建议使用0.7的温度用于创造性用例,因为它可以平衡创造力和可预测性。
  • Top-k:为减少输出计算成本,仅选取前 k 个(50~500)logits 上计算 softmax 得出最终结果。
  • Top-p:也称为核采样(nucleus sampling)。模型按降序对最可能的下一个值的概率求和,并在总和达到 p 时停止。仅考虑此累积概率内的值。语言模型中 top-p 采样的常见值通常在 0.9 到 0.95 之间。

测试输出效果时,通常使用 logprobs,它可以将相乘概率转化为相加

p ( I l o v e f o o d ) = p ( I ) \times p ( I | l o v e ) \times p ( f o o d | I )
l o g p r o b ( I l o v e f o o d ) = l o g p r o b ( I ) + l o g p r o b ( I | l o v e ) + l o g p r o b ( f o o d | I , l o v e )

为了避免偏向短序列,通常对除以序列长度得到平均 logprob。

结构化输出

主要对以下两种情况至关重要:

  • 需要结构化输出的任务。最常见类别是语义解析,涉及将自然语言转换为结构化的机器可读格式。
  • 下游应用程序使用其输出的任务。在这种情况下,任务本身不需要构造输出,但是由于其他应用程序使用了输出,因此需要通过这些应用程序来解析它们。

评估 AI 系统的方法

评估基础模型有以下难点

  • 越高质量的模型越难以评估
  • 基础模型的开放性质,无法同传统方法进行评估
  • 大多数模型都是黑匣子,不提供详细的模型结构。

接下来列举一些开放性的评估方式

语言模型指标

语言模型的指标,以下 4 个值密切相关。

  • cross entropy 交叉熵
    用于衡量模型预测的概率分布与真实分布之间的差距,交叉熵越小,说明模型的预测越精准。
    H(P, Q) = -\sum_{x} P(x) \log Q(x)
  • P(x) 是真实分布(通常是训练数据中的分布)。
  • Q(x) 是模型预测的分布。
  • perplexity, PPL 困惑度
    困惑度是交叉熵的指数形式: PPL = 2^{H(P, Q)}
    同样可以使用自然对数:PPL = e^{H(P, Q)}
    模型在预测下一个 token 时的平均不确定性。PPL 越小,模型越确定,越能准确预测下一个 token。

  • BPC (bits-per-character)
    BPC=H(P,Q)H (P, Q)2 为底的对数计算。
    衡量的是编码每个字符所需的平均信息量。如果 BPC = 1.5,则表示每个字符平均需要 1.5 个比特来表示。BPC 越小,说明模型的预测越精准。

  • BPB (bits-per-byte)
    与 BPC 类似,字节(byte)而非字符(character)为单位。BPB = 8 \times BPC

概念定义单位计算公式
交叉熵 (H)衡量模型预测的概率分布与真实分布的差距bits/token(如果以 2 为底)-\sum P(x) \log Q(x)
困惑度 (PPL)交叉熵的指数形式,表示平均不确定性无单位2^{H(P, Q)}
BPC(每字符比特数)交叉熵的另一种表示方式(以 2 为底)bits/character-\sum P(x) \log _2 Q(x)
BPB(每字节比特数)BPC 的 8 倍,以字节为单位衡量信息量bits/byte8 \times BPC

关于 Perplexity 的解释:

  • 数据结构化越高,perplexity 越低。
  • 词汇量越高,perplexity 越高
  • 上下文长度越长,perplexity 越低

相似度测算

需要评估响应与参考数据的相似性,可以使用以下方法:

  • 让评估者做出判断
  • Extra match 确切匹配,生成与参考是否完全相同。
  • Lexical similarity 词汇相似性,生成与参考词汇外观相似度。
    使用 N-gram similarity,基于 N 个词汇序列而不是单个单字计算相似度。通常的指标为 BLEU, ROUGE, METEOR++, TER, and CIDEr。
  • Semantic similarity 语义相似性,生成与参考含义的相似程度。
    需借助 embedding,将文本转化为数值表示,这也是最常见的方法。通常指标为 BERTScore (embeddings are generated by BERT) and MoverScore (embeddings are generated by a mixture of algorithms).

相似度测算是一个重要的评估过程,包含在 AI 系统的多种流程中。

  • Retrieval and search 查找类似查询的项目,包含直接和嵌入方法。
  • Ranking 排行:基于与查询的相似程度对项目进行排名。
  • Clustering 聚类:聚类彼此相似的数据。
  • Anomaly detection 异常检测:检测与其余的最小相似的项目。
  • Data deduplication 数据删除:删除与其他项目太相似的项目。

借助 AI 进行评估

很多情况下可以借助 AI 进行评估工作,此时 AI 评估的 prompt 需要符合以下标准:

  • 模型要执行的任务,例如评估生成的答案与问题之间的相关性。
  • 模型应遵循的标准进行评估,例如“你的主要关注点是确定生成的答案是否包含足够的信息,以根据标准答案来回答所提出的问题。”指令越详细,越好。
  • 设置评分系统(scoring system),例如:
    • 分类,例如好/坏或相关/无关/中性。
    • 离散的数值,例如 1 到 5。离散的数值可以被视为分类的特殊情况,其中每个类具有数值解释而不是语义解释。
    • 连续数值,例如 0 到 1 之间。评估相似度可以用到。

image.png

AI 评估的不足之处:

  • Inconsistency 不一致性。
  • Criteria ambiguity 标准歧义。不同工具模型的评分系统和定义是不统一的。因此如果无法看到对应的 prompt 不要去轻信 AI 评估
  • Increased costs and latency 增加成本和延迟。实际上可以使用与被评判模型性能较低的模型用作评判,因为判断比生成更加简单。
  • Biases of AI AI 判断有偏差。很多 AI 会倾向于第一个答案,而人类更会倾向于最后一个答案。有些时候也会偏向于更长的答案,尽管很多时候表达结果是冗余的。

常用的 AI 评估方法:

  • Reward model 奖励模型
  • Reference-based judge 基于参考的评估。基于正常的参考评估其相似性。
  • Preference model 偏好模型。给定 prompt 和多个不同的回答结果,判断哪个回答更加符合用户的偏好。
    image.png

AI 基础模型最终目标是为了下游的应用服务。

评估 AI 系统

具体的实践过程可以如下参考

评估标准

评估 AI 系统可以从以下几方面进行评估:

  • domain-specific capability 特定领域的能力
    • 是否有在目标领域中实现该功能的能力。
  • generation capability 生成能力
    • Factual consistency 事实一致性,包括上下文内容的一致和全局知识一致,注意幻觉的产生。同时注意 Knowledge-augmented verification 即知识调查的验证能力。其验证能力可拆解为如下四个步骤:
      • 使用 AI 将回答分为单个语句。
      • 修改每个语句使其独立(消除上下文的指代与歧义)
      • 对于每个语句进行检索操作(内部 or 外部开放 API 检索)
      • 借助 AI 确定语句与检索内容是否一致。
    • 事实一致性是针对 RAG 系统的关键评估标准。
  • instruction-following capability 遵循指导能力
    • 按照要求进行输出是很重要的能力。不同基准测试有着不同的标准,常见的有 IFEval and INFOBench
      • Google 基准 IFEVAL(Instruction-Following Evaluation)的重点是该模型是否可以按照预期格式产生输出。
      • Infobench,对跟随指令的含义有更广泛的看法。除了评估模型遵循 IFEVAL 这样的预期格式的能力外,InfoBench 还评估了模型遵循内容限制的能力
    • Roleplaying 角色扮演,扮演虚构假定的角色完成对应任务。评估角色扮演能力的基准包括 RoleLLM (Wang et al., 2023) 和 CharacterEval (Tu et al., 2024)
  • cost and latency 成本和延迟
    • 评估模型时,重要的是平衡质量,延迟和成本三个方面。

模型选择

选择一个合适的模型至关重要,模型可以分为硬属性(模型无法更改的部分,例如使用许可,训练数据,模型大小等)和软属性(可以自我更改的部分,例如准确率,模型毒性,事实一致性等)
模型选择评估可包含如下 4 个步骤:

  1. 根据硬属性过滤出不合适的模型。
  2. 使用公开可用的信息,例如,基准性能和排行榜排名,缩小尝试,寻找合适模型,平衡不同的目标。
  3. 使用自己的 pipeline 进行评估,找到最佳模型。
  4. 不断监视生产中的模型以检测故障并收集反馈以改善应用程序。

image.png

关于使用自托管模型还是 API,可以从如下几点考虑:

  • Data privacy 数据隐私
  • Data lineage and copyright 数据来源和版权
  • Performance 性能表现
  • functionality 功能,例如 Scalability,功能调用,结构化输出,输出保护等等。
  • costs API 成本
  • control, access, and transparency 可控制程度和透明度
  • on-device deployment 设备部署问题

公开的模型基准榜
Huggingface 排行榜 Open LLM Leaderboard - a Hugging Face Space by open-llm-leaderboard

如何设计评估 pipeline

遵循以下内容:

  1. Evaluate All Components in a System 评估系统中所有的组件。独立判断出各个组件的功能性,保证都能在要求中运行。
  2. Create an Evaluation Guideline 创建评估指南
    • 定义评估标准(相关性,事实一致性,安全情况等等)。
    • 创建带有具体示例的评分系统。
    • 与真实世界的具体业务相互联系。
  3. Define Evaluation Methods and Data 评估方法和数据。选择合适的具体的方法和对应的数据进行效果评估。针对模型性能,OpenAI 的经验是,对于分数差的每 3 倍降低,所需的样本数量增加 10 倍。

数据集工程

在数据规划上,数据需遵循以下标准:

  • 数值质量:少量的高质量数据可以胜过大量嘈杂的数据。数据一般要求以下特征:相关,与任务要求保持一致,持续性高,格式统一正确,数据不重复和合规。
  • 数据覆盖范围:数据尽可能广泛,例如能够理解错别字,那么训练数据就应该包含错别字。
  • 数据数量:从小数据集开始测试,预估需要多少数据。如果有少量数据,则可能需要在更高级的模型上使用 PEFT。如果有大量数据,可以使用较小的模型进行完整的 finetuning。

数据增强与合成
对于有限的数据,可以用同义词的词典找到类似的单词,也可以通过在单词嵌入空间中彼此接近嵌入的词来找到类似的单词。数据合成的步骤可以使用 AI 模型实现,并可以像真实数据一样使用启发式方法过滤

数据处理
优化数据处理效率的方法:

  • 首先对数据进行观察,选择合适的处理顺序以节省时间。
  • 批量数据脚本运用到数据之前保持进行充分的测试。
  • 所有的数据处理保留原始的副本。

处理过程包括:

  • 检查数据:评估其质量,获取相关信息和统计方面数据,是否应符合某种分布等。
  • 避免重复数据:重复数据会引发模型的偏见。删除重复数据的方案可以考虑相似度测量等技术。一些删除重复数据的项目 dupeGuruDedupedatasketchTextDistanceTheFuzz, and deduplicate-text-datasets.
  • 清洗数据:制定流程,保持模型的安全性。
  • 格式化数据:保持数据统一的格式化输入用于后续训练等操作。