生产中的大语言模型(MEAP)(一)(4)

简介: 生产中的大语言模型(MEAP)(一)

生产中的大语言模型(MEAP)(一)(3)https://developer.aliyun.com/article/1517050

2.2.8 注意力

注意力是通过一种新兴的数学公式告诉模型如何考虑输入的哪些部分以及多少来更快地解决更大上下文窗口的数学快捷方式。这一切都基于一个升级版本的字典,其中不仅仅是键值对,还增加了一个上下文查询。我们将在后面的章节中更深入地讨论注意力。现在,知道下面的代码是从原始论文中提取的 10 个步骤,它是老的自然语言处理技术和现代技术之间的重要区别。

注意力机制解决了训练 LSTMs 的缓慢问题,但在低数量的 epochs 上保持了高性能。同时,也有多种类型的注意力机制。点积注意力方法捕捉了查询中每个单词(或嵌入)与关键字中每个单词之间的关系。当查询和关键字是同一句子的一部分时,这被称为双向自注意力。然而,在某些情况下,仅集中在前面的单词更合适。这种类型的注意力,尤其是当查询和关键字来自相同的句子时,被称为因果注意力。通过屏蔽序列的部分并迫使模型猜测应该在掩码后面的内容,语言建模进一步得到改善。下面的函数演示了点积注意力和掩码注意力。

列表 2.8 多头注意力机制实现
import numpy as np
from scipy.special import softmax
# Step 1: Input: 3 inputs, d_model=4
x = np.array([[1.0, 0.0, 1.0, 0.0],
        [0.0, 2.0, 0.0, 2.0],
        [1.0, 1.0, 1.0, 1.0]])
# Step 2: weights 3 dimensions x d_model=4
w_query = np.array([1,0,1],
            [1,0,0],
            [0,0,1],
            [0,1,1]])
w_key = np.array([[0,0,1],
           [1,1,0],
           [0,1,0],
           [1,1,0]])
w_value = np.array([[0,2,0],
             [0,3,0],
             [1,0,3],
             [1,1,0]])
# Step 3: Matrix Multiplication to obtain Q,K,V
## Query: x * w_query
Q = np.matmul(x,w_query)
## Key: x * w_key
K = np.matmul(x,w_key)
## Value: x * w_value
V = np.matmul(x,w_value)
# Step 4: Scaled Attention Scores
## Square root of the dimensions
k_d = 1
attention_scores = (Q @ K.transpose())/k_d
# Step 5: Scaled softmax attention scores for each vector
attention_scores[0] = softmax(attention_scores[0])
attention_scores[1] = softmax(attention_scores[1])
attention_scores[2] = softmax(attention_scores[2])
# Step 6: attention value obtained by score1/k_d * V
attention1 = attention_scores[0].reshape(-1,1)
attention1 = attention_scores[0][0]*V[0]
attention2 = attention_scores[0][1]*V[1]
attention3 = attention_scores[0][2]*V[2]
# Step 7: summed the results to create the first line of the output matrix
attention_input1 = attention1 + attention2 + attention3
# Step 8: Step 1 to 7 for inputs 1 to 3
## Because this is just a demo, we’ll do a random matrix of the right dimensions
attention_head1 = np.random.random((3,64))
# Step 9: We train all 8 heads of the attention sub-layer using steps 1 through 7
## Again, it’s a demo
z0h1 = np.random.random((3,64))
z1h2 = np.random.random((3,64))
z2h3 = np.random.random((3,64))
z3h4 = np.random.random((3,64))
z4h5 = np.random.random((3,64))
z5h6 = np.random.random((3,64))
z6h7 = np.random.random((3,64))
z7h8 = np.random.random((3,64))
# Step 10: Concatenate heads 1 through 8 to get the original 8x64 output dimension of the model
Output_attention = np.hstack((z0h1,z1h2,z2h3,z3h4,z4h5,z5h6,z6h7,z7h8))
# Here’s a function that performs all of these steps:
def dot_product_attention(query, key, value, mask, scale=True):
    assert query.shape[-1] == key.shape[-1] == value.shape[-1], “q,k,v have different dimensions!”
    if scale:
        depth = query.shape[-1]
    else:
        depth = 1
    dots = np.matmul(query, np.swapaxes(key, -1, -2)) / np.sqrt(depth)
    if mask is not None:
        dots = np.where(mask, dots, np.full_like(dots, -1e9))
    logsumexp = scipy.special.logsumexp(dots, axis=-1, keepdims=True)
    dots = np.exp(dots - logsumexp)
    attention = np.matmul(dots, value)
    return attention
# Here’s a function that performs the previous steps but adds causality in masking
def masked_dot_product_self_attention(q,k,v,scale=True):
    mask_size = q.shape[-2]
    mask = np.tril(np.ones((1, mask_size, mask_size), dtype=np.bool_), k=0)
    return DotProductAttention(q,k,v,mask,scale=scale)

在上面,在注意力的完整实现中,你可能已经注意到了一些你熟悉的术语,即关键字和值,但你可能之前没有听说过查询。关键字和值对因为字典和查找表而熟悉,我们在其中将一组关键字映射到一个值数组。查询应该感觉直观,就像搜索或检索一样。查询与关键字进行比较,从中检索一个值在正常操作中。

在注意力中,查询和关键字经历点积相似性比较以获得一个注意力分数,稍后将该分数乘以值以获得模型应该关注序列中的那部分的最终分数。这可能会变得更复杂,这取决于你模型的架构,因为编码器和解码器序列长度都必须考虑在内,但现在可以简单地说,这个空间中建模的最有效方法是将所有输入源投影到一个共同的空间中,并使用点积进行比较以提高效率。

这个代码解释比之前的例子更加数学密集,但这是必要的来说明概念。注意力背后的数学是真正创新的,它推动了该领域的进步。不幸的是,即使注意力给序列建模带来了优势,使用 LSTMs 和 RNNs 仍然存在速度和内存大小的问题。从代码和数学中你可能会注意到有一个平方根,这意味着我们使用的注意力是二次的。从那时起,出现了各种技术,包括次二次的技术,如 Hyena 和 Recurrent Memory Transformer(RMT,基本上是 RNN 与变压器的组合),以应对这些问题,我们稍后将更详细地讨论。现在,让我们继续介绍注意力的最终应用:变压器。

注意力就是你所需要的一切

在开创性论文《Attention is All You Need》中[1],Vaswani 等人进一步推进了数学上的捷径,假设为了性能绝对不需要任何重复(循环神经网络中的“R”)或任何卷积[2]。相反,他们选择只使用注意力,并简单地指定 Q、K 和 V 从哪里被更加小心地取出。我们将立即深入讨论这一点。在我们对这一多样化的 NLP 技术的回顾中,我们观察到它们随着时间的推移的演变,以及每种方法试图改进其前身的方式。从基于规则的方法到统计模型和神经网络,该领域不断努力寻求更高效、更准确的处理和理解自然语言的方法。现在,我们将注意力转向了一项开创性的创新,彻底改变了 NLP 领域:变压器架构。在接下来的部分中,我们将探讨支撑变压器的关键概念和机制,以及它们如何使得先进的语言模型的开发超越了以前的技术。我们还将讨论变压器对更广泛的 NLP 景观的影响,并考虑在这一激动人心的研究领域中进一步进展的可能性。

2.3.1 编码器

编码器是完整变压器模型的前半部分,在分类和特征工程等领域表现出色。Vaswani 等人(2017)发现的一件事是,在编码器内部的嵌入层之后,对张量进行的任何附加转换都可能损害它们在“语义上”进行比较的能力,而这正是嵌入层的目的。这些模型在很大程度上依赖于自注意力和巧妙的位置编码来操纵这些向量,而不会显著降低所表达的相似性。

再次强调嵌入的关键点:它们是数据的向量表示,在我们的案例中是令牌。令牌可以是用于表示语言的任何内容。我们通常建议使用子词,但您会对哪种类型的令牌在何处效果良好有所感觉。考虑这句话,“戴着帽子的猫迅速跳过了红狐狸和棕色的无动力狗。” “红色”和“棕色”在语义上应该是相似的,并且在嵌入层之后它们被类似地表示,但是在句子中分别占据第 10 和第 14 位置,假设我们按单词进行分词,因此位置编码在它们之间引入了距离。然而,一旦应用正弦和余弦函数[3],它会将它们的含义调整到编码后比之前稍微远一点的位置,并且此编码机制随着循环和更多数据的增加而扩展得非常出色。举例来说,假设嵌入后[红色]和[棕色]之间的余弦相似度为 99%。编码将极大地减少这一相似度,降至大约 85-86%。按照所述的正弦和余弦方法,将它们的相似度调整回大约 96%。

BERT 是原始论文后出现的第一批体系结构之一,并且是仅编码器的变换器的示例。 BERT 是一个非常强大的模型架构,尽管体积小,但至今仍在生产系统中使用。 BERT 是第一个仅编码器的变换器在流行中迅速崛起的例子,展示了使用变换器进行连续建模比 Word2Vec 获得更好的嵌入。 我们可以看到这些嵌入更好是因为它们可以在最少的训练下很快地应用于新任务和数据,并且与 Word2Vec 嵌入相比,获得了人们更喜欢的结果。 这导致大多数人在一段时间内将基于 BERT 的模型用于较小数据集上的少量学习任务。 BERT 使得最先进的性能对大多数研究人员和企业来说只需付出最少的努力就能轻松实现。

图 2.5 编码器,可视化。编码器是完整变换器架构的前半部分,在诸如分类或命名实体识别(NER)等 NLU 任务中表现出色。编码器模型改进了以前的设计,不需要任何先验知识或循环,并且使用了巧妙的位置编码和多头注意力。


优点:

  • 分类和展示理解的层次任务
  • 在考虑长期依赖建模时极快速度。
  • 建立在已知模型的基础上,嵌入中的 CBoW,前馈中的 MLP 等。

弱点:

  • 如建议所示,需要大量数据才能发挥效果(尽管比 RNN 少)。
  • 更复杂的架构

2.3.2 解码器

解码器模型(如下所示)是编码器的较大版本,具有 2 个多头注意力块和 3 个求和和标准化层。它们是变压器的后半部分。 这导致模型在屏蔽语言建模、学习和应用语法等方面非常强大,从而立即想到需要仅解码器模型以实现人工智能。编码器与解码器任务的有用区分是,编码器在自然语言理解(NLU)任务中表现出色,而解码器在自然语言生成(NLG)任务中表现出色。一些仅解码器的变压器体系结构的示例是产生预训练的变压器(GPT)系列模型。这些模型遵循转换生成语法的逻辑,完全基于语法,允许语言中所有可能句子的无限生成。[4]

图 2.6 解码器的可视化。解码器是完整变压器的第二个部分,擅长于像聊天机器人和讲故事这样的自然语言生成任务。解码器在以前的架构上做出了改进,但它们将其输出向右移动一个空格以用于下一个词汇的生成,从而帮助利用多头自我关注的优势。


优势:

  • 生成序列中的下一个标记(向右移动意味着考虑到已生成的标记)
  • 基于已知模型和编码器的构建
  • 可以在生成过程中进行流式传输,提供良好的用户体验

弱点:

  • 仅基于语法的模型经常难以插入预期或意图(请参见自 2018 年以来所有的“我强迫 AI 观看 1000 小时 x 并生成”模因)
  • 幻觉

2.3.3 变压器

全面的变压器架构利用了编码器和解码器,将编码器的理解传递到解码器的第二个多头注意力块中,然后才能输出。由于变压器的每个部分都专门负责理解或生成,因此对于条件生成任务(如翻译或摘要),整个产品应该感觉很直观,在生成之前需要一定程度的理解。编码器旨在以高层次处理输入,解码器则更专注于生成连贯的输出,全面的变压器架构可以成功地理解,然后基于这种理解进行生成。变压器模型具有优势,因为它们围绕着并行构建,这增加了速度,目前在 LSTMs 中无法复制。如果 LSTM 能够达到可以像变压器一样快速运行的点,它们可能会在最先进的领域竞争。文本到文本转移变压器(T5)系列模型是变压器的示例。

图 2.7 一个完整的变换器可视化。一个完整的变换器结合了编码器和解码器,并在每个任务以及条件生成任务(如摘要和翻译)上表现良好。由于变换器比它们的各半部分更笨重和更慢,因此研究人员和企业通常选择使用这些半部分而不是整个东西,尽管速度和内存增益都很小。


优点:

  • 同时具有编码器和解码器,因此擅长于它们各自擅长的一切
  • 高度并行化以提高速度和效率

弱点:

  • 占用内存多,但仍然比相同大小的 LSTM 少
  • 需要大量数据和 VRAM 进行训练

正如你可能已经注意到的,我们讨论的大多数模型根本不是语言学焦点,而是非常注重语法,即使在尝试模拟真实语言时也是如此。模型,即使是最先进的变换器,也只有语义近似,没有语用学、音韵学,而且在分词期间只真正利用形态。这并不意味着模型无法学习这些知识,也不意味着例如变换器无法将音频作为输入,只是平均使用情况下并没有这样做。考虑到这一点,它们能够表现得如此出色简直就是一个奇迹,而且确实应该被当作奇迹来欣赏。

通过本章至今,我们试图突出当前模型存在的限制,并将在本书的其余部分深入探讨如何改进它们的方法。其中一条路线是已经被探索并取得了巨大成功的迁移学习和对大型基础模型进行微调。这项技术在 BERT 初始发布后不久就出现了,当研究人员发现,虽然 BERT 在大量任务上表现得普遍良好,但如果他们想让它在特定任务或数据领域上表现更好,他们只需在代表该任务或领域的数据上重新训练模型,而不是从头开始。获取 BERT 在创建语义近似嵌入时学到的所有预训练权重,然后就可以用较少的数据在你需要的部分上获得最先进的性能。我们已经在 BERT 和 GPT 系列模型上看到了这一点,它们分别问世时也是如此,现在我们又再次看到它们解决了带来的挑战:语义近似覆盖、领域专业知识、数据的可用性。

2.4 非常大的变换器

进入大型语言模型。自引入基于 transformer 的模型以来,它们只变得越来越大,不仅是它们的大小和参数数量,而且它们的训练数据集和训练周期也越来越大和长。如果您在 2010 年代学习机器学习或深度学习,您可能已经听说过“层数越多,模型就不一定越好”这个口号。LLM 证明了这一点既对又错。错误是因为它们的性能无与伦比,通常甚至可以与在特定领域和数据集上进行精细微调的较小模型相匹配,甚至是那些在专有数据上训练的模型。正确的是由于训练和部署它们所带来的挑战。

LLM(大型语言模型)和 LM(语言模型)之间的一个主要区别在于迁移学习和微调。与先前的大型 LM 一样,LLM 在大规模文本语料库上进行预训练,使其能够学习通用语言特征和表示,以便进行特定任务的微调。由于 LLM 如此庞大,其训练数据集也很大,因此 L LM 能够在较少的标记数据的情况下获得更好的性能,这是早期语言模型的一个重要局限性。通常情况下,您可以使用仅十几个示例微调 LLM,使其执行高度专业化的任务。

但是,真正让 LLM 强大并打开了广泛业务应用的大门的是它们能够在没有任何微调的情况下执行专门的任务,只需一个简单提示即可。只需给出您查询中想要的内容的几个示例,LLM 就能产生结果。这称为少量提示,当其在较小的标记数据大小上进行训练时,称为单次,当只给出一个示例时,称为零次,当任务是全新时。特别是使用 RLHF 和提示工程方法训练的 LLM 可以在一个全新的层次上执行少量提示学习,从而能够在仅有少量示例的情况下进行任务的广义求解。这种能力是早期模型的一个重大进展,早期的模型需要用于每个特定任务进行大量的微调或标记数据。

先前的语言模型已经展示出在几次提示学习领域和零次提示学习领域上的潜力,而 LLM 证明了这个潜力的真实。随着模型变得越来越大,我们发现它们能够执行新任务,而较小的模型则无法做到。我们称之为新兴行为[5],而图 2.8 说明了八个不同的任务,其中 LMs 不能比随机更好地完成,而一旦模型足够大,它们就可以做到。

图 2.8 显示了 LLM 在模型规模达到一定大小后执行几次提示任务时所显示出的新兴行为的示例。


LLM 也具有明显优异的零样本能力,这既归因于它们庞大的参数大小,也是它们在商业世界中受欢迎和可行的主要原因。LLM 由于其巨大的大小和容量,还表现出对歧义的改进处理能力。它们更擅长消除具有多重含义的词语并理解语言的细微差别,从而产生更准确的预测和响应。这不是因为它们具有改进的能力或架构,因为它们与较小的变压器共享架构,而是因为它们具有更多关于人们通常如何消除歧义的示例。因此,LLM 响应的歧义消除与数据集中通常表示的歧义消除相同。由于 LLM 所训练的文本数据的多样性,它们在处理各种输入样式、嘈杂文本和语法错误方面表现出了增强的鲁棒性。

LLM 和 LM 之间的另一个关键区别是输入空间。较大的输入空间很重要,因为它使得少样本提示任务变得更加可行。许多 LLM 的最大输入大小为 8000+ 令牌(GPT-4 目前支持 32k),虽然在本章讨论的所有模型也可以具有如此高的输入空间,但它们通常不会被考虑进去。我们最近也看到了这一领域的蓬勃发展,如递归记忆变压器(RMT)等技术使得上下文空间可达 1,000,000+ 令牌,这使得 LLM 更加向着证明更大的模型总是更好的方向迈进。LLM 旨在捕捉文本中的长距离依赖关系,使它们能够比其前身更有效地理解上下文。这种改进的理解使得 LLM 在任务中生成更连贯和上下文相关的响应,例如机器翻译、摘要和对话 AI。

LLMs 通过提供强大的解决方案,彻底改变了 NLP 中那些对早期语言模型具有挑战性的问题。它们在上下文理解、迁移学习和少样本学习方面带来了显著的改进。随着 NLP 领域的不断发展,研究人员正在积极努力最大限度地利用 LLMs 的优势,同时减轻所有潜在风险。由于还没有找到更好的近似语义的方法,它们做出了更大更多维度的近似。由于还没有找到存储实用语境的良好方法,LLMs 通常允许将上下文插入到提示中,插入到专门用于上下文的输入部分中,甚至通过在推断时与 LLM 共享数据库来进行插入。这并不会在模型中创建实用语境或实用语境系统,就像嵌入并不会创建语义一样,但它允许模型正确生成模仿人类对这些实用语境和语义刺激做出反应的句法。语音学是 LLMs 可能会取得巨大进展的地方,可以作为完全无文本的模型,或者作为文本-语音混合模型,也许还可以使用国际音标而不是文本。考虑到我们正在目睹的这一领域的可能发展,令人兴奋。

此时,你应该对 LLM 是什么以及在将 LLM 投入生产时将会用到的一些语言学关键原理有相当清楚的理解了。主要的是,现在你应该能够开始思考哪种类型的产品会更容易或更难构建。考虑图 2.9,像写作助手和聊天机器人这样的任务位于左下角,是 LLMs 的主要应用场景。基于提示中的一点上下文进行文本生成的问题严格来说是基于句法的,通过足够大的模型在足够多的数据上进行训练,我们可以相当轻松地完成这个任务。购物助手也是相当相似且相对容易构建的,然而,我们只是缺少实用语境。助手需要了解更多关于世界的信息,比如产品、商店和价格。通过一点工程技术,我们可以将这些信息添加到数据库中,并通过提示将这些上下文提供给模型。

另一方面,考虑一下象棋机器人。LLM能够下棋。但是它们不擅长。它们经过了象棋比赛的训练,并理解“E4”是一个常见的首步,但是它们的理解完全是语法上的。LLM 实际上只理解它们应该生成的文本应该包含 A 到 H 之间的一个字母和 1 到 8 之间的一个数字。就像购物助手一样,它们缺少语用学,对象棋游戏没有一个清晰的模型。此外,它们也缺乏语义。编码器可能会帮助我们理解“国王”和“皇后”这两个词是相似的,但它们并没有真正帮助我们理解“E4”对于一个玩家来说是一个伟大的着法,但对于另一个玩家来说,同样的“E4”着法可能是一个糟糕的着法。LLM 也完全缺乏基于音韵学和形态学的关于象棋的知识,但这些对于这个案例来说不是很重要。无论如何,我们希望这个练习能够更好地为您和您的团队在下一个项目中提供信息。

图 2.9 LLM 对于某些任务的难易程度以及解决这些任务的方法。


LLM(大型语言模型)有着惊人的好处,但是随着所有这些能力的出现也带来了一些限制。基础性的 LLM 需要庞大的计算资源进行训练,这使得它们对个人研究人员和较小的组织来说不太容易接触。我们将在本书中讨论一些技术,比如量化、文本嵌入、低秩调整、参数高效微调和图优化等技术来解决这个问题,但是基础模型目前仍然完全超出了普通个人有效训练的能力范围。此外,人们担心 LLM 的训练能耗可能会对环境产生重大影响,并伴随着可持续性的问题。这是一个复杂的问题,主要超出了本书的范围,但我们不提及这一点就不妥。最后但同样重要的是,由于 LLM 是在包含真实世界文本的大规模数据集上进行训练的,它们可能会学习并延续数据中存在的偏见,引发伦理关切,这并不是研究人员或算法的过错,而更多是因为现实世界的人们没有自我审查提供最佳无偏数据。例如,如果你要求一个文本到图像扩散的 LLM 生成 1000 张“领导者”的图像,其中 99%的图像会以男性为特征,95%的图像会以白人为特征。这里的问题不是男性或白人不应该被描绘为领导者,而是显示出模型并没有真实准确地代表世界。

图 2.10 中的 Midjourney 5,目前是市场上最受欢迎的文本转图像模型,当只有一个标记“领导者”(左图所示)时,将一个众所周知的流行女性主义象征,罗西·飞弹手,变成了男性形象。ChatGPT(右图所示)编写了一个函数,根据您的种族、性别和年龄来安排您的工作。这些都是意想不到的输出示例。


有时,更微妙的偏见会显现出来,例如,在图 2.10 中展示的 Midjourney 示例中。一个广受欢迎的女性主义象征“罗西·飞弹手”(Rosie the Riveter),在没有任何提示的情况下(模型仅给出的提示是“领导者”一词),被改变为了一个男性。模型根本没有考虑到这种改变,它只是在采样步骤中确定,“领导者”这个提示更像是一个男人。很多人会争论在这种情况下“好”和“坏”意味着什么,但我们将简单地讨论准确意味着什么。LLM(大型语言模型)被训练在大量数据上,目的是返回可能最准确的表示。当它们仍然无法返回准确的表示时,特别是在它们有能力消除歧义时,我们可以将其视为对模型实现其目的的有害偏见。后面我们将讨论对抗这种有害偏见的技术,不是出于任何政治目的,而是为了让您作为 LLM 创建者获得您想要的确切输出,并尽量减少您不想要的输出的数量。

好了,我们整整一个章节都在建立到这一点,让我们继续运行我们的第一个 LLM!在清单 2.9 中,我们下载了 Bloom 模型,这是第一个开源 LLM 之一,并生成了文本!非常令人兴奋的事情。

清单 2.9 运行我们的第一个 LLM
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL_NAME = "bigscience/bloom"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
prompt = "Hello world! This is my first time running an LLM!"
input_tokens = tokenizer.encode(prompt, return_tensors="pt", padding=True)
generated_tokens = model.generate(input_tokens, max_new_tokens=20)
generated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
print(generated_text)

你试过跑它了吗?!如果你试过,你可能刚刚让你的笔记本电脑崩溃了。糟糕!原谅我这一点无害的 MLOps 入门,但亲身体验一下这些模型有多大,以及它们运行起来有多困难,是有帮助的经验。我们将在下一章更多地讨论运行 LLM 的困难,并为您提供一些实际运行它所需的工具。如果你不想等待,并想要运行一个类似但规模小得多的 LLM,将模型名称更改为“bigscience/bloom-3b”,然后再次运行。这次它应该在大多数硬件上都能正常工作。

总而言之,LLM 是一项令人惊奇的技术,可以让我们的想象力充满可能性,并且理所当然。考虑使用 LLM 而不是较小的 LM 的头等用例是,当模型将帮助的人需要使用少量样本功能时,比如帮助首席执行官筹集资金或帮助软件工程师编写代码。他们之所以具有这种能力,正是因为他们的规模。LLM 中更多的参数直接使其能够在更大维度的较小空间上进行概括。在本章中,我们介绍了 LLMS 的较少知名的一面,即语言学和语言建模方面。在下一章中,我们将涵盖另一半,即 MLOps 方面,其中我们将深入研究大参数大小如何影响模型以及旨在支持该模型并使其可供其预期客户或员工使用的系统。

2.5 总结

  • 语言学的五个组成部分是语音学、句法学、语义学、语用学和形态学。
  • 通过处理音频文件的多模态模型可以添加语音学,这可能会在未来改进 LLM,但当前数据集太小。
  • 语法是当前模型擅长的领域。
  • 通过嵌入层添加了语义。
  • 通过工程努力可以添加语用学。
  • 形态学添加在标记化层中。
  • 语言不一定与现实相关。了解人们在现实之外创造意义的过程对于训练有意义(对于人们来说)的模型是有用的。
  • 适当的标记化可能是一个主要障碍,因为有太多的 标记,特别是当涉及到代码或数学等专业问题时。
  • 多语言处理一直表现优于单语言处理,即使在没有模型的单语言任务中也是如此。
  • 每种语言模型类型都是专门构建的,以解决先前模型的弱点,而不是试图解决语言的特定特征。
  • 语言建模的有效性呈指数增长,与建模的语言学关注度相关。
  • 注意力是解决更大上下文窗口的数学快捷方式,是现代架构 - 编码器、解码器和变压器的支柱。
  • 编码器改进了嵌入中的语义近似。
  • 解码器在文本生成方面表现最佳。
  • 变压器将这两者结合起来。
  • 较大的模型展示了突然能够完成以前无法完成的任务的新兴行为。

[1] Vaswani 等人 2017 年 Attention Is All You Need arxiv.org/abs/1706.03762

[2] 我们没有讨论这些,因为它们对自然语言处理来说并不好,但它们在计算机视觉中尤其流行

[3] 不是数学或历史书籍

[4] 请参阅附录 A

[5] J. Wei 等,“大型语言模型的新兴能力”,机器学习研究交易,2022 年 8 月,可用:openreview.net/forum?id=yzkSU5zdwD

第三章:大型语言模型操作:构建用于 LLMs 的平台

本章内容包括

  • 大型语言模型操作概述
  • 部署挑战
  • 大型语言模型最佳实践
  • 所需的大型语言模型基础设施

上一章我们学到,当涉及到变压器和自然语言处理(NLP)时,越大越好,特别是在语言上有所启发时。然而,更大的模型由于其规模而带来了更大的挑战,无论其语言有效性如何,这要求我们扩大操作和基础设施规模以处理这些问题。在本章中,我们将详细探讨这些挑战是什么,我们可以采取什么措施来最小化它们,并建立什么样的架构来帮助解决这些挑战。

3.1 大型语言模型操作简介

什么是大型语言模型操作(LLMOps)?好吧,由于我更注重实用而不是华丽辞藻,我不打算深入讨论你在教科书中所期望的任何花哨的定义,但让我简单地说一下,它是已经被扩展以处理 LLMs 的机器学习操作(MLOps)。让我也说一下,扩展是困难的。这是软件工程中最艰巨的任务之一。不幸的是,太多公司正在运行基本的 MLOps 设置,并且不要想一秒钟他们将能够处理 LLMs。话虽如此,“LLMOps”这个术语可能是不需要的。它尚未显示出足够不同于核心 MLOps,特别是考虑到它们仍然具有相同的基础。如果这本书是一个二分键,MLOps 和 LLMOps 肯定会属于同一个属,只有时间会告诉我们它们是否是同一个物种。当然,通过拒绝正确定义 LLMOps,我可能已经用另一种混乱来交换了一种混乱,所以让我们花点时间来描述一下 MLOps。

MLOps 是可靠且高效地部署和维护机器学习模型在生产环境中的领域和实践。这包括,并确实需要,管理整个机器学习生命周期,从数据获取和模型训练到监控和终止。掌握这一领域所需的几个原则包括工作流编排、版本控制、反馈循环、持续集成和持续部署(CI/CD)、安全性、资源供给以及数据治理。虽然通常有专门从事模型产品化的人员,通常称为 ML 工程师、MLOps 工程师或 ML 基础设施工程师,但这个领域是一个足够庞大的野兽,它经常会绑架许多其他毫无防备的专业人士来从事工作,他们拥有数据科学家或 DevOps 工程师等头衔,往往不是出于自己的知情和意愿;留下他们愤怒地抗议“这不是他们的工作”。

3.2 大型语言模型的操作挑战

那么为什么还要有一个区别呢?如果 MLOps 和 LLMOps 如此相似,那么 LLMOps 只是另一个机会主义者在简历上添加的时髦词汇吗?并非如此。事实上,我认为它与“大数据”这个词相当相似。当这个词达到最高流行时,拥有 Big Data Engineer 等职称的人使用完全不同的工具集,并开发了处理大型数据集所必需的专业技能。LLM 带来了一系列挑战和问题,你在传统机器学习系统中找不到。其中大多数问题几乎完全由于它们太大而产生。大模型就是大!我们希望向您展示,LLM 真正名副其实。让我们来看看其中一些挑战,这样我们就可以在开始讨论部署 LLM 时,能够更加欣赏面临的任务。

3.2.1 长时间下载

回到 2017 年,当我还是一名深度参与数据科学家时,我决定尝试重新实现当时最著名的一些计算机视觉模型,包括 AlexNet、VGG19 和 ResNet。我认为这将是巩固我对基础知识理解的好方法,通过一些实际的动手经验。而且,我还有一个别有用心的动机,我刚刚组建了自己的机器,配备了一些当时最先进的 NVIDIA GeForce 1080 TI GPU——我想这将是一个很好的方法来使用它们。第一个任务:下载 ImageNet 数据集。ImageNet 数据集是当时最大的标注数据集之一,包含数百万张图像,文件大小高达约 150GB!使用它证明你知道如何处理“大数据”,这在当时仍然是一个时髦的词汇,也是数据科学家无法替代的技能。同意了条款并获得访问权限后,我收到了第一个警钟。下载整个数据集花了整整一周。

大模型就是大。我觉得我无法过分强调这一点。在本书中,你会发现这个事实给整个生产过程带来了许多额外的头痛和问题,你必须为此做好准备。与 ImageNet 数据集相比,Bloom LLM 模型有 330GB 大小,是其两倍以上。我猜测大多数读者都没有使用过 ImageNet 或 Bloom,因此为了比较,在写作时最大的游戏之一《使命召唤:现代战争》大小为 235 GB。最终幻想 15 只有 148 GB,你可以把两个放入该模型中,还有很多空间。真的很难理解 LLM 有多大。我们从像 BERT 这样的模型的 1 亿个参数发展到了数十亿个参数。如果你狂热购物,每秒花费 20 美元(或者可能只是不小心让你的 AWS EC2 实例开着),你需要花半天时间花完一百万美元;花一亿美元需要两年时间。

幸运的是,下载 Bloom 不需要两周的时间,因为与 ImageNet 不同,它并不托管在管理不善的大学服务器上,而且已经被分成多个较小的文件以便并行下载,但仍然需要相当长的时间。考虑这样一个场景:在最佳条件下下载模型。你配备了千兆速度的光纤互联网连接,而且可以神奇地将整个带宽和 I/O 操作都分配给系统和服务器,下载仍然需要超过 5 分钟!当然,这是在最佳条件下。你可能不会在这种情况下下载模型,使用现代基础设施,你可以预计需要数小时的时间。当我的团队首次部署 Bloom 时,下载它花了一个半小时。天哪,下载《塞尔达传说:王国之泪》只用了一个半小时,而且那仅有 16GB,所以我真的不能抱怨。

生产中的大语言模型(MEAP)(一)(5)https://developer.aliyun.com/article/1517053

相关文章
|
24天前
|
消息中间件 人工智能 分布式计算
AI 驱动的开发者(MEAP)(二)(2)
AI 驱动的开发者(MEAP)(二)
25 0
|
24天前
|
存储 人工智能 测试技术
AI 驱动的开发者(MEAP)(二)(3)
AI 驱动的开发者(MEAP)(二)
26 0
|
23天前
|
人工智能 自然语言处理 算法
生产中的大语言模型(MEAP)(一)(1)
生产中的大语言模型(MEAP)(一)
19 0
|
23天前
|
机器学习/深度学习 自然语言处理 数据可视化
生产中的大语言模型(MEAP)(一)(3)
生产中的大语言模型(MEAP)(一)
30 0
|
23天前
|
机器学习/深度学习 存储 自然语言处理
生产中的大语言模型(MEAP)(一)(2)
生产中的大语言模型(MEAP)(一)
27 0
|
23天前
|
存储 机器学习/深度学习 监控
生产中的大语言模型(MEAP)(一)(5)
生产中的大语言模型(MEAP)(一)
22 0
|
24天前
|
存储 人工智能 自然语言处理
AI 辅助测试(MEAP)(一)(5)
AI 辅助测试(MEAP)(一)
26 0
|
24天前
|
存储 人工智能 自然语言处理
AI 辅助测试(MEAP)(一)(3)
AI 辅助测试(MEAP)(一)
14 1
|
24天前
|
XML 人工智能 JSON
AI 辅助测试(MEAP)(一)(2)
AI 辅助测试(MEAP)(一)
30 0
|
24天前
|
机器学习/深度学习 存储 人工智能
AI 辅助测试(MEAP)(一)(1)
AI 辅助测试(MEAP)(一)
31 0

热门文章

最新文章