【AI】LLM开发流程和运行环境简介

【AI】LLM开发流程和运行环境简介

本文介绍了LLM一般的开发流程和运行环境相关内容

接上文,了解了LLM的发展历程,从简单的线性回归模型到神经网络,再到生成式预训练转换器。

【AI】LLM大语言模型是如何工作的

现在更多从实际部署运行的操作上,介绍下LLM在各个平台上的运行。

LLM一般的开发流程

根据 OpenAI 联合创始人 Andrej Karpathy 在微软 Build 2023 大会上所公开的信息,OpenAI 所使用的大规模语言模型构建流程如下图所示。主要包含四个阶段:预训练、有监督微调、奖励建模、强化学习。这四个阶段都需要不同规模数据集合以及不同类型的算法,会产出不同类型的模型,同时所需要的资源也有非常大的差别。

1. 阶段一:数据准备

任何AI模型,要让神经网络输出的结果足够准确,必须以大量的数据来做训练,调节权重参数。数据的准备过程是整个流程的基石,数据的质量和规模直接决定了模型能力的上限。

首先需要构建一个规模庞大(通常是 PB 级别,即数千 TB)且多样化的数据集。来源包括网页数据、书籍、代码、专业文献、对话数据等。 然后要进行数据清洗。原始数据非常“脏”,必须进行严格清洗。例如要进行去重,移除完全相同或高度相似的文本,防止模型过度拟合这些重复内容。还有从质量上过滤,移除低质量文本,有害内容移除,过滤掉色情、暴力、极端言论等内容。最后还有隐私考量,移除个人身份信息。

数据集准备完成之后,要进行分词。计算机不认识“文字”,只认识数字。分词就是将文本转换成模型能理解的数字序列,它能有效地平衡词汇表大小和序列长度。

2. 阶段二:预训练 (Pre-training)

这是最耗时、最烧钱的阶段,目的是让模型掌握语言的“本质”。

现代 LLM 几乎都基于 Transformer 架构。最主流的是 Decoder-only (仅解码器) 架构(如 GPT 系列、Llama、PaLM),它非常擅长生成任务。

最常见的训练目标目标是 Next-Token Prediction 。简单来说,就是给模型一段文本,让它预测下一个最可能出现的词。

例如,输入 "The quick brown fox jumps over the",模型需要输出 "lazy"

通过在数万亿个 Token 上反复进行这个任务,模型可以学习语法、语义、事实知识、上下文理解甚至一定的推理能力。

同时,这一步需要极大规模的算力集群,通常由数千甚至上万块高端 GPU 组成,互联成一个超级计算机。训练时间可能长达数周甚至数月,成本高达数千万至数亿美元。

预训练结束后,我们得到一个 “基础模型” (Base Model)。这个模型博学,但“野性难驯”,它只会续写文本,不一定会听从指令(比如你让它“写首诗”,它可能会续写成“……是一个常见的作业要求”)。

3. 阶段三:对齐 (Alignment)

这是让模型从“文本续写机”变为“智能助手”的关键一步,目的是让模型的输出符合人类的意图 (Intent) 和价值观 (Values)。

这个阶段主要包含两个步骤:

1. 监督微调 (SFT)**

教会模型理解并执行指令。雇佣大量的数据标注员,编写高质量的“指令-回答”对(Prompt-Response pairs),利用这些少量高质量数据集合。

例如:

提示词(Prompt):复旦大学有几个校区?

理想输出:复旦大学现有 4 个校区,分别是邯郸校区、新江湾校区、枫林校区和张江校区。其中邯郸校区是复旦大学的主校区,邯郸校区与新江湾校区都位于杨浦区,枫林校区位于徐汇区,张江校区位于浦东新区。

利用这些有监督数据,使用与预训练阶段相同的语言模型训练算法,在基础语言模型基础上再进行训练,从而得到有监督微调模型(SFT 模型)。让它学会“对话”和“问答”的模式。

经过训练的 SFT 模型具备了初步的指令理解能力和上下文理解能力,能够完成开放领域问题、阅读理解、翻译、生成代码等能力,也具备了一定的对未知任务的泛化能力。

由于有监督微调阶段的所需的训练语料数量较少,SFT 模型的训练过程并不需要消耗非常大量的计算。根据模型的大小和训练数据量,通常只需要数十块GPU,花费数天时间完成训练。

SFT 模型具备了初步的任务完成能力,可以开放给用户使用,很多类 ChatGPT的模型都属于该类型,包括:Alpaca[38]Vicuna[39]MOSSChatGLM-6B 等。

很多这类模型效果也非常好,甚至在一些评测中达到了 ChatGPT 的 90% 的效果。当前的一些研究表明有监督微调阶段数据选择对 SFT 模型效果有非常大的影响,因此如何构造少量并且高质量的训练数据是本阶段有监督微调阶段的研究重点。

2. 偏好对齐 (RLHF)**

让模型的回答更有用、更诚实、更无害。主流技术是 RLHF (Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)。主要有两步:

训练奖励模型 (Reward Model, RM)

奖励建模阶段目标是 构建一个文本质量对比模型 ,对于同一个提示词,SFT模型给出的多个不同输出结果的质量进行排序。

奖励模型(RM 模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。RM 模型与基础语言模型和 SFT 模型不同,RM 模型本身并不能单独提供给用户使用。

奖励模型的训练通常和 SFT 模型一样,使用数十块 GPU,通过几天时间完成训练。由于 RM 模型的准确率对于强化学习阶段的效果有着至关重要的影响,因此对于该模型的训练通常需要大规模的训练数据。

Andrej Karpathy 在报告中指出,该部分需要百万量级的对比数据标注,而且其中很多标注需要花费非常长的时间才能完成。

如图,InstructGPT 系统中奖励模型训练样本标注示例。可以看到,示例中文本表达都较为流畅,标注其质量排序需要制定非常详细的规范,标注人员也需要非常认真的对标规范内容进行标注,需要消耗大量的人力,同时如何保持众包标注人员之间的一致性,也是奖励建模阶段需要解决的难点问题之一。

此外 奖励模型的泛化能力边界 也是在本阶段需要重点研究的另一个问题。如果 RM 模型的目标是针对所有提示词系统所生成输出都能够高质量的进行判断,该问题所面临的难度在某种程度上与文本生成等价,因此如何限定 RM 模型应用的泛化边界也是本阶段难点问题。

强化学习 (RL)

强化学习阶段根据数十万用户给出的提示词,利用在前一阶段训练的 RM 模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。

该阶段所使用的提示词数量与有监督微调阶段类似,数量在十万量级,并且不需要人工提前给出该提示词所对应的理想回复。使用强化学习,在 SFT 模型基础上调整参数,使得最终生成的文本可以获得更高的奖励(Reward)。该阶段所需要的计算量相较预训练阶段也少很多,通常也仅需要数十块 GPU,经过数天时间的即可完成训练。

强化学习和有监督微调的对比,在模型参数量相同的情况下,强化学习可以得到相较于有监督微调好得多的效果。关于为什么强化学习相比有监督微调可以得到更好结果的问题,截止到 2023 年 9 月也还没有完整和得到普遍共识的解释。

此外,Andrej Karpathy 也指出强化学习也并不是没有问题的,它会使得基础模型的熵降低,从而减少了模型输出的多样性。在经过强化学习方法训练完成后的 RL 模型,就是最终提供给用户使用具有理解用户指令和上下文的类 ChatGPT 系统。

由于强化学习方法稳定性不高,并且超参数众多,使得模型收敛难度大,再叠加 RM 模型的准确率问题,使得在大规模语言模型如何能够有效应用强化学习非常困难。

DPO (Direct Preference Optimization) 是一种更新的、更简单的替代技术,它跳过了训练独立奖励模型的步骤,直接使用偏好数据来优化模型,效果也非常好。

4. 阶段四:评估与迭代 (Evaluation)

如何知道模型有多好?需要一套严格的“考试”体系。

  • 学术基准 (Academic Benchmarks):
    • 使用标准化的数据集来测试模型的各项能力。
    • MMLU: 综合能力测试(涵盖数学、历史、法律、计算机科学等57个科目)。
    • HumanEval / MBPP: 代码生成能力。
    • GSM8K: 小学数学应用题(测试推理)。
    • TruthfulQA: 评估模型是否会产生常见的错误信息或谎言。
  • 人类评估 (Human Evaluation):
    • 基准测试有其局限性(可能已被“污染”)。最终,模型的好坏还是需要人来主观判断。
    • 红队测试 (Red Teaming): 专门组织“攻击者” (Red Teamers) 尝试诱导模型说出有害、违规或错误的内容,以测试其安全性和鲁棒性。
  • 迭代 (Iteration):
    • 评估中发现的问题(如“数学不行”、“容易被诱导”)会反馈回前面的阶段,通过补充更高质量的数据、改进对齐算法等方式进行优化,然后重新训练和评估。

5. 阶段五:部署与推理

这是将模型交付给最终用户的阶段。

  • 模型优化 (Optimization):
    • 预训练出的模型非常庞大(动辄几百 GB),直接运行(推理)的成本高昂且速度慢。
    • 量化 (Quantization): 将模型的权重从高精度(如 32 位浮点数)降低到低精度(如 8 位或 4 位整数),极大减少显存占用和提高速度,同时尽量保持性能。
    • 蒸馏 (Distillation): 训练一个“小模型”来模仿“大模型”的行为。
    • 剪枝 (Pruning): 移除模型中不那么重要的参数。
  • 服务部署 (Serving):
    • 将优化后的模型部署到配备 GPU 的服务器上,并通过 API 接口对外提供服务。
    • 这需要解决高并发、低延迟等工程挑战,例如使用 vLLM、TensorRT-LLM 等推理框架。
  • 持续监控 (Monitoring):
    • 模型上线后,需要持续监控其表现,收集用户反馈和模型可能产生的“幻觉” (Hallucinations),用于下一轮的迭代优化。

开源社区

Huggingface

Hugging Face 是一家在人工智能(AI)领域迅速崛起的开源社区平台和公司,专注于让机器学习的构建和使用变得更加简单和开放。它最初是一家开发聊天机器人应用的公司,但后来转型并成为了全球AI领域,尤其是自然语言处理 (NLP) 领域的关键资源中心。

Hugging Face 的核心理念是 开放科学民主化AI,通过提供一系列工具、库和平台,使得研究人员和开发者能够轻松地共享、发现、训练和部署机器学习模型和数据集。

Hugging Face Hub 是一个类似 GitHub 的平台,但专门用于托管和共享机器学习模型、数据集和演示空间。

  • 模型共享:用户可以上传和下载各种预训练模型,每个模型都有详细的“模型卡片”介绍其用途、性能、局限性等。这促进了模型的可复用性和社区协作。
  • 数据集共享:Hub 上也托管了大量公开数据集,涵盖文本、图像、音频等多种格式,方便研究人员和开发者快速获取训练数据。
  • Gated Datasets:一些数据集可能需要申请权限才能访问,以确保数据合规性。
  • 版本控制:Hugging Face Hub 使用类似 Git 的版本控制系统,可以追踪模型的迭代和更新。

Hugging Face 对机器学习社区产生了深远的影响。通过提供开源工具和平台,它极大地促进了AI模型的开放共享和协作。降低AI了门槛,使得非专业人士也能更容易地使用和部署复杂的AI模型,推动了AI的普及。标准化了模型接口和共享机制,加速研究与开发,让研究人员可以更快地构建和迭代新模型,开发者可以更快地将研究成果转化为实际应用。Hugging Face 聚集了全球大量的AI研究者和开发者,共同推动AI技术的发展。

总的来说,Hugging Face 已经成为机器学习领域不可或缺的一部分,无论你是研究人员、开发者还是仅仅对AI感兴趣,它都提供了丰富的资源和工具来帮助你探索和构建AI应用。作为一名安卓开发者,Hugging Face 也能帮助你更便捷地将强大的AI能力集成到你的移动应用中。

魔塔

魔塔AI社区 是一个聚焦于人工智能(AI)技术交流与实践的线上社区平台,致力于为开发者、研究者、学生及AI爱好者提供技术分享、协作创新和资源整合的空间。

分主题板块(如模型架构设计、算法优化、行业应用案例),支持代码片段分享、论文解读和技术争议探讨。定期举办“技术擂台”或“挑战赛”(如模型压缩竞赛、数据集标注比赛),激发创新思维。

同时,提供代码托管功能(类似GitHub集成),支持成员发布AI项目、工具库或插件,并通过社区协作迭代优化。设立“明星项目”推荐板块,帮助优质项目获得曝光和贡献者。

还有学习与资源中心,整理AI领域的经典教材、课程笔记、工具链指南(如PyTorch/TensorFlow实战手册),并附有社区成员的批注与实战反馈。开设“新手村”板块,提供从环境配置到模型训练的逐步教程,降低入门门槛。

分享AI在医疗、金融、游戏等垂直行业的落地案例,讨论技术适配与商业化挑战。设立“内推直通车”和“技能树自测”功能,帮助成员对接企业需求,提升就业竞争力。

魔塔AI社区不仅是技术交流的场所,更是一个推动AI技术民主化、产业化的生态平台。无论是寻求答案的学习者、寻找协作的开发者,还是希望探索商业机会的创业者,都能在这里找到对应的价值支点。

模型架构 (Model Architecture)

目前,绝大多数大型 LLM 都基于Transformer (注意力机制) 架构。Transformer 是一种特殊的神经网络,它有两个主要部分:

  • 编码器 (Encoder): 负责理解输入文本的上下文信息。
  • 解码器 (Decoder): 负责根据编码器的理解生成输出文本。

Transformer 的关键是自注意力机制 (Self-Attention)。它允许模型在处理一个词时,同时考虑输入序列中所有其他词的重要性,从而捕捉词与词之间的长距离依赖关系。

Transformer 架构图示:

运行环境

为什么现在的大模型对GPU需求这么高?

大模型之所以对 GPU(图形处理器) 有着“饥渴”般的需求,根本原因在于它们的架构特性计算模式与 GPU 的设计理念完美契合。

CPU 就像一个拥有几名博士的团队,擅长攻克复杂的独立难题;而 GPU 更像一个拥有成千上万名小学生的大部队,虽然每个小学生只能做简单的加减法,但他们可以同时处理数百万个简单的加减法,效率惊人。大模型的计算任务,恰恰就是这种“数百万个简单加减法”的集合。

GPU更擅长海量的并行计算

大模型,特别是深度神经网络,在训练和推理过程中会进行天文数字般的数学运算,核心就是大量的矩阵乘法(Matrix Multiplication)向量运算(Vector Operations)

  • 特点:这些运算的特点是高度并行,即许多独立的、相似的计算可以同时进行。例如,一个矩阵的每个元素或一个向量的每个分量可以并行地进行计算,互不干扰。
  • GPU 的优势:GPU 内部拥有成百上千甚至上万个小型计算核心(流处理器),它们天生就是为并行计算而设计的。CPU 只有少数几个强大的核心,擅长处理复杂且串行的任务;而 GPU 则能以“人海战术”的方式,同时处理数百万个简单计算。这使得 GPU 在执行矩阵乘法这类并行任务时,比 CPU 快上数十甚至数百倍。

在神经网络中,每一层神经元从前一层接收输入,然后通过与权重矩阵相乘来计算其输出。这个过程就是矩阵乘法。 矩阵乘法计算:一个 m X nA 行列式,和一个 n X tB 行列式可以进行乘法运算得到一个 C 行列式。拿 A 的第 i 行(n个元素)和 B 的第 j 列(n个元素)元素乘积之和,就是 C 的第 [i,j] 位的元素值。

运算参数量巨大

大模型的“大”体现在其巨量的参数(Parameters)上。这些参数就是模型从训练数据中学习到的“知识”和“权重”。一个大模型可能拥有数十亿、数千亿甚至上万亿个参数。

每次进行前向传播(推理)或反向传播(训练)时,每个输入数据点都必须与模型的所有相关参数进行交互计算。参数量越大,需要进行的乘加运算就越多。这些参数通常以巨大的矩阵形式存储,GPU 高效的并行处理能力是处理如此大规模矩阵运算的关键。

包含大量的浮点运算

深度学习中的计算,尤其是权重和激活值的计算,通常使用浮点数(Floating-point Numbers)。大模型需要执行大量的浮点数乘法和加法。GPU 在设计时就高度优化了浮点运算单元。例如,NVIDIA 的 Tensor Cores 就是专门为深度学习中的混合精度计算(FP16/BF16)而设计的,能够极大地加速这些浮点运算。

高内存带宽和内存容量

大模型不仅参数量大,每次处理的数据批次(batch size)也可能很大,这意味着在计算过程中需要频繁地读取和写入大量数据。GPU 需要快速地从其显存中读取模型参数和输入数据,并将中间结果写回显存。现代 GPU 配备了高速的 GDDR 显存(如 GDDR6 或 HBM),拥有比 CPU 系统内存高得多的内存带宽,可以快速地吞吐大量数据。同时,高端 GPU 也提供了数十 GB 甚至上百 GB 的显存容量来存储庞大的模型参数。

专门的软件和硬件优化(CUDA 和 Tensor Cores)

NVIDIA 不仅仅提供了强大的 GPU 硬件,还开发了 CUDA 这样的并行计算平台,以及专门针对深度学习的 cuDNN 等库。

  • CUDA:它让开发者能够更容易地编写在 GPU 上高效运行的代码,连接了上层软件和底层硬件。
  • Tensor Cores:在最新的 NVIDIA GPU 中,集成了专门用于加速深度学习矩阵乘法的 Tensor Cores,它们能够以极高的效率执行低精度浮点运算,进一步提升了大模型训练和推理的速度。
CUDA 是什么?

CUDA(Compute Unified Device Architecture,统一计算设备架构)是 NVIDIA 公司开发的一种并行计算平台和编程模型。简单来说,它是一套让软件能够利用 NVIDIA 图形处理器(GPU) 强大计算能力的工具和接口。CUDA 的核心思想是让你能够编写代码,并将其中适合并行计算的部分“卸载”到 GPU 上执行。

它主要通过以下几个方面实现:

  1. 编程模型
    • CUDA 提供了一种基于 C、C++、Fortran 等传统语言的扩展,允许开发者编写被称为 “核函数”(Kernels) 的代码。
    • 核函数是一段在 GPU 上并行执行的代码。当你在 CPU(称为 Host)上调用一个核函数时,它会被分发到 GPU(称为 Device)上的成千上万个线程中并行执行。
    • 你需要将计算任务分解成小的、独立的子任务,每个子任务由一个 GPU 线程处理。
  2. GPU 硬件抽象
    • CUDA 提供了一套 API(应用程序编程接口),让开发者能够直接控制 GPU 的内存和计算资源。
    • 它抽象了 GPU 复杂的硬件细节,让程序员可以用相对更高层的方式来编写并行代码,而无需深入了解 GPU 内部的微架构。
  3. 内存管理
    • CPU 和 GPU 有各自独立的内存空间。在使用 CUDA 时,你需要将数据从 CPU 内存(Host Memory)传输到 GPU 内存(Device Memory),在 GPU 上进行计算,然后再将结果传回 CPU 内存。CUDA 提供了相应的 API 来管理这些数据传输。
  4. 工具套件
    • NVIDIA 提供了一个完整的 CUDA Toolkit,里面包含了编译器(如 nvcc,用于编译 CUDA C/C++ 代码)、库(如 cuDNN 用于深度学习,cuBLAS 用于线性代数)、调试工具、性能分析工具等,帮助开发者编写、优化和部署 GPU 加速的应用。

性能受限设备如何运行大模型

即使没有高性能的独立 GPU 的设备也可以运行大模型,但这通常会有一些重要的限制和权衡

CPU 也能执行并行计算 ,现代 CPU 通常有多个核心,并且支持 SIMD (Single Instruction, Multiple Data) 指令集(如 Intel 的 AVX、SSE 指令集),这使得它们能够同时处理少量数据。当没有 GPU 时,机器学习框架(如 TensorFlow 或 PyTorch)会自动回退到使用 CPU 来执行所有的矩阵乘法和其他计算。这些框架的 CPU 版本也会进行高度优化,以尽可能利用 CPU 的并行能力。

量化和剪枝是让大模型在资源受限设备上运行的关键技术。

  • 量化 (Quantization):将模型中原来用 32 位浮点数(FP32)表示的权重和激活值,转换为更低精度的格式,如 16 位浮点数(FP16/BF16)、8 位整数(INT8)甚至 4 位整数(INT4)。可以让 内存占用大幅减少 ,模型文件更小,加载更快。同时,低精度运算所需的计算资源更少,CPU 处理起来更快。
  • 剪枝 (Pruning):移除模型中不重要或冗余的连接和神经元,从而减小模型的大小和计算量。

这些优化技术可以在保持模型大部分性能的同时,显著降低其对计算资源(包括 CPU)的需求。

相比于大模型的训练,推理阶段的计算量相对较小训练大模型需要极其强大的 GPU,因为它涉及数万亿次的参数更新,需要多次迭代和反向传播。而在 推理(Inference)阶段,即模型用于实际预测时,只需要进行前向传播。虽然计算量依然庞大,但比训练时少得多。对于量化后的模型,推理的计算需求会进一步降低。

在没有 GPU 的电脑上运行大模型也会面临一些问题。

首先就是推理速度会比有 GPU 的系统慢很多,尤其是对于较大的模型和批次处理。其次,在这些设备上训练大型模型几乎不可能,因为 CPU 的计算能力和内存带宽远远不足。

在性能受限的设备上通常只能运行经过高度优化、量化甚至剪枝的较小版本的大模型,原始的巨型模型无法加载或运行。由于几乎所有的计算任务都需要 CPU 来完成,CPU 满负荷运行时能耗较高,可能导致设备发热严重。

LLM内部组件和运行流程

一个大模型(特指大型语言模型 LLM)在运行时,其进程内部包含多个核心组件协同工作,才能完成从接收输入到生成输出的全过程。这些组件涵盖了数据处理、模型计算和结果输出等多个环节。

一个典型的大模型运行时进程通常会包含以下核心组件:

1. Tokenizer (分词器)

大模型无法直接理解人类的自然语言文本。分词器是模型处理文本的第一步,它将输入的原始文本(如句子、段落)分解成模型能够理解的最小单位,这些单位称为 “token”

Token 可以是单词、子词(例如 “un”、”happy” 组成 “unhappy”),甚至是单个字符。

分词器还将每个 token 映射到一个唯一的整数 ID

  • 示例: 输入 “Hello, world!” 可能会被分词为 ["Hello", ",", " ", "world", "!"],并转换为对应的 ID 序列 [15496, 11, 220, 995, 0]

正确的分词对于模型理解输入和生成连贯的输出至关重要。不同的模型可能使用不同的分词器。

2. Model Core (模型核心 / 神经网络)

这个组件是大模型的心脏,负责执行实际的推理计算。它是一个由数千亿甚至上万亿个参数组成的深度神经网络(通常基于 Transformer 架构)。

核心接收分词器输出的 token ID 序列作为输入。将这些 ID 转换为词嵌入(Word Embeddings),这是一种高维向量表示,捕捉了 token 的语义信息。通过多层 Transformer 块进行复杂的数学运算(主要是矩阵乘法和激活函数),处理这些嵌入,捕捉文本中的上下文关系、语法结构和语义含义。最终输出每个位置上下一个 token 预测的概率分布

  • Embedding Layer(嵌入层): 将 token ID 转换为高维向量。
  • Transformer Blocks(Transformer 块): 包含多头自注意力机制 (Multi-Head Self-Attention) 和前馈网络 (Feed-Forward Network),负责学习和转换输入序列的表示。
  • Output Layer(输出层): 将最终的隐藏状态转换为词汇表中每个 token 的概率。

3. Generation Strategy / Decoding Algorithm (生成策略 / 解码算法)

模型核心输出的是下一个 token 的概率分布,而生成策略则根据这些概率来实际选择下一个 token,并决定何时停止生成。这好比模型给出了所有可能的字词及其概率,而生成策略就是选择最合理的那一个。常见的生成策略有:

  • 贪婪搜索 (Greedy Search): 每次都选择概率最高的 token。
  • 束搜索 (Beam Search): 同时跟踪多个最有可能的序列路径。
  • Top-K / Top-P (Nucleus Sampling): 从概率最高的 K 个 token 或累计概率达到 P 的 token 中随机选择,引入多样性。
  • 温度(Temperature): 调整概率分布的“锐利度”,影响生成文本的随机性和创造性。

不同的生成策略会显著影响模型输出的质量、多样性和流畅性

4. Context Management (上下文管理)

大模型在生成文本时需要记住之前的对话或输入内容,这就是上下文(Context)。上下文管理组件负责维护和更新模型当前处理的上下文。将新生成的 token 添加到现有上下文中。在上下文过长时(超过模型的上下文窗口限制),需要执行截断滑动窗口等策略来管理,确保模型始终在有效范围内工作。

5. Output Handler (输出处理器)

将模型生成的新 token ID 转换回人类可读的文本。通过分词器的逆向操作(detokenization)转换回字符串。同时可能还包括对输出文本的格式化、清理或后处理,例如删除多余的空格、处理特殊字符等。

6. System/Hardware Interface (系统/硬件接口)

这个组件不是模型本身的一部分,但它是大模型进程运行的底层基础。它负责将模型核心的计算任务调度到硬件加速器(如 GPU 或 NPU)上执行,并管理数据在内存和显存之间的传输。比如利用 CUDA、cuDNN (NVIDIA GPU) 或其他 AI 加速器 SDK (如 Android 设备的 NPU 驱动)。可以优化数据加载和计算流,以最大化硬件利用率。如果缺乏强大的硬件接口和底层优化,即使有优秀的模型,也无法高效运行。

运行流程概览:

  1. 用户输入:用户输入文本(例如 “帮我写一首诗关于秋天。”)。
  2. 分词器处理:分词器将输入文本转换为 token ID 序列。
  3. 模型核心计算:token ID 序列被送入模型核心。模型进行前向传播计算,输出词汇表中下一个可能 token 的概率分布。
  4. 生成策略选择:生成策略根据概率分布选择最合适的下一个 token ID。
  5. 上下文更新:新选出的 token ID 被添加到当前上下文。
  6. 循环迭代:重复步骤 3-5,直到达到停止条件(例如生成了完整句子、达到最大 token 数或生成了停止符)。
  7. 输出处理器:将最终生成的 token ID 序列转换回人类可读的文本输出。