- US - English
- China - 简体中文
- India - English
- Japan - 日本語
- Malaysia - English
- Singapore - English
- Taiwan, China - 繁體中文
无效的输入。不支持特殊字符。
上下文窗口与上下文长度
使用大语言模型时,我们有必要了解上下文窗口、上下文长度和序列长度等概念之间的差别。这些术语经常被互换使用,可能会让一些人感到迷惑。在本博客中,我们将把它们定义为不同的概念。
上下文窗口是模型的最大容量,也就是模型可以同时处理的词元总数,包括您的输入和模型的输出。举个简单的例子:我们将下面的矩形大小定义为可容纳 10 万个词元的上下文窗口。
上下文长度则是指您在该空间中放置了多少词元,即您与模型对话期间当前实际使用过的词元数量,包括输入词元(蓝色)和输出词元(绿色)。例如,如果模型具有可容纳 10 万个词元的上下文窗口,并且您的输入使用了 7.5 万个词元,那么,只有 2.5 万个词元可用于模型的响应,继续输出便会超出窗口的上限。
序列长度通常是指上下文窗口内单个输入或输出序列的长度。这是一种更精细的测量方法,可在模型训练和推理过程中跟踪每个文本段的长度。
上下文窗口决定了模型可以处理的信息量上限,但它并不直接反映模型的智能水平。窗口越大,可容纳的输入信息就越多,但输出质量往往取决于输入信息的结构化程度与实际利用效率。一旦达到窗口的容量上限,模型在处理时可能会失去连贯性,进而导致不理想的结果(例如,AI 幻觉)。
词元不是单词
如果上下文窗口由一个上限(例如 10 万个)来定义,那么词元就是衡量其容量的计量单位。重要的是,我们需要理解:词元并非单词。您在提示词中输入的单词将首先进入一个“词元分词器”中,该分词器将把文本分解为词元。一个单词可能会分解成几个词元。例如,“strawberry”会分解成三个词元,“trifle”则会分解成两个词元。有时候,一个单词可能只包含一个词元,例如“cake”。
我们可以用简·奥斯汀的小说《爱玛》中的句子来测试单词与词元的关系。
“Seldom, very seldom, does complete truth belong to any human disclosure; seldom can it happen that something is not a little disguised or a little mistaken.”
这段文本包含 26 个单词,当我们使用 lunary.ai1 提供的 Mistral 语言模型来处理这段文本时,模型自带的词元分词器将生成 36 个词元。这个例子中,每个词元大约对应 0.72 个单词,或者说大约对应四分之三个单词。
不同类型的文本中,词元与单词的比例各不相同。不过,就英语单词而言,每个词元平均对应大约 0.75 个单词。因此,拥有 10 万词元上下文窗口(每用户)的模型不一定能处理 10 万个单词。在实际应用中,该模型也许只能处理将近 7.5 万个英语单词,或者更少,具体取决于文本类型。
估计值词元数≈单词数∗1.33
为进一步在更大规模上测试词元与单词的比率,我们使用了来自“古腾堡计划”(Project Gutenberg,一个包含超过 7.5 万本免费电子书的图书馆)的八部知名文学作品,对其中的文本进行了快速分析。首先,我们计算了每本书中的单词数,然后通过词元分词器运行全部文本,以获得词元数。在对这些数字进行比较后,我们发现,每词元平均对应大约 0.75 个单词。
了解词元数与单词数的平均比例,可以让经常使用 AI 的用户更有效地与 AI 互动。大多数 AI 平台(如 ChatGPT 或 Claude)在提供服务时都有词元总数限制。也就是说,这些平台使用词元而非单词来处理文本。这就导致用户很容易误判实际上可以输入的提示词单词量,或者 AI 响应时输出的单词数量。由于平台通常以词元而非单词来衡量输入输出的内容量,因此了解词元与单词的比率,可以让您更好地理解平台的限制,从而更巧妙地规划您的输入。例如,如果一个模型的输入限制为 4,000 词元,则大约对应 3,000 单词。在为模型提供长文档或数据集时,最好了解这一点,以便更有效地完成诸如查找关键见解或回答问题等任务。
注意力在上下文窗口内并非均匀分布
人们经常会误解 AI 幻觉,将其视为模型的异常行为,或者将其作为语言模型存在问题以及不可靠的证据。但 AI 幻觉并非随机产生的;它们往往源于模型如何处理信息以及优先处理哪些信息,而这又取决于模型的训练效果、注意力分配机制等因素。在 GPT 或 Claude 等基于转换器的模型中,注意力是一种机制,用来帮助模型决定上下文中的哪些部分与用户的意图最相关,然后据此生成响应。为了更好地理解注意力的概念,设想您现在正身处一个嘈杂的鸡尾酒会上。如果旁边有人叫您的名字,您会本能地集中注意力。
“Frodo! 来这里!”
但是,如果四个人从房间的不同角落同时叫您的名字,情况又如何呢?
“Frodo!我是 Sam!”
“Frodo!快过来!”
“Frodo!看这边。”
“Frodo……啊,亲爱的 Frodo……”
您听到了所有这些招呼,但您的注意力现在被分散了。您可能更关注熟悉的声音,或者距离您最近的声音。每个声音都让您分出了一部分注意力,但这些部分的大小并不相同。这个例子并不完全贴切,但可以帮助我们理解大语言模型中注意力的运作方式。模型会分配注意力给上下文窗口中的所有词元,但其中一些词元的权重高于其他词元。这就是为什么大语言模型中的注意力通常被描述为“加权式”,这意味着并非所有词元都获得了同样的注意力。这种不均匀分配是理解模型如何优先处理信息,以及它们有时似乎会“走神”的关键。
更多上下文不一定意味着更好的答案
模型会扫描上下文窗口内的所有词元,但它不会为每个词元分配相等的注意力。随着窗口中的内容越来越多(例如,多达 10 万个词元),模型的注意力会变得更加分散。模型试图跟踪所有词元,这可能导致模型失去清晰的目标。
当这种情况发生时,模型会逐渐偏离当前对话,用户可能会感觉到回应变慢、不太连贯,甚至出现混淆对话前后内容的情况。这个时候,AI 经常会出现“幻觉”(Hallucinations,源自拉丁词 hallucinat,原意为“思想进入歧途”)。重要的是,我们要明白,这并不是模型出现故障的迹象。这实际上标志着模型已接近其能力阈值,正在满负荷运行。在此节点上,模型可能难以在过长的输入中保持连贯性或相关性。
从模型的角度来看,先前输入的词元仍然可见。但随着窗口内容的增加,注意力的分散,响应的精度可能会降低。模型可能会将先前提示词中提到的事实错误地放到当前问题中,或者将不相关的想法融合到输出中,使输出看起来很连贯但却毫无意义。在出现幻觉的情况下,模型不是在撒谎。它正在试图从无法清晰区分的大量片段中得出合理的响应,在注意力不足的情况下进行猜测。公允地说,模型其实是在基于现有信息努力运作,试图理解一段已超出其可靠处理能力的冗长对话。通过这种方式来理解注意力,有助于解释为什么更多上下文并不一定意味着更好的答案。2
话虽如此,较长的上下文窗口(超过 20 万词元,目前已经有模型支持 100 万或更多词元)也可能确实非常有用,特别是对于复杂的推理以及视频处理等新兴应用。一些新模型正在接受训练,旨在更有效地处理更长的上下文。通过优化架构和训练,模型可以更有效地管理对输入的注意力,减少幻觉,提高响应的质量。因此,尽管更多的上下文并不一定带来更好的答案,但新模型在保持注意力方面表现得越来越好,即使在处理特别长的对话时也是如此。
序列长度影响响应时间
在解析注意力机制之后,了解序列长度如何影响模型推理同样很有帮助。现在,我们可以问一个很实用的问题:当我们改变序列长度时,会发生什么?
输入序列长度会影响首词元时延 (TTFT)——即从输入请求到收到第一个输出词元的时间。TTFT 与 GPU 性能密切相关,因为它反映了 GPU 处理输入、执行计算,然后输出第一个词元的速度。而改变输出序列长度会影响词元间延迟 (ITL)——两个相继生成的词元之间的时间。b 该延迟与内存的使用情况关系更大。
为进一步探究这一点,我们使用了一阶分析模型,来估计大语言模型推理期间的端到端延迟。我们在单个 GPU 上使用 Llama 3 70B 来运行该模型,该 GPU 带有高带宽内存(HBM3E 12H,8 层堆叠,36GB 容量),模型的上下文窗口为 128,000 个词元。c
b 关键推理指标:首词元时延 (TTFT):模型在收到输入后到开始生成输出所需的时间(预填充性能)。词元间延迟 (ITL):两个相继生成的词元之间的时间(解码性能)。端到端延迟:从提交查询到收到完整响应所需的时间。3
c 性能估算基于内部分析模型,旨在近似模拟推理行为。本研究中构建的系统基于估计的 GPU 配置,该配置反映了市售硬件平台的一般特性。所选配置不代表任何特定产品,仅用于支持本分析中的技术目标。这些估算值并不反映经过优化的软件或硬件配置,因此可能与实际结果不同。
下图显示了输入序列长度 (ISL) 和输出序列长度 (OSL) 逐渐增加时对整个端到端延迟的影响。每次测量的批量大小为 1(即单个请求)。所需能耗较少。
图 5:不同输出和输入序列长度对应的每用户端到端延迟(秒)
关键要点
测量延迟时的一个重要结论是,模型生成长响应所需的时间,要远远超过处理长提示词时所需的时间。该模型能够一次性读取和理解输入,即使是特别长的提示词,处理速度也相对较快。但是,在模型生成响应时,是逐词元依次生成的,每个新词元的生成,都取决于之前已经生成的所有内容。这需要更多的时间,因为模型会执行自动回归流程,这意味着每个新词元都建立在之前生成的所有词元基础上。例如,将输入序列长度 (ISL) 从 2,000 个词元增加到 125,000 个词元,仅导致延迟增加大约两倍。相比之下,在同样范围内增加输出序列长度 (OSL),延迟将增加大约 68 倍。d 之所以产生这种差异,是因为较长的输入序列引发了更多预填充计算,可并行处理多个词元。与之相反,解码在本质上是一个串行过程,只能依次生成每一个词元,这需要耗费更多时间,以及更多的内存带宽。
这意味着更长的输出序列会导致更长的解码时间,同时 GPU 和内存子系统保持活跃状态的时间也会变长。这种情况下,硬件级别的功效将会变得特别重要。类似美光 HBM3Ee 这样的内存设备,其运行功耗比同类高带宽内存设备低得多,能够以较少的能量完成相同的推理任务。
d 此处给出的估计值来自未优化的分析模型,因此它们仅用于说明一般趋势,而非峰值性能。
e 美光 HBM3E 的功耗比市场上同类高带宽内存设备低 30%。
对用户而言,上述结论彰显出优化提示词以及管理输入长度(例如,精简任何不必要的内容)的重要性。如果您正在构建实时应用程序,您通常可以放心处理更长的输入,不会有太多问题。而保持简洁的输出,可能有助于您的系统运行更快,响应更迅速。
内存在处理更长上下文时的重要作用
推理延迟不仅取决于序列长度,还取决于系统在处理输入和生成输出时如何管理模型对计算和内存的需求。许多近期发布的语言模型正在宣传其超过百万词元的上下文窗口。这些较大的上下文窗口(当完全利用时)将对内存子系统产生更大的压力,其后果在用户看来可能包括执行速度较慢、运行时间增加等。新一代内存技术将提供更高的带宽和更大的容量,可支持这些更大的上下文窗口,帮助缩短响应时间,提高整体吞吐量(每秒生成的词元数)。但是,伴随着这些性能提升,也出现了系统能耗过大的问题。随着推理工作负载扩大到支持数百万个词元,设计出能够高效使用能源的系统,变得越来越重要。长时间保持活动状态的系统需要消耗更多能源,为解决这一挑战,需要同时具备高带宽和低功耗特性的内存设备。例如,美光 HBM3E 的功耗远低于市场上的同类高带宽内存设备。此类低功耗产品有助于减少 AI 在运行推理工作负载(涉及数百万词元上下文窗口)期间所消耗的能量。展望未来,HBM4 和 HBM4E 等下一代内存技术旨在提供更高的内存带宽和容量,同时提高能效。这些改进源于工艺技术的进步(美光使用 1-gamma DRAM),预计将以更低的能源成本实现更快的数据移动。此外,随着这些技术的成熟,可能会进一步减少延迟,提高大规模 AI 部署的吞吐量并节约能源。
了解详情
https://www.micron.com/educatorhub
https://www.micron.com/educatorhub/courses/what-does-it-mean-for-ai-to-know-something
1 https://lunary.ai/openai-tokenizer
2 https://cs.stanford.edu/~nfliu/papers/lost-in-the-middle.arxiv2023.pdf
3 https://docs.nvidia.com/nim/benchmarking/llm/latest/metrics.html