AI大模型到底有没有智能?一篇文章给你讲明明白白

news2024/11/13 9:20:39

生成式人工智能 (GenAI[1] ) 和大语言模型 (LLM [2] ),这两个词汇想必已在大家的耳边萦绕多时。它们如惊涛骇浪般席卷了整个科技界,登上了各大新闻头条。ChatGPT,这个神奇的对话助手,也许已成为你形影不离的良师益友。

然而,在这场方兴未艾的 GenAI 革命背后,有一个谜题久久萦绕在人们心头:这些模型的智能究竟从何而来? 本文将为您揭开谜底,解析生成式文本模型的奥秘。我们将抛开晦涩艰深的数学,用通俗易懂的语言,带您走进这个神奇的算法世界。让我们撕下 “魔法” 的面纱,看清其中的计算机科学本质。

LLM 的真面目

首先,我们要破除一个常见的误区。许多人误以为,这些模型是真的能够与人对话,回答人们的各种问题。然而,它们真正的能力远没有想象的那么复杂——它们所做的,不过是根据输入的文本,预测下一个词语 (更准确地说,是下一个 token)。

Token,这个看似简单的概念,却是揭开 LLM 神秘面纱的钥匙。让我们由此出发,步步深入,一探究竟。

Token,这些文本的积木、语言的原子,正是 LLM 理解世界的基石。对我们而言,token 不过是单词、标点、空格的化身,但在 LLM 的眼中,它们是精简而高效的信息编码。有时,一个 token 可能代表一串字符,长短不一;有时,它可能是孤零零的一个标点符号。

LLM 的词汇表,就是这些 token 的集合,啥都有,样样全。这其中的奥秘,要追溯到 BPE 算法[3] 。BPE 算法是如何炼制出这些 tokens 的?这个问题,值得我们细细探究。但在此之前,只需记住:GPT-2 模型[4] ,这个自然语言处理界的明星,它的词汇表中有 50,257 个 token。

在 LLM 的世界里,每个 token 都有一个独一无二的数字身份证。而 Tokenizer,就是文本和 token 之间的 “翻译官”,将人类的语言转化为 LLM 能理解的编码,也将 LLM 的思维解码为人类的文字。如果你熟悉 Python,不妨亲自与 token 打个照面。只需安装 OpenAI 的 tiktoken 包:

代码语言:javascript

**复制

$ pip install tiktoken

然后在 Python 中尝试以下操作:

代码语言:javascript

**复制

>>> import tiktoken
>>> encoding = tiktoken.encoding_for_model("gpt-2")

>>> encoding.encode("The quick brown fox jumps over the lazy dog.")
[464, 2068, 7586, 21831, 18045, 625, 262, 16931, 3290, 13]

>>> encoding.decode([464, 2068, 7586, 21831, 18045, 625, 262, 16931, 3290, 13])
'The quick brown fox jumps over the lazy dog.'

>>> encoding.decode([464])
'The'
>>> encoding.decode([2068])
' quick'
>>> encoding.decode([13])
'.'

在这个实验中,我们可以看到,对于 GPT-2 而言,token 464 表示单词 “The”,token 2068 表示 “quick” (含前导空格),token 13 则表示句点。

由于 token 是算法生成的,有时会出现一些奇怪的现象。比如,同一个单词 “the” 的三个变体在 GPT-2 中被编码成了不同的 token:

代码语言:javascript

**复制

>>> encoding.encode('The'
[464]
>>> encoding.encode('the')
[1169]
>>> encoding.encode(' the')
[262]

BPE 算法并不总是将完整的单词映射为 token。事实上,不太常用的单词可能无法成为单独的 token,需要用多个 token 组合编码,比如这个 “Payment”,就要化身为 “Pay” 和 “ment” 的组合:

代码语言:javascript

**复制

>>> encoding.encode("Payment")
[19197, 434]

>>> encoding.decode([19197])
'Pay'
>>> encoding.decode([434])
'ment'

【一一AGI大模型学习 所有资源获取处一一】

①人工智能/大模型学习路线

②AI产品经理入门指南

③大模型方向必读书籍PDF版

④超详细海量大模型实战项目

⑤LLM大模型系统学习教程

⑥640套-AI大模型报告合集

⑦从0-1入门大模型教程视频

⑧AGI大模型技术公开课名额

预测下一个 Token

语言模型就像一个 “水晶球”,给它一串文字,它就能预言下一个最可能出现的词语。这是它的看家本领。但模型并非真的手眼通天,它的预言能力其实基于扎实的概率计算。让我们一起掀开这层神秘的面纱,看看背后的真相。

如果你懂一点 Python,我们可以用几行代码来窥探语言模型的预言过程:

代码语言:javascript

**复制

predictions = get_token_predictions(['The', ' quick', ' brown', ' fox'])

这个 get_token_predictions 函数就是我们的 “水晶球”。它接受一个 token 列表作为输入,这些 token 来自用户提供的 prompt。在这个例子中,我们假设每个单词都是一个独立的 token。当然,在实际使用中,每个 token 都有一个对应的数字 ID,但为了简单起见,我们这里直接用单词的文本形式。

函数的返回结果是一个庞大的数据结构,里面记录了词汇表中每个 token 出现在输入文本之后的概率。以 GPT-2 模型为例,它的词汇表包含 50,257 个 token,因此返回值就是一个 50,257 维的概率分布。

现在再来重新审视一下这个例子。如果我们的语言模型训练有素,面对 “The quick brown fox[5] ” 这样一个烂大街的句子片段,它很可能会预测下一个词是 “jumps”,而不是 “potato” 之类风马牛不相及的词。在这个概率分布中,“jumps” 的概率值会非常高,而 “potato” 的概率值则接近于零。

The quick brown fox jumps over the lazy dog (相应中文可简译为 “快狐跨懒狗”,完整翻译则是 “敏捷的棕色狐狸跨过懒狗”) 是一个著名的英语全字母句,常用于测试字体显示效果和键盘是否故障。此句也常以 “quick brown fox” 做为指代简称。

当然,语言模型的预测能力并非与生俱来,而是通过日积月累的训练得来的。在漫长的训练过程中,模型如饥似渴地汲取海量文本的营养,逐渐茁壮成长。训练结束时,它已经具备了应对各种文本输入的能力,可以利用积累的知识和经验,计算出任意 token 序列的下一个 token 概率。

现在是不是觉得语言模型的预测过程没那么神奇了?它与其说是魔法,不如说是一个基于概率的计算过程。这个过程虽然复杂,但并非不可理解。我们只要掌握了基本原理,就可以揭开它的神秘面纱,走近它,了解它。

长文本生成的奥秘

由于语言模型每次只能预测下一个 token 会是什么,因此生成完整句子的唯一方法就是在循环中多次运行该模型。每一轮迭代都会从模型返回的概率分布中选择一个新的 token,生成新的内容。然后将这个新 token 附加到下一轮中输入给模型的文本序列末尾,如此循环往复,直到生成足够长度的文本。

我们来看一个更完整的 Python 伪代码,展示具体的实现逻辑:

代码语言:javascript

**复制

def generate_text(prompt, num_tokens, hyperparameters):
    tokens = tokenize(prompt)
    for i in range(num_tokens):
        predictions = get_token_predictions(tokens)
        next_token = select_next_token(predictions, hyperparameters)
        tokens.append(next_token)
    return ''.join(tokens)

其中,generate_text() 函数接受一个用户输入的提示词 (prompt) 文本作为参数,这可以是一个问题或其他任意文本。

tokenize() 辅助函数使用类似 tiktoken 的分词库将提示文本转换成一系列等效的 token(token) 序列。在 for 循环内部,get_token_predictions() 函数调用语言模型来获取下一个 token 的概率分布,这一步与前面的示例类似。

select_next_token() 函数根据上一步得到的下个 token 概率分布,选择最合适的 token 来延续当前的文本序列。最简单的做法是选择概率最高的 token,在机器学习中被称为贪婪选择 (greedy selection)。更好的做法是用符合模型给出概率分布的随机数生成器来选词,这样可以让生成的文本更丰富多样。如果用同样的输入多次运行模型,这种方法还可以让每次产生的回应都略有不同。

为了让 token 选择过程更加灵活可控,可以用一些超参数 (hyperparameter) 来调整语言模型返回的概率分布,这些超参数作为参数传递给文本生成函数。通过调整超参数,你可以控制 token 选择的 “贪婪程度”。如果你用过大语言模型,你可能比较熟悉名为 temperature 的超参数。提高 temperature 的值可以让 token 的概率分布变得更加平缓,增加选中概率较低 token 的机会,从而让生成的文本显得更有创意和变化。此外,常用的还有 top_ptop_k 两个超参数,它们限定从概率最高的前 k 个或概率超过阈值 p 的 token 中进行选择,以平衡多样性和连贯性。

选定了一个新 token 后,循环进入下一轮迭代,将新 token 添加到原有文本序列的末尾,作为新一轮的输入,再接着生成下一个 token。num_tokens 参数控制循环的迭代轮数,决定要生成的文本长度。但需要注意的是,由于语言模型是逐词预测,没有句子或段落的概念,生成的文本常常会在句子中途意外结束。为了避免这种情况,我们可以把 num_tokens 参数视为生成长度的上限而非确切值,当遇到句号、问号等标点符号时提前结束生成过程,以保证文本在语义和语法上的完整性。

如果你已经读到这里且充分理解了以上内容,那么恭喜你!现在你对大语言模型的基本工作原理有了一个高层次的认识。如果你想进一步了解更多细节,我在下一节会深入探讨一些更加技术性的话题,但会尽量避免过多涉及晦涩难懂的数学原理。

模型训练

遗憾的是,不借助数学语言来讨论模型训练实际上是很困难的。这里先展示一种非常简单的训练方法。

既然 LLM 的任务是预测某些词后面跟随的词,那么一个简单的模型训练方式就是从训练数据集中提取所有连续的词对,并用它们来构建一张概率表。

让我们用一个小型词表和数据集来演示这个过程。假设模型的词表包含以下 5 个词:

代码语言:javascript

**复制

['I', 'you', 'like', 'apples', 'bananas']

为了保持示例简洁,我不打算将空格和标点符号视为独立的词。

我们使用由三个句子组成的训练数据集:

  • I like apples
  • I like bananas
  • you like bananas

我们可以构建一个 5x5 的表格,在每个单元格中记录 “该单元格所在行的词” 后面跟随 “该单元格所在列的词” 的次数。下面是根据数据集中三个句子得到的表格:

-Iyoulikeapplesbananas
I2
you1
like12
apples
bananas

这个表格应该不难理解。数据集中包含两个 “I like” 实例,一个 “you like” 实例,一个 “like apples” 实例和两个 “like bananas” 实例。

现在我们知道了每对词在训练集中出现的次数,就可以计算每个词后面跟随其他词的概率了。为此,我们将表中每一行的数字转换为概率值。例如,表格中间行的 “like” 后面有一次跟随 “apples”,两次跟随 “bananas”。这意味着在 33.3%的情况下 “like” 后面是 “apples”,剩下 66.7%的情况下是 “bananas”。

下面是计算出所有概率后的完整表格。空单元格代表 0%的概率。

-Iyoulikeapplesbananas
I100%
you100%
like33.3%66.7%
apples25%25%25%25%
bananas25%25%25%25%

“I”、“you” 和 “like” 这几行的概率很容易计算,但 “apples” 和 “bananas” 带来了问题。由于数据集中没有这两个词后面接其他词的例子,它们存在训练数据的空白。为了确保模型即使面对未见过的词也能做出预测,我决定将 “apples” 和 “bananas” 的后续词概率平均分配给其他四个可能的词。这种做法虽然可能产生不自然的结果,但至少能防止模型在遇到这两个词时陷入死循环。

训练数据存在 “空洞” 的问题对语言模型的影响不容忽视。在真实的大语言模型中,由于训练语料极其庞大,这些空洞通常表现为局部覆盖率偏低,而不是整体性的缺失,因而不太容易被发现。语言模型在这些训练不足的领域或话题上会产生片面、错误或前后不一致的预测结果,但通常会以一种难以感知的形式表现出来。这就是语言模型有时会产生 “幻觉[6]” 的原因之一,所谓幻觉,就是指生成的文本表面上读起来通顺流畅,但实际包含了事实错误或前后矛盾的内容。

借助上面给出的概率表,你现在可以自己想象一下 get_token_predictions() 函数会如何实现。用 Python 伪代码表示大致如下:

代码语言:javascript

**复制

def get_token_predictions(input_tokens):
    last_token = input_tokens[-1]
    return probabilities_table[last_token]

是不是比想象的要简单?该函数接受一个单词序列作为输入,也就是用户提示。它取这个序列的最后一个单词,然后返回概率表中与之对应的那一行。

举个例子,如果用 ['you', 'like'] 来调用这个函数,它会返回 “like” 所在的行,其中 “apples” 有 33.3%的概率接在后面组成句子,而 “bananas” 占剩下的 66.7%。有了这些概率信息,之前展示的 select_next_token() 函数在三分之一的情况下应该选择 “apples”。

当 “apples” 被选为 “you like” 的续词时,“you like apples” 这个句子就形成了。这是一个在训练数据中不存在的全新句子,但它却非常合理。希望这个例子能帮你认识到,语言模型其实只是在重复使用和拼凑它在训练过程中学到的各种模式碎片,就能组合出一些看似原创的想法或概念

上下文窗口

上一节内容我使用马尔可夫链[7] 的方法训练了一个小语言模型。这种方法存在一个问题:它的上下文窗口只有一个标记,也就是说,模型在预测下一个词时,只考虑了输入序列的最后一个词,而忽略了之前的所有内容。这导致生成的文本缺乏连贯性和一致性,常常前后矛盾,逻辑跳跃。

为了提高模型的预测质量,一种直观的思路是扩大上下文窗口的大小,比如增加到 2 个标记。但这样做会导致概率表的规模急剧膨胀。以我之前使用的 5 个标记的简单词表为例,将上下文窗口增加到 2 个标记,就需要在原有的 5 行概率表基础上,额外增加 25 行来覆盖所有可能的双词组合。如果进一步扩大到 3 个标记,额外的行数将达到 125 行。可以预见,随着上下文窗口的增大,概率表的规模将呈指数级爆炸式增长

更重要的是,即使将上下文窗口扩大到 2 个或 3 个标记,其改进效果仍然非常有限。要使语言模型生成的文本真正做到前后连贯、逻辑通顺,实际上需要一个远大于此的上下文窗口。只有足够大的上下文,新生成的词才能与之前较远处提及的概念、思想产生联系,从而赋予文本连续的语义和逻辑

举个实际的例子,OpenAI 开源的 GPT-2 模型采用了 1024 个标记的上下文窗口。如果仍然沿用马尔可夫链的思路来实现这一尺度的上下文,以 5 个标记的词表为例,仅覆盖 1024 个词长度的所有可能序列,就需要高达 5^1024 行的概率表。这是一个天文数字,我在 Python 中计算了这个值的具体大小,读者可以向右滚动来查看完整的数字:

代码语言:javascript

**复制

>>> pow(5, 1024)
55626846462680034577255817933310101605480399511558295763833185422180110870347954896357078975312775514101683493275895275128810854038836502721400309634442970528269449838300058261990253686064590901798039126173562593355209381270166265416453973718012279499214790991212515897719252957621869994522193843748736289511290126272884996414561770466127838448395124802899527144151299810833802858809753719892490239782222290074816037776586657834841586939662825734294051183140794537141608771803070715941051121170285190347786926570042246331102750604036185540464179153763503857127117918822547579033069472418242684328083352174724579376695971173152319349449321466491373527284227385153411689217559966957882267024615430273115634918212890625

这段 Python 代码示例生成了一个庞大的表格,但即便如此,它也只是整个表格的一小部分。因为除了当前的 1024 个 token 长度的序列,我们还需要生成更短的序列,譬如 1023 个、1022 个 token 的序列,一直到只包含 1 个 token 的序列。这样做是为了确保在输入数据 token 数量不足的情况下,模型也能妥善处理较短的序列。马尔可夫链虽然是一个有趣的文本生成方法,但在可扩展性方面确实存在很大的问题。

如今,1024 个 token 的上下文窗口已经不那么出色了。GPT-3 将其扩大到了 2048 个 token,GPT-3.5 进一步增加到 4096 个。GPT-4 一开始支持 8192 个 token 的上下文,后来增加到 32000 个,再后来甚至达到了 128000 个 token!目前,开始出现支持 100 万以上 token 的超大上下文窗口模型,使得模型在进行 token 预测时,能够拥有更好的一致性和更强的记忆能力。

总而言之,尽管马尔可夫链为我们提供了一种正确的思路来思考文本生成问题,但其固有的可扩展性不足,使其难以成为一个可行的、能够满足实际需求的解决方案。面对海量文本数据,我们需要寻求更加高效和可扩展的文本生成方法。

从马尔可夫链到神经网络

显然,我们必须摒弃使用概率表的想法。对于一个合理大小的上下文窗口,所需的表格大小将远超内存限制。我们可以用一个函数来代替这个表格,该函数能够通过算法生成近似的下一个词出现概率,而无需将其存储在一个巨大的表格中。这正是神经网络擅长的领域。

神经网络是一种特殊的函数,它接收一些输入,经过计算后给出输出。对于语言模型而言,输入是代表提示信息的词,输出是下一个可能出现的词及其概率列表。神经网络之所以特殊,是因为除了函数逻辑之外,它们对输入进行计算的方式还受到许多外部定义参数的控制。

最初,神经网络的参数是未知的,因此其输出毫无意义。神经网络的训练过程就是要找到那些能让函数在训练数据集上表现最佳的参数,并假设如果函数在训练数据上表现良好,它在其他数据上的表现也会相当不错。

在训练过程中,参数会使用一种叫做反向传播[8] 的算法进行迭代调整,每次调整的幅度都很小。这个算法涉及大量数学计算,我们在这里就不展开了。每次参数调整后,神经网络的预测都会变得更准一些。参数更新后,网络会用训练数据集重新评估,结果为下一轮调整提供参考。这个过程会反复进行,直到函数能够在训练数据上很好地预测下一个词。

为了让你对神经网络的规模有个概念,GPT-2 模型有大约 15 亿个参数,GPT-3 增加到了 1750 亿,而 GPT-4 据说有 1.76 万亿个参数。在当前硬件条件下,训练如此规模的神经网络通常需要几周或几个月的时间。

有趣的是,由于参数数量巨大,并且都是通过漫长的迭代过程自动计算出来的,我们很难理解模型的工作原理。训练完成的大语言模型就像一个难以解释的黑箱,因为模型的大部分 “思考” 过程都隐藏在海量参数之中。即使是训练它的人,也很难说清其内部的运作机制。

层、Transformer 与 Attention 机制

你可能好奇神经网络函数内部进行了哪些神秘的计算。在精心调校的参数帮助下,它可以接收一系列输入标记,并以某种方式输出下一个标记出现的合理概率。

神经网络被配置为执行一系列操作,每个操作称为一个 “层” 。第一层接收输入并对其进行转换。转换后的输入进入下一层,再次被转换。这一过程持续进行,直到数据到达最后一层并完成最终转换,生成输出或预测结果。

机器学习专家设计出不同类型的层,对输入数据进行数学转换。他们还探索了组织和分组层的方法,以实现期望的结果。有些层是通用的,而另一些则专门处理特定类型的输入数据,如图像,或者在大语言模型中的标记化文本。

目前在大语言模型的文本生成任务中最流行的神经网络架构被称为 “Transformer[9]”。使用这种架构的模型被称为 GPT,即 “生成式预训练 Transformer”,也就是 Generative Pre-Trained Transformers[10]。

Transformer 模型的独特之处在于其执行的 “Attention[11] ” 层计算。这种计算允许模型在上下文窗口内的标记之间找出关系和模式,并将其反映在下一个标记出现的概率中。Attention 机制最初被用于语言翻译领域,作为一种找出输入序列中对理解句子意义最重要的标记的方法。这种机制赋予了现代语言模型在基本层面上 “理解” 句子的能力,它可以关注 (或集中 “注意力” 于) 重要词汇或标记,从而更好地把握句子的整体意义。正是这一机制,使 Transformer 模型在各种自然语言处理任务中取得了巨大成功。

大语言模型到底有没有智能?

通过上面的分析,你心中可能已经有了一个初步的判断:大语言模型在生成文本时是否表现出了某种形式的智能?

我个人并不认为大语言模型具备推理或提出原创想法的能力,但这并不意味着它们一无是处。得益于对上下文窗口中 token 进行的精妙计算,大语言模型能够捕捉用户输入中的模式,并将其与训练过程中学习到的相似模式匹配。它们生成的文本大部分来自训练数据的片段,但将词语 (实际上是 token) 组合在一起的方式非常复杂,在许多情况下产生了感觉原创且有用的结果

不过,考虑到大语言模型容易产生幻觉,我不会信任任何将其输出直接提供给最终用户而不经过人工验证的工作流程。

未来几个月或几年内出现的更大规模语言模型是否能实现类似真正智能的能力?鉴于 GPT 架构的诸多局限性,我觉得这不太可能发生,但谁又说的准呢,也许将来出现一些创新手段,我们就能实现这一目标。

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解
  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望
阶段3:AI大模型应用架构实践
  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景
学习计划:
  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1877819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次可输入多张图像,还能多轮对话!最新开源数据集,让AI聊天更接近现实

大模型对话能更接近现实了! 不仅可以最多输入20张图像,还能支持多达27轮对话。可处理文本图像tokens最多18k。 这就是最新开源的超长多图多轮对话理解数据集MMDU(Multi-Turn Multi-Image Dialog Understanding)。 大型视觉语言模…

技术周总结2024.06.17~06.23(Doris数据库)

文章目录 一、06.18 周二1.1) 问题01: doris数据表写入使用 stream load好还是 inser into好 一、06.18 周二 1.1) 问题01: doris数据表写入使用 stream load好还是 inser into好 对于Doris数据表的写入操作,通常推荐…

【折腾笔记】兰空图床使用Redis做缓存

前言 最近发现我部署在群晖NAS上的兰空图床程序在高并发的情况下会导致图片加载缓慢或出现图片加载失败的情况,于是我查阅了官方文档资料并进行了一系列的测试,发现兰空图床如果开启了原图保护功能,会非常的吃CPU的性能,尤其是在…

编译工具-Gradle

文章目录 Idea中配置Gradle项目project目录settings.gradlebuild.gradlegradlewgradlew.bat Gradle Build生命周期编写Settings.gradle编写Build.gradleTasksPlugins Idea中配置 配置项:gradle位置 及仓库位置 Gradle项目 Task,settings.gradle,build.…

【Arduino】实验使用ESP32控制可编程继电器制作跑马灯(图文)

今天小飞鱼实验使用ESP控制继电器,为了更好的掌握继电器的使用方法这里实验做了一个跑马灯的效果。 这里用到的可编程继电器,起始原理并不复杂,同样需要ESP32控制针脚输出高电平或低电平给到继电器,继电器使用这个信号控制一个电…

【SpringBoot】SpringBoot核心启动流程源码解析

SpringBoot总体流程 当我们启动一个SpringBoot程序的时候,只需要一个main方法就可以启动,但是对于其中流程时如何执行的,以及如何调用spring的IOC和AOP机制,本篇带着这个问题来整体体系化的梳理下流程。 SpringBootApplication …

哥斯拉短视频:成都柏煜文化传媒有限公司

哥斯拉短视频:巨兽传奇的视听盛宴 在短视频的海洋中,成都柏煜文化传媒有限公司 有一种特殊的存在总能吸引人们的目光,那就是以哥斯拉为主题的短视频。这些视频以震撼的视觉效果、扣人 ​心弦的剧情和独特的怪兽文化,为我们呈现了…

mysql5.7安装使用

mysql5.7安装包:百度网盘 提取码: 0000 一、 安装步骤 双击安装文件 选择我接受许可条款–Next 选择自定义安装,下一步 选择电脑对应的系统版本后(我的系统是64位),点击中间的右箭头,选择Next 选择安装路径–Next 执行…

Android隐藏状态栏和修改状态栏颜色_亲测有效

本文记录了隐藏状态栏和修改状态栏颜色以及电量、WiFi标志等内容的模式显示,亲测有效。 1、隐藏屏幕状态栏 public void hideStatusBar(BaseActivity activity) {Window window activity.getWindow();//没有这一行无效window.addFlags(WindowManager.LayoutParam…

瑞数(rs6)接口以及源码

测试代码截图如下:调用接口即可直接用 需要dd 有想要学习教程的也能够找我。 如有需求,欢迎+我绿泡泡。 期待你的加入!

Java | Leetcode Java题解之第189题轮转数组

题目: 题解: class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int start, int end) {whil…

ZYNQ MPSOC烧写问题记录

1、如果带有ARM代码,则ZYNQ MPSOC烧写的烧写是通过ViTIS进行的,通过JTAG模式进行烧写,如下图的PS_MODEx配置成0000,这个只与硬件相关,硬件拉高拉低。 2、如果不带ARM代码,则烧写过程与前版本一致。

PaddleOCR的快速使用

一、简介 PaddleOCR 旨在打造一套丰富、领先、且实用的 OCR 工具库,助力开发者训练出更好的模型,并应用落地。 支持多种 OCR 相关前沿算法,在此基础上打造产业级特色模型PP-OCR、PP-Structure和PP-ChatOCRv2,并打通数据生产、模型…

vue-cli 搭建项目

创建 router 目录 在一个.js文件中添加 打开外部命令 打开外部命令后,在指令栏输入npm i vue-router3.5.3 ,等待下载 下载完成后 在 main.js 中配置路由 输入这些后,基本的配置就实现了 最后进行测试,验证是否配置 或者打开外部命…

解决指南:如何应对错误代码 0x80070643

在使用Windows操作系统过程中,用户可能会遭遇各种错误代码,其中错误 0x80070643是比较常见的一种。这个错误通常在安装更新或某些软件时发生,尤其是在微软的Windows Defender或其他Microsoft安全产品以及.NET Framework更新过程中更为常见。本…

Linux的fwrite函数

函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer,intsize,intcount,FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr :指向 数据块的指针 * param ‐ size :指定…

19.《C语言》——【如何理解static和extern?】

🎇开场语 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&a…

操作系统速成笔记五

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言🚀🚀🚀二、正文☀️☀️☀️1.内存映射文件(1)方便程序员访问文件数据(2&#xff09…

小红书多账号管理平台哪个好用?可以快速监测多个小红书账号的数据吗?

随着品牌营销战线的不断扩展,小红书已经成为企业和个人品牌竞相展示的舞台。但是,随之而来的多账号管理问题也让众多运营者头疼不已。一个优秀的多账号管理平台,能让你事半功倍,轻松监控和分析账号数据。 如今,市面上出…

【proteus 51单片机入门】8*8led点阵

文章目录 前言如何点亮led点阵仿真图代码点亮led核心代码解析 爱心代码 滚动总结 前言 在嵌入式系统的开发中,LED点阵显示器是一种常见的显示设备,它可以用来显示各种图形和文字,为用户提供直观的信息反馈。本文将介绍如何使用Proteus软件和…